Lister le contenu d'un dossier avec PHP

Formation

En Semi-présenciel Paris

Prix sur demande

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Description

  • Typologie

    Formation

  • Méthodologie

    En semi-présentiel

  • Lieu

    Paris

Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.

Les sites et dates disponibles

Lieu

Date de début

Paris ((75) Paris)
Voir plan
7 Cité Paradis, 75010

Date de début

Consulter

Questions / Réponses

Ajoutez votre question

Nos conseillers et autres utilisateurs pourront vous répondre

À qui souhaitez-vous addresser votre question?

Saisissez vos coordonnées pour recevoir une réponse

Nous ne publierons que votre nom et votre question

Les Avis

Le programme

Introduction du cours

Bonjour chers Zéros.

Dans ce tutoriel, je vais vous apprendre à lister les fichiers qui sont contenus dans un dossier.
Par exemple, si vous avez un script pour uploader des fichiers, vous aurez sûrement envie de pouvoir les lister pour les retrouver sans passer par votre FTP.

Nous allons donc voir ça ensemble ! ;)

Pour les prérequis, il faut au moins que vous sachiez utiliser les conditions et les boucles, c'est tout ce qu'il vous faut pour réaliser ce petit script.

Prêts ? On y va.

Comment allons-nous faire ?

Pour commencer, nous allons ici poser les bases (simples) de ce que nous allons faire pour lister le contenu d'un dossier.

Pour faire simple, nous allons nous servir de deux fonctions que vous ne connaissez peut-être pas.
Ce sont opendir() et readdir().

Si vous avez ne serait-ce que quelques bases d'anglais, vous aurez sans doute reconnu open qui signifie ouvrir, et read qui signifie lire. Pour dir, c'est une abréviation de directory, qui signifie dossier.

Je vais vous expliquer leur fonctionnement :

  • opendir() : cette fonction sert à ouvrir un dossier. Elle prend comme paramètre le nom du dossier qui doit être ouvert, celui justement dont on va lire le contenu ! ;)

  • readdir() : cette fonction va s'utiliser après la fonction opendir(). Elle permet de lire le contenu du dossier précédemment ouvert.

Et c'est tout... :D

Ce n'est pas plus dur !
Bien sûr, il ne suffit pas de poser les deux fonctions l'une après l'autre, vous vous en doutez bien.

Comme il y a sûrement plusieurs fichiers dans votre dossier, il faudra utiliser une boucle...
Nous allons faire tout cela dans la prochaine partie ! :)

Et puis, pour le plaisir (chacun son point de vue sur le plaisir :p ), nous allons faire un compteur qui va compter le nombre de fichiers contenus dans votre dossier.

Vous savez tout !

Nous pouvons passer à la pratique ! :pirate:

Listage des fichiers

Nous voilà dans la partie pratique de ce tutoriel.
Nous allons avoir, au terme de ce chapitre, une page qui liste le contenu du dossier souhaité ! ;)

Comme je vous l'ai annoncé dans la première partie, nous allons utiliser un compteur qui va nous donner le nombre de fichiers présents dans le dossier.
Pour faire cela, nous allons simplement créer une variable $nb_fichier que l'on incrémentera à chaque nouveau fichier.

Nous allons donc déclarer cette variable.
Les résultats seront affichés sous forme de liste. On va ouvrir notre balise <ul> ici :

<?php $nb_fichier = 0; echo '<ul>'; ?>

Rien de compliqué jusque-là.

Maintenant, il va falloir ouvrir le dossier souhaité avec la fonction opendir() que je vous ai décrite dans la première partie. On stockera le résultat de l'ouverture du dossier dans une variable $dossier, vous verrez ensuite pourquoi. ;)

<?php if($dossier = opendir('./mondossier')) { ?>

Pourquoi avoir ouvert un if ? :o

Bonne question ! Quand j'ouvre le dossier avec opendir, je donne en paramètre le lien relatif (M@teo21 traite des liens relatifs dans son cours xHTML/CSS : ici).
Si jamais le dossier en question n'existe pas, il ne sera pas ouvert, et par conséquent le script plantera !
Pour éviter cela, on met une condition. Si elle est vérifiée, on continue l'exécution du script, sinon on affiche un message d'erreur.

Maintenant que cette question ne vous trotte plus dans la tête, nous allons continuer. :)

Nous allons lire les fichiers avec la fonction readdir() et commencer notre boucle.

Comme je vous l'ai dit plus haut, nous avons créé une variable $dossier qui contient le résultat de l'ouverture. C'est cette variable qui va être lue avec readdir().

