Table des matières
Niveau
..........
En rapport...

Lister les fichiers et/ou les répertoires de manière récursive (ou non)

Vous connaissez surement déjà la fonction glob de php qui sert lister les fichiers (ou les répertoires) qui correspondent à un masque.
Mais glob n'est pas récursive.
Voici donc une petite classe qui va vous permettre de faire la même chose (et même un peu plus) de façon récursive.

Classe

php
<?php
class files {
 
	function getFiles($path,$filterExt=array("")) {
		$ret=array();
		foreach ($filterExt as $Ext)
			$ret=array_merge($ret,(array) self::_getFiles($path,$Ext,false,"ONLYFILES"));
		return $ret;
	}
	function getFilesRecursive($path,$filterExt=array("")) {
		$ret=array();
		foreach ($filterExt as $Ext)
			$ret=array_merge($ret,(array) self::_getFiles($path,$Ext,true,"ONLYFILES"));
		return $ret;
	}
	function getFolders($path) {
		return self::_getFiles($path,"",false,"ONLYDIRS");
	}
	function getFoldersRecursive($path,$filterExt=array("*")) {
		return self::_getFiles($path,"",true,"ONLYDIRS");
	}
 
	private function _getFiles($path,$filterExt,$recursif,$what) {
		if ($what == "ONLYDIRS")
			$files = glob($path."*",GLOB_ONLYDIR);
		else
			$files = glob($path."*");
		if (count($files)==0) return array();
		$filesList=array();
		foreach($files as $file) {
			if (is_file($file) && ($filterExt == substr($file,-strlen($filterExt))))
				$filesList[]=$file;
			elseif ($what == "ONLYDIRS")
				$filesList[]=$file;
			if ($recursif)
				$filesList = array_merge ($filesList,(array) self::_getFiles($file."/",$filterExt,$recursif,$what) );
 
		}
		return $filesList;
	}
 
}
?>
Cette classe est conçut pour php5. Si vous désirez la faire fonctionner avec php4 vous devez :

  1. remplacer les “self::” par des “$this→”
  2. supprimer le mot clef “private” dans “private function”

Comment l'utiliser

Cas 1 : liste des fichiers d'un dossier choisi

php
files::getFiles("/mon/dossier/");

Vous pouvez filtrer les résultats en passant un tableau en 2eme paramètre :

php
$ext=array(".jpg",".png");
files::getFiles("/mon/dossier/",$ext);

Cas 2 : liste des fichiers d'un dossier choisi et de ses sous-dossiers

php
files::getFilesRecursive("/mon/dossier/");

Vous pouvez filtrer les résultats en passant un tableau en 2eme paramètre :

php
$ext=array(".jpg",".png");
files::getFilesRecursive("/mon/dossier/",$ext);

Cas 3 : liste des dossiers contenus dans un dossier choisi

php
files::getFolders("/mon/dossier/");

Cas 4 : liste des dossiers contenus dans un dossier choisi et de ses sous-dossiers

php
files::getFoldersRecursive("/mon/dossier/");


22/05/2007 11:53 -

iDo –