Créée le, 19/06/2015

 Mise à jour le, 19/05/2019

Visiteurs N°  




Accueil
Nouveau Blog Nouveautés Moteur de Recherche Votre Caddie Pour Vos Achats Votre Espace Membre Vos Signets et Vos Jeux Préférés Page de Bienvenue Statique Site en Français Site en Anglais
Sommaires
Électronique Fondamentale Technologie Fondamentale Testez vos Connaissances Électronique Théorique Digitale Électronique Pratique Digitale Lexique Électronique Numérique Data book TTL Data book CMOS Dépannage TVC Mathématique
Micro-ordinateurs
Théorique des Micro-ordinateurs Testez vos Connaissances Pratique des Micro-ordinateurs Glossaires sur les Ordinateurs
Physique
La lumière Champ d'action Rayonnement Électromagnétique
Technologies
Classification des Résistances Identification des Résistances Classification des Condensateurs Identification des Condensateurs
Formulaires Mathématiques
Géométrie Physique 1. - Électronique 1. 2. - Électronique 1. 3. - Électrotechnique 1. 4. - Électromagnétisme
Accès à tous nos Produits
E. T. F. - Tome I - 257 Pages E. T. F. - Tome II - 451 Pages E. T. F. - Tome III - 611 Pages E. T. D. - Tome I - 610 Pages N. B. M. - Tome I - 201 Pages E. T. M. - Tome I - 554 Pages Business à Domicile Ouvrages 34 pages gratuits Nos E-books Logiciel Géométrie Logiciel Composants Électroniques
Aperçu de tous nos Produits
E. T. F. - Tome I - 257 Pages E. T. F. - Tome II - 451 Pages E. T. F. - Tome III - 611 Pages E. T. D. - Tome I - 610 Pages E. T. M. - Tome I - 554 Pages Logiciel Géométrie Logiciel Composants Électroniques
Nos Leçons aux Formats PDF
Électronique Fondamentale Technologie Fondamentale Électronique Théorique Digitale Électronique Pratique Digitale Théorique des Micro-ordinateurs Mathématiques
Informatique
Dépannage Win98 et WinXP et autres Dépannage PC Glossaire HTML et Programmes PHP et Programmes JavaScript (en cours de travaux) Création de plusieurs Sites
Forums
Forum Électronique et Infos Forum Électronique et Poésie
Divers et autres
Formulaire des pages perso News XML Statistiques CountUs Éditeur JavaScript Nos Partenaires et nos Liens Utiles Gestionnaire de Partenariat Nos Partenaires MyCircle Sondages 1er Livre d'Or 2ème livre d'Or

Signets :
  Leçons suivantes        Leçons précédentes     Bas de page
  Cliquez ici pour la leçon suivante ou dans le sommaire prévu à cet effet


Interaction avec le système de fichiers et le serveur (2ème partie) :



Utilisation de fonctions de manipulation de dossiers :


Lorsque des utilisateurs ont téléchargés des fichiers sur un serveur, il peut leur être très utile de visualiser les données qui ont été téléchargées, et de manipuler le contenu des fichiers qu'ils ont téléchargés.

Le langage PHP offre tout un jeu de fonctions de manipulation des dossiers et du système de fichiers très utilse pour implémenter une telle fonctionnalité.

Lecture du contenu de dossiers :

Nous allons commencer par implémenter un script permettant de parcourir des dossiers pour explorer le contenu téléchargé. Avec PHP, la navigation dans des dossiers est très simple à mettre en œuvre. Le Listing 3 contient un script simple qui peut être utilisé à cette fin.

Listing 3. - Uploader_Lecture.php - Contenu d'un dossier contenant des fichiers téléchargés :


Ce script met en œuvre les fonctions opendir(), readdir() et closedir().

La fonction opendir() s'utilise pour ouvrir un dossier en lecture. Son usage est comparable à celui de la fonction fopen(), si ce n'est que celle-ci s'emploie pour ouvrir des fichiers. Au lieu de passer un nom de fichier à la fonction opendir(), il suffit de lui passer un nom de dossier :

    $dir = opendir($Repertoire_Actuel) ;