<?php while(false !== ($fichier = readdir($dossier))) { ?>

Encore une fois, des questions se posent.
Que signifie ce « false !== » ? Il vérifie que la lecture du dossier n'a pas retourné d'erreur.

Si tout est bon, on entre dans la boucle.

<?php if($fichier != '.' && $fichier != '..' && $fichier != 'index.php') { ?>

Ici, nous indiquons les fichiers à ne pas afficher dans les résultats. Je m'explique.

Si nous prenons l'exemple de la liste d'un dossier qui contient des images, cela ferait un peu « tache » de voir apparaître un index.php en plein milieu de notre liste... :(
Pour cette raison, nous mettons une condition qui dit : « Si ce n'est ni '.', ni '..', ni 'index.php', affiche les fichiers... ».

Le '.' et le '..' sont des liens relatifs pour le déplacement dans les dossiers.
Un point seul '.' signifie 'dossier actuel' et deux points '..' signifient 'dossier parent', le dossier qui contient le dossier dans lequel vous êtes.
readdir() les met dans les fichiers du dossier, donc nous faisons en sorte de ne pas les afficher dans notre condition.

Maintenant, on affiche les résultats !

<?php $nb_fichier++; // On incrémente le compteur de 1 echo '<li><a href="./mondossier/' . $fichier . '">' . $fichier . '</a></li>'; } // On ferme le if (qui permet de ne pas afficher index.php, etc.) } // On termine la boucle ?>

Le code est explicite, on incrémente le compteur.
Puis on crée une nouvelle entrée dans la liste avec le nom du fichier en lien. Comme ça, on ouvre le fichier (par exemple une image) directement en cliquant dessus. :)

Maintenant, il ne nous reste plus qu'à afficher le nombre de fichiers, le message d'erreur au cas où le dossier n'aurait pas été ouvert et la fermeture de la liste.

Ah ! Au fait, quand on ouvre un dossier, il faut aussi le fermer (comme la connexion à MySQL) : donc nous allons utiliser closedir() pour le fermer à la fin du script !

Au travail ! ;)

<?php echo '</ul><br />'; echo 'Il y a <strong>' . $nb_fichier .'</strong> fichier(s) dans le dossier'; closedir($dossier); } else echo 'Le dossier n\' a pas pu être ouvert'; ?>

Et voilà !
Nous en avons fini avec notre script !

Idées d'améliorations

Pour les idées d'améliorations, voici ce que vous pourriez faire ! ;)

  • Un petit design : sans CSS, ça ne casse pas trois pattes... :p

  • Un sélecteur de dossiers avec un formulaire : effectivement, ce code ne permet que de lister le contenu du dossier que vous avez indiqué en paramètre à opendir() ; avec une variable $_GET dans l'adresse, vous pourriez faire varier le paramètre de opendir() (sécuriser votre variable, on ne sait jamais ;) ).

  • Ajouter une distinction entre fichiers et dossiers avec la fonction is_dir().

  • Mettre le tout dans une seule fonction. Faire une fonction lire_dossier() qui prend en paramètre le chemin relatif du dossier que vous voulez lire. Cette fonction contiendra le script que vous devrez adapter en conséquence, et en retournera la liste des fichiers.

  • Tout ce que votre esprit créatif vous indique de faire ! Essayez, testez, faites des expérimentations (plus ou moins louches :D ) et voyez ce que ça donne, c'est comme cela qu'on progresse ! ;)

Voilà pour les idées que j'ai, si vous en avez d'autres à proposer, n'hésitez pas ! :)

Bon travail ! ;)

Voilà, ce tutoriel touche à sa fin. J'espère qu'il vous aura rendu service.

Si vous avez des questions ou des suggestions, envoyez moi un Message Privé ou postez un commentaire ! :)

  • #
Waouh !

Très heureux de voir que nos cours vous plaisent, déjà 3 pages lues aujourd'hui ! Vous pouvez continuer la lecture de nos cours en devenant un Roomie, un membre de la communauté d'OpenClassrooms. C'est gratuit !

Vous pourrez aussi suivre votre avancement dans le cours, faire les exercices et discuter avec les autres Roomies.

S'inscrire Se connecter
  • Thématiques du cours : PHP Web

Chaque cours est créé par un professeur ou un expert dans le domaine. Il est composé d'une ou plusieurs parties et peut comporter du texte, des images (schéma, illustration) et des vidéos. Chaque partie d'un cours certifiant est ponctuée d'exercices de 2 types : Des quiz corrigés automatiquement Des devoirs libres (exemple : créer un site web avec des consignes précises). Ces devoirs sont évalués par les pairs. Chaque devoir est corrigé 3 fois par 3 autres élèves, dans un processus en double aveugle, selon un barème fixé par le professeur. La note finale est la moyenne des 3 notes reçues sur le devoir. 50% des devoirs corrigés par les pairs obtiennent quasiment les 3 mêmes notes, avec une variance inférieure à 1. La recherche académique montre d'ailleurs que l'évaluation par les pairs peut être aussi précise que celle des professeurs.

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Lister le contenu d'un dossier avec PHP

Prix sur demande