Hello,
<?php
include("./code/config/config.ini");
include("./code/include/scan_dir.icl");$_dirlist = scan_dir ($original_dir);
foreach ($_dirlist['dir']['name'] as $directory)
{
echo $directory;
echo '<br />';
}
Um das Ganze rekursiv zu machen, musst Du Dir erst einmal überlegen, wie Du die Directories dann zum Schluss speichern willst. Es empfiehlt sich, absolute Pfade einzutragen.
/home/
/home/user1/
/home/user2/
/home/user3/
/home/user1/htdocs/
/home/user1/data/
/home/user1/logs/
/home/user2/htdocs/
/home/user2/data/
/home/user2/logs/
/home/user3/privat/briefe/
/home/user3/htdocs/
usw.
Dazu müsstest DU einen kleinen chirurgischen Eingriff in die Funktion vornehmen:
elseif (is_dir($dir.$res) && $res != '.' && $res != '..')
{
# $_result['dir']['name'][] = $dir.$res;
$_result['dir']['name'][] = realpath($dir.$res);
# $scan = rtrim($dir.$res, '/').'/';
# scan_dir ($scan);
}
http://de2.php.net/manual/en/function.realpath.php
Wenn Du das so machst, kannst Du Dir ein großes Sammelarray aufbauen:
$_superdir = array();
$_dirlist = scan_dir ($start_dir); ## Startdir muss die Dir-Liste des letzten
## Scanlaufs abarbeiten
$_superdir = array_merge($_superdir, scan_dir['dir']['name']);
Wenn Du aber nun überlegst, welche Teile der Scan-Funktion überhaupt rekursiv sein müssten, um den ganzen Diretory-Tree unterhalb eines Startpunktes einsammeln zu können, dann bleibt da erstmal nur der Typ DIR ohne LINK übrig.
Es ist aber einfacher, die Sammelliste nicht wirklich durch die rekursive Funktion zu schleppen, sondern diese Funktion nur die Adresse der Liste mitschleppen zu lassen.
<?php ### get_dirtree.php ###
#---------------------------------------------------------------------------------
// $dir Startverzeichnis, von dem aus der Directorybaum aufgelöst werden soll
// $dirtree Adresse der Directory-Liste, die gefüllt werden soll
// $errors Fehlerzähler, wird jeweils erhöht, wenn ein Directory nicht geöffnet
// werden konnte
// RETURN Fehler
function get_dirtree($dir, &$_dirtree, $errors=0)
{
$dir = rtrim($dir, '/').'/';
if (!$handle = opendir($dir)) return ++$errors;
while (false !== ($res = readdir($handle)))
{
if (is_dir($dir.$res) && $res != '.' && $res != '..' && !is_link($dir.$res))
{
$_dirtree[] = realpath($dir.$res);
$errors = get_dirtree($dir.$res, &$_dirtree, $errors);
}
}
return $errors;
}
#-----------------------------------------------------------------------------------
$_dirtree = array();
$errors = get_dirtree('../../', $_dirtree);
echo "<pre>\r\n";
echo htmlspecialchars(print_r($_dirtree,1));
echo "<p><b>Fehler:</b> $errors</p>\r\n";
echo "</pre>\r\n";
?>
Wenn Du auch die Verzeichnis-Links berücksichtigen willst, musst Du nur vorher prüfen, ob dieser schon in der Liste steht. Wenn ja, darfst Du kein zweites Mal in diese Ebene eintreten.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
