Version en ligne

Tutoriel : Lister le contenu d'un dossier avec PHP

Table des matières

Lister le contenu d'un dossier avec PHP
Comment allons-nous faire ?
Listage des fichiers
Idées d'améliorations

Lister le contenu d'un dossier avec PHP

Comment allons-nous faire ?

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 ?

Listage des fichiers

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 :

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

Listage des fichiers

Comment allons-nous faire ? Idées d'améliorations

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... ».

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 !


Comment allons-nous faire ? Idées d'améliorations

Idées d'améliorations

Listage des fichiers

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

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 ! :)


Listage des fichiers