opendir() renvoie une poignée sur le dossier qui lui a été passé comme argument, de la même manière que fopen() renvoie une poignée sur le fichier traité.

Une fois qu'un dossier est ouvert, vous pouvez y lire un nom de fichier, en invoquant la fonction readdir($dir), comme dans l'exemple du Listing 3. Cette fonction renvoie la valeur false lorsqu'il n'a pas (ou plus) de fichier à lire (notez qu'elle renvoie également false en présence d'un fichier dénommé "0", ce qui peut bien sûr être testé).

Les fichiers n'étant pas classés dans un ordre particulier, vous devez les lister dans un tableau et les trier pour obtenir une liste triée.

Lorsque la lecture d'un dossier est terminée, la fonction closedir($dir) doit être invoquée pour mettre un terme à l'opération de lecture. Là encore, cette fonction est comparable à son équivalent pour la fermeture d'un fichier : fclose().

Un exemple de résultat obtenu à l'exécution du script du Listing 3 est montré à la figure 3.


Uploader_Lecture.png

Si vous implémentez une navigation dans les dossiers avec un tel mécanisme, il serait peut-être judicieux de restreindre les dossiers "navigables", de sorte qu'un utilisateur ne puisse parcourir le contenu des dossiers situés dans des zones qui ne lui sont pas normalement accessibles.

rewinddir($dir) est une fonction apparentée aux fonctions précédentes, et qui se révèle parfois bien utile. Elle replace le pointeur de dossier tout au début du dossier exploré.

La classe dir fournie par PHP constitue une autre possibilité. Elle est dotée des propriétés handle et path, et des méthodes read(), close() et rewind(), qui offrent une fonctionnalité identique à celle des fonctions de manipulation des dossiers décrites précédemment.

Pour visualiser l'aperçu, en cliquant ici. [Exemple 2].

Obtention d'informations relatives au dossier courant :

En spécifiant un chemin d'accès à un fichier spécifique, nous pouvons obtenir des informations additionnelles.

Les fonctions dirname($Repertoire_Actuel) et basename($Repertoire_Actuel) renvoient respectivement la partie du chemin d'accès représentant le nom du dossier contenant le fichier, et la partie du chemin d'accès représentant le nom du fichier. Ces fonctions peuvent être mises en œuvre dans un dispositif de navigation dans les dossiers, particulièrement lorsqu'une structure de dossiers complexe et élaborée pour le stockage du contenu, avec des noms de dossier et des noms de fichier significatifs.

Au script de navigation dans les dossiers, nous pourrions également ajouter un mécanisme de notification de l'espace restant disponible pour le stockage des fichiers téléchargés, en utilisant la fonction disk_free_space("/"). Lorsqu'un chemin d'accès à un dossier est passé comme argument à cette fonction, celle-ci renvoie le nombre d'octets libres sur le disque dur (Windows) ou le système de fichiers dans lequel se trouve le dossier (Unix).

Création et suppression de dossiers :

PHP nous donne la possibilité non seulement de lire passivement des informations relatives aux dossiers, mais aussi de créer et de supprimer des dossiers, respectivement au moyen des fonctions mkdir() et rmdir(). Il n'est toutefois possible de créer ou de supprimer que les seuls dossiers dont les chemins d'accès sont accessibles par l'utilisateur sous lequel est exécuté le script.

La mise en œuvre de la fonction mkdir() est un peu délicate. Cette fonction prend deux paramètres : le chemin d'accès au dossier à créer (y compris le nom du nouveau dossier), et les permissions dont doit bénéficier ce dossier. Voici un exemple d'utilisation de cette fonction :

    mkdir("/Repertoire/Temporaire", 0777) ;

Toutefois, les permissions ainsi spécifiées ne seront pas nécessairement accordées. La permission accordée sera déterminée en appliquant la variable courante $Permission_Umask à la permission spécifiée. Par exemple, si umask() contient la valeur 022, les permissions accordées seront 0755.

