Publié le 17/06/2011
Auteur James
Réseaux sociaux
0 partages
0 tweets
0 plus
2 commentaires

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

Utiliser la fonction scandir

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

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.
avatar pidjey

Publié par pidjey

le 21/11/2013 à 19:32:59

J'ai bien lu mais c'est vraiment trop fort et trop dur pour le moment, je sais pas vraiment comprendre vos syntaxes, elles sont enormes et moi, je ne suis qu'encore un debutant en PHP et il faudrait peut etre expliquer explicitement certaines syntaxes pour une tres bonne comprehension.
Mais alors, je voudrais juste savoir s'il n'y avait pas une autre methode plus simple que celle propose... Merci

avatar Fobec

Publié par Fobec

le 21/11/2013 à 19:36:12

Bonjour,
vous pouvez poster un message sur le forum, la communaut vous donnera un coup de main pour la mise en place du script.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - class
Mise a jour
17/06/2011
Visualisation
vu 5387 fois
Public
Internaute
Auteur de la publication
James
Membre junior
Auteur de 6 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Berenger dans java

Bonjour Mr Foebec je suis vraiment très content de cette réponse vous êtes simplement génial. quand je pense au nombre de jour que ça m'a pris et le temps que j'ai pe...

Publié par sakhr dans tuto

merci b c pour les plusieurs tailles d'images

Publié par Pierrot dans CMS

Je présume que c'est plutot application.terminate;, le clavier à fourcher, ça m'arrive souvent.
@+

Publié par Fobec dans php5

Merci Souti d'avoir signale la balise manquante,
le code est corrige dans l'exemple.

Publié par agence cms open source dans tuto

Vu la multitude des outils de gestion de contenu Open Source, sélectionner l'un d'entre eux exige de réaliser une comparaison fine. Les lecteurs défendent les raisons de leurs cho...