Exploration récursive de répertoires

Voici donc un code PHP permettant de parcourir une arborescence de dossiers et fichiers en une seule fois, d’où son nom « Exploration récursive de répertoires »
Le code en lui-même n’a rien d’exceptionnel, il existe déjà depuis bien des années.
Je voulais juste (pour ceux qui ne connaissent pas cette fonction) mettre en lumière la fonction « scandir » de PHP.

Cette fonction liste l’intégralité du répertoire qui lui est passé en paramètre.
Elle a d’autres atouts comme la possibilité de scanner un répertoire sur un serveur distant en utilisant un protocole ftp ou même ftps.


Scandir dans toute sa splendeur:

array scandir ( string $directory [, int $sorting_order [, resource $context]] )

directory
Le dossier qui sera scanné.
sorting_order
Par défaut, le tri est en ordre alphabétique. Si le paramètre optionnel sorting_order est utilisé (mis à 1), alors le tri sera en ordre alphabétique inverse.
context
Pour une description du paramètre context, référez-vous à ce lien : http://fr2.php.net/manual/fr/ref.stream.php
(information issue de la doc de php)

Pour en savoir plus sur cette fonction je vous recommande ce lien: http://fr2.php.net/manual/fr/function.scandir.php

Pour ce bout de code on utilisera aussi cette fonction « realpath » qui a pour tâche de nous retourner le chemin canonique du chemin passé en paramètre.
Pour en savoir plus sur cette fonction c’est par là : http://fr2.php.net/manual/fr/function.realpath.php.

Donc voici le code, qui va aller chercher les dossiers et fichiers de manière récursive, c’est à dire qu’il va scanner l’intégralité du répertoire que vous lui passez en paramètre.

Trêve de bavardage le voici !

$arborescence  = scanRecursif($baseDir);

echo $arborescence;

function scanRecursif($rep, $depth=0) {
	$depth++; // définit la profondeur du dossier et des fichier

	$spaceDepth = makeSpace($depth); // va créer une chaîne composée de ce qui va permettre une légère indentation

	$dir = scandir($rep);

	if($dir) {
		// on traite chaque élément retourné par la fonction php scandir
		foreach($dir as $f) {
			// on vérifit la présence de sous répertoires, par contre on ne prend pas en compte les répertoires précédents "./" et  "../"
			if( is_dir($rep.$f) && $f!=".." && $f!="." ) {
				$fileList.= $spaceDepth.'< span style="color:red; font-weight:bold;" >'.$f.'< /span >< br / >'."
";
				$new_dir=realpath($rep.$f); //chemin absolu du répertoire enfant
				// On réitère la fonction pour aller scanner les sous répertoires.
				$fileList .= scanRecursif("$new_dir/",$depth);
			}

			// ce traitement est effectué si la variable $f est un fichier
			if(is_file($rep.$f)) {
				$fileList .= $spaceDepth.'  < span >|_'.$f.'< /span >< br / >'."
";
			}
		}
	}

	return $fileList;
}

//fonction retournant une suite d'espaces pour légèrement indenter le code de sortie
function makeSpace($depth) {
	$out = '';
	for($x=0; $x<=$depth; $x++) {
		$out .= "  ";
	}
	return $out;
}
Tagués avec : ,
Publié dans PHP

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*