PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verzeichnisse auflisten wie bei Windows explorer



robiotor
05-05-2004, 18:00
ich möchte alle Verzeichnisse, Unterverzeichnisse, und alle weitere Unterverzeichnisse auflisten genau so wie bei Windows explorer, also nur die Verzeichnisse keine dateien. kann mir da mal einer helfen.

was ich bis jetzt gemacht habe, vieleicht ist das auch der verkehrte weg.



$verz=opendir (getcwd());
while ($file = readdir ($verz)){
if(is_dir($file)){
echo "$file <br>";
}
}
closedir($verz);


das zeigt mir aber nur die verzeichnisse in das angegebene $verz

undefined
05-05-2004, 18:31
das ist jetzt aber eine ganz andere Frage wie beim letzten mal aber Ok hier ein Beipeiel ;) Siehe PHP Manual Funktionen des Dateisystems!
[EDIT]
Korrigiere mich, war wohl etwas zu schnell mit dem Posten. ;)
Den Momentanen Handle am besten in eine Datei oder Session speichern.
Jedoch nach wie vor aber PHP5 Code

<?php
ini_set("max_execution_time", 10);

function getdir($dir)
{
if(!isset($buffer))
$buffer = array();

if (is_dir($dir)) {
$dirs = scandir($dir, 0);
if (is_array($dirs)) {
foreach($dirs AS $di ) {
if(is_dir($di) && is_readable($di) && !preg_match("/^\.$/", $di) )
$buffer[] = $di;
}
}
clearstatcache ();
}
return $buffer;
}

echo "<pre>";
$home = getcwd();
print_r(getdir($home));
echo "</pre>";
?>

undefined
05-05-2004, 18:37
Habe ich vergessen zu schreiben geht nur mit PHP5 bei niedrigeren Version empfehle ich PHPlib von Kristian Köhnetopp http://kris.koehntopp.de/

robiotor
06-05-2004, 04:57
hmm muss ich mal schauen, ich habe noch 4.x

mehlvogel
07-05-2004, 07:42
Ansonsten macht man sich einfach ne rekursive Funktion, das nun wirklich kein Beinbruch. Einfach für alle Verzeichnisse (außer "." und ".." sonst gibs unendliche Schleifen ;)) die Funktion neu aufrufen. Also, du machst eine Funktion die alle Verzeichniss in einem Verzeichniss auflistet, die als Parameter das Verzeichniss kreigt. In dieser Funktion ruft du dich für jedes Verzeichnis wieder selber auf.

Dafür irgendne Lib oder PHP5 zu installieren ist _stark_ oversized ;)

robiotor
09-05-2004, 13:31
so habe ich das gemacht jedoch habe ich jetzt ein problem



$dir1 = '/var/www/test.de';
$DirectoriesToScan = array(realpath('/var/www/test.de/'));
$DirectoriesScanned = array();

while (count($DirectoriesToScan) > 0) {
foreach ($DirectoriesToScan as $DirectoryKey => $startingdir) {
if ($dir = @opendir($startingdir)) {
while (($file = readdir($dir)) !== false) {
if (($file != '.') && ($file != '..')) {
$RealPathName = realpath($startingdir.'/'.$file);
if (is_dir($RealPathName)) {
if (!in_array($RealPathName, $DirectoriesScanned) && !in_array($RealPathName, $DirectoriesToScan)) {
$DirectoriesToScan[] = $RealPathName;
$DirList[] = $RealPathName;
}
}
}
}
closedir($dir);
}
$DirectoriesScanned[] = $startingdir;
unset($DirectoriesToScan[$DirectoryKey]);
}
}


if(isset($DirList)){
$DirList = array_unique($DirList);
asort($DirList);
}



echo '<select name="verzeichniss">';
echo '<option>'.$dir1.'</option>';
foreach ($DirList as $dirname) {
echo '<option>'.$dirname.'</option>';
}
echo '</select>';


und zwar das script funktioniert nur wenn das script auch in /var/www/test.de liegt. liegt aber das script in /var/www/test2.de dann geht es nicht.

ich glaube ich muss sudo anwenden oder wie wird das gemacht.

robiotor
09-05-2004, 16:55
so ich habe mein fehler, es liegt an der

php_admin_value open_basedir /var/www/test.de

wie kann ich das ändern, das open_basedir will ich eigentlich nicht wegnehmen.

undefined
09-05-2004, 18:34
Habe es jetzt nur kurz überflogen. Verwende am besten die __FILE__ Konstante.

echo str_replace(basename(__FILE__), "", realpath(__FILE__));
Bei Basedir kannst du .htaccess nehmen an sonsten dürfte es wenig bringen weil es von den Provider Einstellungen des Servers abhängt. Basedir verändern darf nur Root.