mardi 17 mars 2009

Lister les fichiers d'un répertoire en PHP

Dans les beaux jours de PHP 4, si on voulait parcourir et lister le contenu d'un répertoire, on devait s'y prendre comme ceci :
$directory = '/path/to/files';

if ($handle = opendir( $directory )) {
while ($file = readdir($handle)) {
if ($file != '.' && $file != '..') {
echo $file;
}
}
closedir($handle);
}
On peut encore utiliser cette bonne vieille méthode, mais PHP 5 a introduit dans son SPL la classe DirectoryIterator qui est beaucoup plus facile à comprendre. Voici le même bout de code traduit à la façon PHP 5.
$iter = new DirectoryIterator( $directory );
foreach($iter as $file ) {
if ( !$file->isDot() ) {
echo $file->getFilename();
}
}
L'objet $file possède plusieurs méthodes pour nous simplifier la vie, comme par exemple getPath, getPathName, getSize, isDir, isFile, isDot, isExecutable, isReadable et isWritable.

En revanche, si le répertoire contient d'autres dossiers à parcourir, il suffit d'utiliser la classe RecursiveDirectoryIterator.
$iter = new RecursiveDirectoryIterator( $directory );
foreach (new RecursiveIteratorIterator($iter) as $file) {
echo $file->getPath() . ' [' . $file->getFilename() . ']';
}
Dans les deux derniers cas, on peut parcourir la liste à l'aide d'un foreach puisque les deux classes implémentent l'interface Iterator, un pattern populaire.

1 commentaire:

  1. Bonjour,

    pour sa présentation finale et ses possibilité de personnalisation, jusqu'à présent j'utilisais ceci :
    http://cyberzoide.developpez.com/php4/file/

    je viens de passé au dernier php et ça merdoie un peu.

    je n'entrave rien à l'objet.

    je suis certain que nous serons nombreux à féliciter et remercier celui qui voudrait bien reprendre le tuto ci dessus et le mettre à jour ?

    RépondreEffacer