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 5408 fois
Public
Internaute
Auteur de la publication
James
Membre junior
Auteur de 6 articles
|BIO_PSEUDO|
Commentaires récents

Publié par RIJAPOTAK dans CMS

PILOTAGE SCANNER (TWAIN-WIA), IPTC, EXIF, METADATA, ICC PROFILES, D&Atilde;&copy;veloppement des logiciels, Traitement d'image, Traitement en Batch d'image et Pdf

Publié par Quentin dans tuto

Merci pour ces petits codes java script qui me sont d'un grand secours pour mon TP :)

Publié par taoufik dans CMS

merci cest un bon logiciel

Publié par Mosard dans java

Bonsoir je voulais inclure un fichier txt dans mon programme cependant j'avais pas vraiment d'idee,mais j 'ai deja une idee je vais essayer. Merci beaucoup

Publié par amelia dans java

pour 30 sa donne 1346269