Vous pouvez réinitialiser le umask() avant de créer un dossier, de sorte à contrer cet effet, avec le code suivant :

    $Permission_Umask = umask(0) ;

    mkdir("Dossier", 0777) ;

    umask ($Permission_Umask) ;

Ce code met en œuvre la fonction umask(), qui permet de vérifier et de modifier la valeur courante de umask.umask() donne à umask() la valeur qui lui est passée comme argument, et renvoie l'ancienne valeur de umask(). Si umask() est invoquée sans spécifier de paramètres, elle renvoie uniquement la valeur courante de umask().

La fonction rmdir() supprime le dossier qui lui est passé comme paramètre. En voici deux exemples d'utilisation :

    rmdir("/Repertoire/Temporaire") ;

et

    rmdir("c:\\Repertoire\\Temporaire") ;

Pour supprimer un dossier au moyen de la fonction rmdir(), il est impératif que le dossier soit vide.

Nous vous communiquons le code HTML relativement simple du Listing 4 concernant le formulaire de création de(s) répertoire(s), afin d'en faciliter vos essais.


Listing 4. - Upload_Creer_Repertoire.html - Contenu d'un dossier permettant de créer le(s) répertoire(s) :


Nous vous communiquons également le code PHP du Listing 5 pour l'exécution du script concernant la création de répertoire.


Listing 5. - Upload_Creer_Repertoire.php - Contenu d'un dossier permettant de créer le(s) répertoire(s) à l'exécution du script :


N'oubliez pas de créer le répertoire intitulé Upload_Repertoire, en respectant la casse. Sinon, le script ne peut fonctionner.

Pour visualiser l'aperçu, en cliquant ici. [Exemple 3].

Pour supprimer le répertoire que vous aviez créé, il suffit de remplacer la fonction if(@mkdir($Dossier, 0777)) du Listing 5, en remplaçant la fonction ci-après par if(@rmdir($Dossier)) (mkdir() ---> par rmdir()).

Interaction avec le système de fichiers :

En PHP, nous pouvons visualiser et obtenir des informations sur des dossiers, mais nous pouvons également interagir avec et obtenir des informations sur des fichiers stockés sur le serveur Web. Nous avons vu précédemment comment écrire et lire dans des fichiers. PHP offre nombre d'autres fonctions pour la manipulation des fichiers.

Obtention d'informations sur les fichiers :

La part du script du Listing 3 qui lit des fichiers peut être modifiée de la manière suivante :

    while($fichier = $dir->read())

    {

    echo "<b> <a href = \"Upload_Lecture_Fichier.php?file=" . $fichier . "\">" . $fichier . "</a></b> <BR/>" ;

    }

Mais vous risquerez d'obtenir une erreur d'exécution ci-après ; Fatal error : Call to a member function read() on a non-object in C, ce qui signifie en français : Appel à une fonction membre read() sur un non-objet dans C.

Afin d'éviter cette erreur, nous pouvons ensuite créer un script dénommé Upload_Lecture_Fichier.php, pour obtenir plus d'informations sur un fichier. Ce script est donné aux Listings 6 et 7 concernant HTML et PHP.


Listing 6. - Upload_Lecture_Fichier.html - Mise en œuvre d'un formulaire HTML renseignant sur l'état d'un fichier :



Listing 7. - Upload_Lecture_Fichier.php - Mise en œuvre de fonctions renseignant sur l'état d'un fichier :


La figure 4 donne un exemple d'exécution du Listing 7.


Lecture_des_Informations_du_Fichier.png

Pour visualiser l'aperçu, en cliquant ici. [Exemple 4].

Examinons en détail la tâche accomplie par chacune des fonctions utilisées au Listing 7.

Comme nous l'avons déjà mentionné, la fonction basename() fournit le nom du fichier sans mention du dossier (la fonction dirname() fournirait quant à elle le nom du dossier sans le nom du fichier).

