Surcharge de la classe recursivedirectoryiterator pour récupéré une liste de fichiers

Soyez le premier à donner votre avis sur cette source.

Vue 4 050 fois - Téléchargée 112 fois

Description

Ce petit code source et une surcharge de RecursiveDirectoryIterator qui permet d'utiliser une méthode getFile pour récupérer tous les fichiers / dossiers récursivement.

Fonctionnement :
$Dir = new ExtendRecursiveDirectoryIterator("glob://P:/www/*");
$array = $Dir -> getFiles();

Source / Exemple :


class ExtendRecursiveDirectoryIterator extends RecursiveDirectoryIterator
{
  public function getFiles($match = '#.*#i', $onlyDir = false, $recursive = true, $depth = -1)
  {
  //static $Files = array();
  $Files = array();
  foreach($this as $file)
    {
    // Windows' Dir Fix //
    $fileName = str_replace('\\', '/', $file -> getPathName());
    
    if($file -> isDir() && ($depth != 0))
    {
    // Windows' Dir Fix //
    if(preg_match($match, $fileName))$Files[] = $fileName.'/';
    if($recursive)$Files = array_merge($this -> getChildren() -> getFiles($match, $onlyDir, $recursive, $depth), $Files);
    }elseif(!$file -> isDir() && !$onlyDir && preg_match($match, $fileName)){
    $Files[] = $fileName;
    }
    }
return $Files;
}
}

Conclusion :


paramètres :

string $match : recherche avec preg_match
bool $onlyDir : Récupère uniquement les dossiers
bool $recursive : recherche dans les sous dossiers
int $depth : profondeur de la recherche dans les dossiers

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Mince, Astalavista, tu me fais mentir... Dans le dernier commentaire que j'ai fait (il y a quelques minutes) je déplorais que personne n'utilise d'itérateur... (et donc la SPL).
Merci donc de chercher à faire autrement qu'avec ce foutu opendir() et ce maudit readdir()...
Et effectivement, comme le souligne Malalam, pour filtrer, le mieux, c'est encore FilterIterator... Tu vas voir comme on prend son pied avec ça...
Messages postés
65
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
11 avril 2009

Hello,
Non, non faut pas supprimer!
La source ok ... a pas d'interet si on s'arrete dessus.
Mais pour ceux (comme moi) qui cherche à comprendre au maximum comment ça marche et qui liront le 1er commentaire de malalam,
Ca a l'interet de se creuser un peu la tete et voir comment on peut utiliser la SPL, d'abord avec un mauvais exemple, puis avec un bon.

malalam > une fois de plus, on peut te remercier des conseils judicieux que tu apporte sur phpCS, si si j'insiste :)
Messages postés
192
Date d'inscription
lundi 24 décembre 2001
Statut
Membre
Dernière intervention
3 février 2010

Merci de ton aide :) XD
Bon, je croit que tu va pouvoir supprimer ma source dans ce cas :)
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,

l'idée est bonne...mais je pense que tu n'as pas vraiment compris le fonctionnement de cette classe et de la SPL.
Compare le fonctionnement de ton code, et de ce code (sans frioriture aucune) :
<?php
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.')) as $it) {
echo $it."\n";
}
?>
Après, tu peux jouer sur FilterIterator en plus pour faire des filtres. Et là, tu auras pleinement utilisé la puissance de la SPL :-)
Parce qu'avec ton code, tu ne l'utilises qu'à moitié.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.