Apprendre PHP (17/19) - Parcours de dossiers et exécution de programmes externes

In this French tutorial, the instructor demonstrates how to work with directories in PHP and how to run external system commands. He starts by showing how to open a directory with opendir, change directories with chdir, and retrieve the current working directory using getcwd. He then explains reading entries one by one using readdir inside a loop, displaying each entry, and distinguishing files from directories with filetype. The lesson continues with the simpler scandir function, which returns an array of all entries, and shows how to iterate over that array. After covering directory handling, the video introduces the exec function for executing external programs such as ls, ls -l, ls -a, and ifconfig. The instructor shows how to capture command output into an array, iterate over it, and display detailed information, while warning about permission constraints that may prevent certain commands from running. The tutorial concludes with a recap of directory manipulation and external command execution in PHP.
Chapters
Bonjour à tous et bienvenue dans cette nouvelle leçon de PHP. Aujourd'hui, nous allons voir comment manipuler les dossiers et comment exécuter des programmes externes. Le langage PHP offre quelques fonctions qui permettent de manipuler les dossiers comme on peut le faire sur un système d'exploitation, comme par exemple l'ouverture d'un dossier et l'exploration de celui-ci. Alors, première opération à faire, c'est l'ouverture d'un dossier exactement comme on le fait pour les fichiers. On va donc mettre un identifiant d'ouverture de dossier que l'on va appeler id, comme ça, et on exécutera la fonction opendir. La fonction opendir contient comme argument le dossier que l'on veut ouvrir. Par exemple, je mettrai ici en guise de chaîne de caractères./ pour dire le dossier courant. Et si vous voulez changer de dossier, il suffit de mettre chdir Et vous mettez quelque chose du genre pour dire que vous voulez remonter au dossier parent. Sinon, je mettrai directement images comme ceci pour dire que je veux accéder au dossier images qui figure dans le dossier que j'ai ouvert. Pour le moment, on va se contenter du dossier courant, c'est-à-dire celui que l'on vient d'ouvrir. Pour vérifier le nom de ce dossier, on exécute la fonction getcwd. Et on mettra echo pour que l'on puisse afficher le nom du dossier. Quand j'exécute, ça m'affiche le dossier /Applications/MAMP/htdocs/tuto-php parce que je suis bel et bien dans le dossier qui s'appelle tuto-php. En réalité, la fonction getcwd est équivalente à la commande pwd sur Linux. Maintenant que je sais dans quel dossier je suis, je vais explorer le contenu de celui-ci. Alors il existe la fonction readdir qui contient comme argument l'identifiant de l'ouverture du dossier. readdir permet de retourner les entrées une à une de mon dossier, ça veut dire le dossier que je viens d'ouvrir. Alors dans ce cas je vais stocker le résultat de readdir dans une chaîne de caractères comme ceci. La fonction readdir permet de retourner soit le nom du fichier ou bien le dossier courant, ça veut dire celui qui est inclus dans le dossier que j'ai ouvert. Si Sinon ça retourne false si j'ai atteint la fin du dossier. Alors dans ce cas je vais programmer cette instruction dans une boucle. C'est-à-dire que tant que j'ai pas atteint la fin du dossier, alors je vais récupérer la variable $str qui contient le nom de l'entrée courante que je vais afficher tout court. Donc echo $str comme ceci. Et quand j'exécute ça m'affiche les informations de mon dossier. Bien sûr ça affiche toutes les entrées dans la même ligne et maintenant je vais essayer de les séparer sur des lignes à part. Je mettrai donc là echo br comme ceci. Et quand j'exécute, donc maintenant ça m'affiche tous les dossiers et fichiers qui sont inclus dans mon dossier. Et si je veux savoir si l'entrée affichée est un dossier ou un fichier, alors on fait appel à la fonction filetype qu'on a vu dans la leçon des fichiers comme ceci. Et je peux mettre un espace avant pour l'écarter du nom du fichier ou bien du dossier courant. Alors exécutons maintenant pour voir le résultat. Donc là ça m'affiche dir, dir ça ce sont des dossiers, et là ça m'affiche file, dir etc. C'est-à-dire que les dossiers sont suivis du mot dir pour dire directory et les fichiers sont suivis de file pour dire fichier. Le traitement que l'on vient de faire on peut le simplifier à l'aide de la fonction scandir. Scandir est une fonction qui permet de retourner un tableau qui contient les informations du dossier courant. On mettra donc là quelque chose du genre tab= scandir comme ceci. Donc maintenant je n'ai plus besoin de l'ID. Alors j'exécute, je n'ai rien. Donc maintenant je vais afficher le contenu du tableau. Je peux mettre print_r comme ceci. Quand j'exécute, ça m'affiche les entrées de mon dossier. De la même manière, si je veux mettre ça sur des lignes séparées, je mettrai une boucle. Je mettrai echo $val comme ceci. J'exécute maintenant et ça me donne la même chose. C'est-à-dire que vous avez le choix entre l'utilisation de la fonction opendir et la fonction readdir afin de pouvoir accéder à un dossier et le parcourir élément par élément en utilisant l'identifiant d'ouverture, ou bien juste aller de la fonction qui n'a même pas besoin de l'identifiant et qui peut faire le traitement de la même manière. Il faut savoir qu'en PHP on peut exécuter des programmes externes, comme par exemple exécuter des commandes via des scripts PHP. Autrement dit, le traitement que l'on vient de faire qui permet d'explorer un dossier, on peut le faire avec les commandes que l'on connaît déjà qui correspondent au système d'exploitation utilisé. La fonction qui permet de passer des commandes ou bien d'exécuter des programmes externes en PHP s'appelle exec. Il s'écrit comme ceci. exec accepte une chaîne de caractères qui n'est rien d'autre que la commande à exécuter, par exemple ls. ls dans les systèmes Unix permet de lister le contenu d'un répertoire. Alors dans ce cas exec va afficher une des entrées du répertoire et pas toutes. Donc quand je mets par exemple echo et que j'exécute ça m'affiche index.php qui est la page courante. Mais moi je veux afficher toutes les entrées dans mon répertoire. Dans ce cas la fonction exec accepte un deuxième argument qui est la sortie. La sortie dans ce cas sera un tableau, comme ça par exemple. Alors maintenant je viens de mettre le résultat de l'exécution de la commande ls dans le tableau tab que je vais explorer. Je mettrai donc foreach. Exécutons maintenant pour voir le résultat. Alors ça m'affiche les entrées de mon dossier une à une. Bon, si je veux bien sûr avoir plus de détails, il suffit de mettre les options comme on le fait sur la ligne de commande, par exemple -l pour afficher tous les détails du fichier ou bien du dossier courant. Donc voilà, maintenant ça m'affiche ceci. Il y a les privilèges, il y a le propriétaire, le groupe, donc il y a aussi le nom du fichier, la date de la dernière modification, etc. Et bien sûr, on peut voir s'il s'agit d'un dossier si ça commence par un d, ou bien si c'est juste un fichier comme index.php. Et si ça commence par un l, alors c'est un lien symbolique. On peut aussi ajouter l'option -a pour dire que l'on veut aussi afficher les dossiers et les fichiers cachés. Dans ce cas, ça nous affiche les fichiers et dossiers qui sont cachés de cette manière. On peut tester une autre commande, par exemple ifconfig, qui va afficher mes paramètres réseau. Donc j'actualise et ça m'affiche plein d'informations. On va voir par exemple ici, donc c'est la boucle locale avec l'adresse 127.0.0.1. Il y a aussi en0, dans ce cas c'est ma carte Wi-Fi avec l'adresse IP 192.168.0.102, etc. C'est-à-dire que toutes les informations que vous êtes censé avoir sur la ligne de commande si vous exécutez ces commandes-là, on peut le faire via le PHP. Et bien entendu, je vous laisse imaginer la puissance de cette fonction exec. C'est-à-dire que vous pouvez désormais programmer vos commandes système via des scripts PHP d'une manière dynamique. Faites juste attention à une chose, c'est que certaines commandes risquent de ne pas s'exécuter et c'est normal parce que comme je l'ai expliqué avant, le script PHP s'exécute avec des privilèges. Alors si le script PHP tente d'exécuter une commande qui dépasse ses privilèges, dans ce cas ça va pas marcher tout court. Alors j'espère que vous avez compris le principe de la manipulation des dossiers en PHP et l'exécution des programmes externes. Merci pour votre attention et à la vidéo prochaine.
More from Yamossoun

Algorithme de calcule de la racine carrée par dichotomie #dichotomy #squareroot #algorithm









