Lister le contenu d'un dossier

Depuis PHP 5, extraire le nom des fichiers d'un répertoire est simplifier avec la fonction scandir(). L'autre méthode consiste à ouvrir un répertoire avec opendir() puis de lister les fichiers du répertoire à l'aide de readdir().

Voyons comment utiliser la fonction scandir(). La class ScanFolder propose plusieurs fonctions pour filtrer le noms des fichiers:
displaySystemFiles(): afficher les fichiers système. Par défaut, ces fichiers sont masqués,
setExtensionFilter(): appliquer un filtre d'extension sur le contenu d'un répertoire,
setExtra(): identifier le type de ressource (fichier, dossier, système, inconnu).

<?php
/**
 * Lister le contenu d'un dossier
 * auteur James 16/06/2011
 * publié sur www.fobec.com
 */
class ScanFolder {
    //boolean: ajouter les fichier système
    private $add_systemfiles=false;
    //Array: liste des fichiers systeme
    private $systemfiles = array("."".."".htaccess"".htpasswd");
    //array: déclaration variable extension
    private $extensions=array();
    //boolean: liste étendue des fichier
    private $add_extra=false;

    public function listfiles($folder) {
        $out=array();
        //répertoire incorrecte
        if(is_dir($folder) === false) {
            throw new Exception("Invalid path ".$folder);
        }
        //lister les fichiers
        $files = scandir($folder);
        foreach($files as $file) {
            if ($this->isValidFile($file)) {
                if ($this->add_extra==true) {
                    $f=array('file'=>$file,
                            'type'=>$this->fileType($file, $folder),
                            'folder'=>$folder);
                    $out[]=$f;
                } else {
                    $out[]=$file;
                }
            }
        }

        return $out;
    }
    /**
     * setter: fixer la propriété fichier systeme
     * @param boolean $add afficher les fichiers
     */
    public function displaySystemFiles($add) {
        $this->add_systemfiles=$add;
    }

    /**
     * setter: fixer une filtre d'extension
     * @param array $exts
     */
    public function setExtensionFilter(array $exts) {
        $this->extensions=$exts;
    }
    /**
     * setter: fixer la propriété liste etendue des fichiers
     * @param boolean $add
     */
    public function setExtra($add) {
        $this->add_extra=$add;
    }

    /**
     * Déterminer le type d'un fichier
     * @param string $file
     * @return string  'system','file','dir' ou 'undefined'
     */
    private function fileType($file, $path) {
        if (in_array($file, $this->systemfiles)) {
            return 'system';
        } else if (is_file($path.'/'.$file) && is_readable($path.'/'.$file)) {
            return 'file';
        } else if (is_dir($path.'/'.$file) && is_readable($path.'/'.$file)) {
            return 'dir';
        } else {
            return 'undefined';
        }
    }
    /**
     * Déterminer si le fichier peut etre ajouté à la liste
     * @param string $file
     * @return boolean
     */
    private function isValidFile($file) {
        /**
         * Filtre fichier systeme
         */
        if ($this->add_systemfiles==false && in_array($file, $this->systemfiles)) {
            return false;
        }

        /**
         * Filtre extension de fichier
         */
        if (count($this->extensions)>0) {
            $ext=strtolower(pathinfo($file, PATHINFO_EXTENSION));
            if (!in_array($ext, $this->extensions)) {
                return false;
            }
        }

        return true;
    }
}
?>

Comment lister le contenu d'un répertoire
Les fonctions suivantes permettent de lister tout type de contenu d'un dossier, à savoir répondre à la question:
'quelles sont les ressources à la racine d'un site web ?'
<?php
$scanFolder=new ScanFolder();
$scanFolder->displaySystemFiles(true);
$scanFolder->setExtra(true);
$files=$scanFolder->listfiles($_SERVER['DOCUMENT_ROOT']).
print_r($files);
?>

Exemple de contenu d'un dossier
Array
(
    [0] => Array
        (
            [file] => .
            [type] => system
            [folder] => /www
        )

    [1] => Array
        (
            [file] => ..
            [type] => system
            [folder] => /www
        )

    [2] => Array
        (
            [file] => .htaccess
            [type] => system
            [folder] => /www
        )

    [3] => Array
        (
            [file] => images
            [type] => dir
            [folder] => /www
        )

    [4] => Array
        (
            [file] => index.php
            [type] => file
            [folder] => /www
        )   
)

Comment trouver les images d'un dossier
Lorsque l'on utilise des thumbnails ou des galeries d'images, il n'est pas nécessaire de lister tous les fichiers, seules les images nous intéressent en fait. Voici comment appliquer un filtre sur la liste des fichiers d'un répertoire.
<?php
$scanFolder=new ScanFolder();
$scanFolder->setExtensionFilter(array('jpg''gif''png'));
$files=$scanFolder->listfiles($_SERVER['DOCUMENT_ROOT']);
print_r($files);
?>

Exemple d'une liste d'images contenu dans un dossier
Array
(
    [0] => 123.jpg
    [1] => logo.png
    [2] => face.gif
)
Ajouter un commentaire
Pseudo
Adresse email
Site internet (optionnel)
Votre commentaire
Fiche de l'article
Mise a jour17/06/2011
VisualisationVu 327 fois
PublicInternaute
CategorieWeb - PHP - Outils
Auteur de l'article
James James
connecté le 15/07/2011
29 ans - Region parisienne
2 articles dans la section
Contacter l'auteur
Partager l'article