Les fonctions fileatime() et filemtime() renvoient la date et l'heure ("l'horodatage") respectivement du dernier accès au fichier, et de la dernière modification apportée au fichier. L'horodatage ainsi renvoyé est reformaté dans le Listing 7 au moyen de la fonction date(), de sorte à en faciliter la lecture. Avec certains systèmes d'exploitation (comme dans l'exemple considéré ici), ces fonctions renvoient la même valeur, en fonction de l'information stockée par le système.

Les fonctions fileowner() et filegroup() renvoient l'ID utilisateur (uid pour user ID) et l'ID de groupe (gid pour group ID) du fichier. Ces ID peuvent être convertis en noms via respectivement les fonctions posix_getpwuid() et posi_getgrgid(), de sorte à en faciliter la lecture. Ces fonctions prennent respectivement le uid et le gid comme paramètre, et renvoie un tableau associatif contenant des informations sur l'utilisateur ou le groupe, y compris le nom de l'utilisateur ou du groupe (qui n'est pas utilisé dans le script du Listing 7).

La fonction fileperms() renvoie les permissions sur le fichier. Dans le Listing 7, les permissions renvoyées sont reformatées en un nombre octal au moyen de la fonction decoct(), de sorte à leur donner un format plus familier aux utilisateurs Unix.

La fonction filesize() renvoie la taille du fichier en octets.

Le second jeu de fonctions mises en œuvre (is_dir(), is_executable(), is_file(), is_link(), is_readable(), et is_writable()) est utilisé pour tester les différents attributs du fichier. Toutes ces fonctions renvoient true ou false.

La fonction stat() aurait également pu être employée pour obtenir une grande part de ces informations. Lorsqu'un fichier lui est passé comme argument, cette fonction renvoie un tableau rassemblant des informations semblables à celles renvoyées par les fonctions citées plus haut. La fonction lstat() est identique à la fonction stat(), si ce n'est qu'elle s'emploie avec des liens symboliques.

Toutes les fonctions d'information sur l'état d'un fichier se révèlent coûteuses en termes de temps d'exécution. C'est pourquoi les données qu'elles renvoient sont placées dans la mémoire cache. Pour obtenir des informations sur l'état d'un fichier donné, avant et après modification de ce fichier, invoquez la fonction ci-après :

    clearstatcache() ;

pour effacer les résultats précédents. Par exemple, pour utiliser le script du Listing 7 avant et après avoir apporté des changements aux données du fichier, il faudrait tout d'abord s'assurer que les données renvoyées sont à jour en invoquant cette fonction.

Interaction avec l'environnement - getenv() et putenv() :

Nous terminerons cette leçon, en examinant comment utiliser des variables d'environnement à partir du code PHP. Deux fonctions sont disponibles à cet effet : getenv(), qui permet de retrouver des variables d'environnement, et putenv(), qui s'emploie pour ajuster des variables d'environnement.

Notez que l'environnement considéré ici est l'environnement dans lequel PHP est exécuté sur le serveur.

Vous pouvez obtenir la liste de toutes les variables d'environnement PHP en exécutant la fonction phpinfo(). Certaines variables sont plus utiles que d'autres, par exemple :

    $ip = getenv('HTTP_REFERER') ;

    echo $ip ;

renvoie l'URL de la page à partir de laquelle l'utilisateur a accédé à la page courante.

Vous pouvez aussi ajuster des variables d'environnement, selon vos besoins, par exemple :

    $home = "/home/electronique" ;

    putenv ("HOME = $home") ;

Nous terminons ainsi cette douzième leçon et nous verrons dans la prochaine, la Génération d'images via PHP sur certains programmes.










Nombre de pages vues, à partir de cette date : le 23 MAI 2019

compteur de visite

    




Envoyez un courrier électronique à Administrateur Web Société pour toute question ou remarque concernant ce site Web. 

Version du site : 10. 5. 14 - Site optimisation 1280 x 1024 pixels - Faculté de Nanterre - Dernière modification : 19 MAI 2019.   

Ce site Web a été Créé le, 14 Mars 1999 et ayant Rénové, en MAI 2019.