Lister le contenu d’un répertoire avec PHP

Php permet de lister le contenu de répertoires, ce qui peut être utile : création de galerie image à la volée, par exemple, ou comme dans le script ci dessous, lister les pages html et en faire un navigateur automatique.

Précédent | 9/14 | Suivant

Lister le contenu brut

On va commencer par lister comme des brutes ce qu’il y a dans le dossier pointé. Ici on pointe sur le répertoire courant, celui où est placé notre fichier.
Voir la définition de opendir sur php.net

<?php
$dir = "./";
//  si le dossier pointe existe
if (is_dir($dir)) {

   // si il contient quelque chose
   if ($dh = opendir($dir)) {

       // boucler tant que quelque chose est trouve
       while (($file = readdir($dh)) !== false) {

           // affiche le nom et le type
           echo "fichier : $file : type : " . filetype($dir . $file) . "<br />\n";
       }
       // on ferme la connection
       closedir($dh);
   }
}
?>

C’est brut de brut car les deux premiers items de la liste sont "." et ".." qui sont des éléments du serveurs, pas censés être vus.

On peut affiner un peu pour les masquer :

<?php
$dir = "./";
//  si le dossier pointe existe
if (is_dir($dir)) {

   // si il contient quelque chose
   if ($dh = opendir($dir)) {

       // boucler tant que quelque chose est trouve
       while (($file = readdir($dh)) !== false) {

           // affiche le nom et le type si ce n'est pas un element du systeme
           if( $file != '.' && $file != '..') {
           echo "fichier : $file : type : " . filetype($dir . $file) . "<br />\n";
           }
       }
       // on ferme la connection
       closedir($dh);
   }
}
?>

Voilà. On peut affiner le script pour n’afficher que les dossier ou n’afficher que les fichiers, en testant le type. On peut aussi afficher les dossiers puis les fichiers, on peut aussi faire des liens sur les noms de fichiers pour les ouvrir, bref on peut faire beaucoup de chose.

Pour pouvoir afficher uniquement les images, on placera par exemple en plus du test sur les elements système :

if( $file != '.' && $file != '..' && preg_match('#\.(jpe?g|gif|png)$#i', $file)) {

C’est une expression régulière qui vérifie que le fichier se termine par une des extensions d’image web : jpeg, jpg, gif ou png. Les expressions régulières sont un outil puissant mais parfois difficile à manipuler. Les coder, ou faire des recherches sur le net pour trouver la bonne est parfois casse-tête. Mais quand ça marche, c’est puissant.
On peut donc faire la même chose pour sélectionner d’autres types de fichiers.