PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ordner-Baumstruktur per PHP auslesen


Blade II
2007-06-09, 22:51:17
Hey ho

Ich würde gerne die Ordnerstruktur eines bestimmten Ordnerns inkl. Unterordner auslesen:


[ROOT]
+ Folder 1
+ Folder 2
+ Folder 3
| + ---- SubFolder 1
| + ---- SubFolder 2
| | -- + ---- SubSubFolder 1
| + ---- SubFolder 3
+ Folder 4


Wie realisiere ich das in PHP?
Muss ich eine eigene function schreiben, die sich dann selbst wieder aufruft? ... Wenn ja, wie mach ich sowas? :D

Hier ist ein Teil eines momentanen Auslese-Scripts, welches ich für diesen Zweck umschreiben wollte:

<?php

$dir = (empty($_GET['dir'])) ? "images/" : $_GET['dir'] . "/";

$handle = opendir($dir);

$extensions = array("jpg", "jpeg", "gif", "png");
$blacklist = array(".", "..");

while(false !== ($file = readdir($handle))) {

if (is_dir($dir.$file) and !in_array($file, $blacklist)) {
$dirs[] = $dir.$file;
chdir($file);
}

else {
$file_info = pathinfo($file);
if (in_array($file_info['extension'], $extensions)) $images[] = $dir.$file;
}
}

echo "<p><a href=\"./\">&laquo; zur&uuml;ck</a></p>\n";
if (!empty($dirs)) foreach($dirs as $dir) echo "<a href=\"" . getenv('PHP_SELF') . "?dir=" . $dir . "\">" . substr($dir, (strrpos($dir, "/") + 1), strlen($dir)) . "</a><br />\n";
if (!empty($images)) foreach ($images as $image) echo "<img src=\"".$image."\" /><br />\n";

closedir($handle);

?>

Nase
2007-06-09, 22:54:55
Na, in dem du einfach deine Verzeichnisstruktur durchläufst. Rekursion ist hier das Zauberwort. Ruf einfach deine Funktion erneut auf, wenn du zu einem Verzeichnis kommst, das noch weitere Unterverzeichnisse aufweist.

Kinman
2007-06-28, 20:50:42
function getAllFilesFromDir($path, $dirs = null, $files = null, $firststart = null)
{
//Add a / at the end of the path if it doesn't exist
if (substr($path, strlen($path)-1, 1) != "/") $path .= "/";

//Initialize the arrays if they don't exist
if ($dirs == null) $dirs = array();
if ($files == null) $files = array();

//Open directory
$dirhwnd = opendir($path);

//Read directory
while (($file = readdir($dirhwnd)))
{
//Check if file isn't . or ..
if ($file != "." && $file != "..")
{
//Check if file is a directory
if (is_dir($path . $file))
{
//Add the directory
array_push($dirs, $path . $file);

//Execute the function for the subdictory
$retVal = getAllFilesFromDir($path . $file, $dirs, $files, 1);

//Read from return value
$dirs = $retVal[0];
$files = $retVal[1];
}

//Check if file is a file
if (is_file($path . $file))
{
//add the file to the array
array_push($files, $path . $file);
}
}
}
}

//Close directory
closedir($dirhwnd);

//Generate return value
$retVal = null;
$retVal[0] = $dirs;
$retVal[1] = $files;

return $retVal;
}