Courte et simple fonction récursive pour lecture de répertoires

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 383 fois - Téléchargée 15 fois

Contenu du snippet

Fonction récursive retournant les chemins des différents fichiers présents dans un répertoire et tous ses sous-répertoires dans un tableau en PHP4 (équivalent scandir() en PHP5) avec la possibilité de préciser des exeptions (fichier à ne pas charger dans le tableau).

Utilisation :

$rep = "mon-repertoire/";
$rep=extract_files_paths_dir($rep,0);
print_r($rep);

Source / Exemple :


function extract_files_paths_dir($rep,$exeptions=" ") {//Exeptions regex

global $tab,$z; //vars à transmettre à la fonction elle même
if (!isset($z)) $z=0; //incrémentation
if ($z==0) unset($tab); //effacer tab si c'est la première boucle

$dir = opendir($rep); //ouverture répertoire
while ($f = readdir($dir)) {//A //lecture répertoire

   if((is_file($rep.$f))&&(!eregi($exeptions,$f))) {//B /* Un fichier ? > ajouter + incrémentation*/
   $tab[]=$rep.$f; $z++; 
   } //B

   elseif (is_dir($rep.$f)) { //C  /* Un répertoire ? > Appeler la fonction de manière récursive*/
		        if (!ereg("\.+",$f)) {//D
	 	        extract_files_paths_dir($rep.$f."/");
			    }//D
	}//C
}//A

asort($tab);
return $tab; //retourne le tableau

}

Conclusion :


Le tableau retourné sert comme base à tout traitement sur des fichiers (lecture,écriture,includes...). Si vous voyez comment la simplifier encore (en supprimant la var global $tab par exemple), je suis preneur.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Hi,

sans compter que les fonctions ereg* sont bien moins rapides que leurs équivalentes en preg_*.
C'est vraiment un vieux code...pourquoi le ressortir ?
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
@Orange73 : scandir n'est pas récursive.

Allez, Winwarrior vous a mis sur la piste avec la SPL... Comment faire ça en 3 lignes :

foreach ($iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.')) as $item) {
echo str_repeat("\t", $iterator -> getDepth()), $item -> getFilename(), "\n";
}

Si je peux me permettre, y'a même des sources qui utilisent déjà la SPL pour parcourir des fichiers, et y'en a même qui permettent d'appliquer des filtres pour ne lister que certains fichiers...
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Salut,

while ($f = readdir($dir)) {

Quitte à utiliser cette vieille fonction php3, autant le faire bien :
while (FALSE !($f readdir($dir))) {

Cf la doc : http://fr.php.net/readdir Exemple #1
Messages postés
654
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
10 février 2009
1
Sinon pour faire encore plus court, avec la SPL il y a RecursiveDirectoryIterator
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Il existe simplement scandir(); en PHP5

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.