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

), nous allons faire un compteur qui va compter le nombre de fichiers contenus dans votre dossier.
Vous savez tout !
Nous pouvons passer à la pratique !!
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 : PHP1
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 : PHP1
2
3
4 | <?php
if($dossier = opendir('./mondossier')
{
?>
|
Pourquoi avoir ouvert un
if ?
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 : PHP1
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 : PHP1
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 : PHP1
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 !