<?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;
}
}
?>