arthur-eudeline
2/19/2018 - 4:40 PM

Scan de dossier récursif

Scanne de manière récursive les dossiers et leur contenu. Retourne un tableau contenant l'arboresence de dossiers, les clés du tableau étant le nom du fichier/dossier et la valeur étant leur emplacement précis.

<?php
/**
* Scanne de manière récursive les dossiers et leur contenu.
*
* @param  string $dir_path Le chemin d'un dossier
* @param  array  $wanted_extensions Un tableau contenant les extensions de fichier recherchées sans leurs points.
*
* @return array          Tableau contenant l'arboresence de dossiers (les clés sont les noms, les valeurs sont les urls) ou NULL si le dossier est vide
*/
function scan_directory( string $dir_path, array $wanted_extensions = array() ){

	$dir_path = str_replace("//", "/", $dir_path);

	$root_folder_content = scandir($dir_path);
	//enleve le "." et le ".."
	$root_folder_content = array_splice( $root_folder_content, 2 );

	//Si le dossier est vide
	if(count($root_folder_content)===0){
		return NULL;
	} else {

		for ($i=0; $i < count($root_folder_content); $i++) {

			//Si c'est un dossier
			if( is_dir($dir_path."/".$root_folder_content[$i]) === true ){
				$ouput_array[ basename($root_folder_content[$i]) ] = scan_directory( $dir_path."/".$root_folder_content[$i], $wanted_extensions );
				//Si le dossier est vide, on ne le stoque pas dans le tableau
				if(is_null($ouput_array[ basename($root_folder_content[$i]) ])){
					unset( $ouput_array[ basename($root_folder_content[$i]) ] );
				}
			}
			//Si ce n'est pas un dossier
			else {
				//Si on a rentré des extensions à chercher
				if(count($wanted_extensions) > 0){
					$extension = explode(".", basename($root_folder_content[$i]));
					$extension = end($extension);
					//Si c'est l'extension que l'on cherche
					if(in_array($extension, $wanted_extensions)){
						$ouput_array[ basename($root_folder_content[$i]) ] = $dir_path."/".$root_folder_content[$i];
					}
				} else {
					$ouput_array[ basename($root_folder_content[$i]) ] = $dir_path."/".$root_folder_content[$i];
				}
			}
		}
		return $ouput_array;
	}
}
?>