Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zér0 > Les tutoriels > Non-Officiels > Site Web > PHP > Points particuliers > Lecture du tutoriel

Lister le contenu d'un dossier avec PHP

Avatar
Auteur : LkY
Créé : le 10/04/2008 21:41:39
Modifié : le 15/05/2008 10:30:59
Noter et commenter ce tutoriel
Imprimer ce tutoriel
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
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.
Sommaire du chapitre :

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 2 fonctions que vous ne connaissez peut-être pas.
Ce sont opendir() et readdir().

Si vous avez ne serait-ce que quelques bases d'anglais, open signifie ouvrir, et read 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

Nous voilà dans la partie pratique de ce tutoriel.
Nous allons, au terme de ce chapitre, avoir 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.

Code : PHP
1
2
3
4
<?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. ;)

Code : PHP
1
2
3
4
<?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 va planter !
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éer une variable $dossier qui contient le résultat de l'ouverture. C'est cette variable qui va être lue avec readdir().

Code : PHP
1
2
3
4
<?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.

Code : PHP
1
2
3
4
<?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 apparaitre un index.php en plein milieu de notre liste... :(
Pour cette raison, nous faisons 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 mesure dans notre condition de ne pas les afficher.


Maintenant, on affiche les résultats !!

Code : PHP
1
2
3
4
5
6
7
<?php
$nb_fichier++; //On incrémente le compteur de un
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 fait une nouvelle entrée à 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 dans le cas où le dossier n'a 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 ! ;)

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?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 ! ;)



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 ! :)
Auteur : LkY
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 358 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.0399s (0.0268s)