Bonjour,
Ci-dessous, un exemple de programmation récursive.
Ci-dessous, un exemple de programmation récursive.
////////////////////////////////////////////////////////////////
//enregistrement de l'aborescence des dossiers à partir de la directory 'www'
//dans un tableau:
// appel de la fonction EnumFolders() qui retourne un tableau décrivant les 'path' des dossiers
// appel de la fonction AffichFolders qui affiche le tableau des dossiers
//note: l'enregistrement de l'arborescence permet de tracer un graphe, de déterminer le 'path'
// pour atteindre un dossier à partir d'un autre dossier.
///////////////////////////////////////////////////////////////
function AffichFolders($ArrayFolders,$Pos = 0)
{
for ($Space = '', $i = 1; $Pos > 0 && $i <= $Pos; $i++)
$Space .= " ";
foreach ($ArrayFolders as $Key=>$Value)
{ $Head = '['.$Key.'] = ';
if (is_array($Value) && !empty($Value))
{ if (is_array($Value[0]))
AffichFolders($Value[0],strlen($Head) + $Pos);
else
echo $Space.$Head.$Value[0].'<br>';
AffichFolders($Value[1],strlen($Head) + $Pos);
}
else
echo $Space.$Head.$Value.'<br>';
}
}
////////////////////////////////////////////////////////////////////////////////
function EnumFolders($Node)
{ $ArrayFolders = array();
$Count = 0;
if ($Dir = opendir($Node)) //open Ditectory
{ while($File = readdir($Dir)) //open Directory
{ $Nodebase = basename($File);
if ($Nodebase=="." || $Nodebase=="..")
continue;
// La fonction is_dir() renvoit toujours faux si le handle acquit avec opendir()
// n'est pas à partir du dossier courrant(getcwd) ;
// l'exception s'applique à « . » et « .. ».
$NewNode = $Node.'/'.$File;
if(is_dir($NewNode))
$ArrayFolders[$Count] = array($File,EnumFolders($NewNode));
else
$ArrayFolders[$Count] = $File;
$Count++;
}
}
closedir($Dir);
return $ArrayFolders;
}
/////////////////////////////////////////////////////////////////
$DirRoot = dirname($_SERVER['PHP_SELF']);
$Pos = strpos($DirRoot,'www');
if ($Pos === FALSE)
$Dirwww = ($Pos === FALSE)? '.' : $Dirwww = substr($DirRoot,0,$Pos + 3);
echo "<br> Directory: '".$Dirwww."'<br>";
$ArrayFolders = EnumFolders($Dirwww);
AffichFolders($ArrayFolders);
?>