kann den Code leider nicht testen, wer hat lust ??
Ist dass das was du wolltest ?
Ist dass das was du wolltest ?
PHP-Code:
<?php
/*
VerzeichnisTree von JoelH (c)(p) 2002
für FatalimlokalenNetzwerk
*/
$vaterid = -1; // ist die ID des übergeordeten Verzeichnisses, das Ausgangsverzeichnis hat keins also -1
$aktuell = 0; // ist das Verzeichnis das Aktuell ist
$zaehler = 0; // zaehlt mit wo wir gerade im Array sind
$dir = "/root"; // Die Ausgangsbasis, muss ein Directory sein glaub ich, sonst macht es keinen Sinn.
$tree [$zaehler]["art"] = "d"; // wie gesagt, muss ein Dir sein also können wir das setzen
$tree [$zaehler]["vaterid"] = $vaterid; // Das Ausgangsverzeichnis ist ebene -1
$tree [$zaehler]["name"] = $dir;
$tree [$zaehler]["pfad"] = $dir;
$tree [$zaehler]["tiefe"] = 0; // die Tiefe ist noch Null
$vaterid++; //Wir gehen in die Schleife mit dem Basisverzeichnis, darum muss man jetzt erstmal den Vater neu setzen und zwar auf die 0.
$zaehler++; // und den Arrayzähler noch eins hoch
while ($aktuell < $zaehler) // wenn aktuell >= zaehler wird sind wir durch den Verzeichnisbaum durch und damit am Ende des Programms
{
$inhalt = opendir($tree[$aktuell]["pfad"]); // Schaun wir mal ins aktuell Verzeichnis was dort so alles rumfliegt.
while ($auslesen = readdir($inhalt)) // Ich brauche Input, gib mir was zu lesen
{
if ($auslesen != "." && $auslesen != "..") // Diese Verzeichnisse brauchen wir nicht.
{
if (is_dir($auslesen)) // Hab ich ein Verzeichniss gefunden ? Cool dann schön das d als Art eintragen
{
$tree[$zaehler]["art"] = "d";
$tree[$zaehler]["tiefe"] = $tree[$aktuell]["tiefe"]+1; // Die Verzeichnisstiefe ist eins tiefer als der Vater
$tree[$zaehler]["vaterid"] = $aktuell;
$tree[$zaehler]["name"] = $auslesen;
$tree[$zaehler]["pfad"] = $tree[$aktuell]["pfad"]."/".$auslesen; // Der Pfad ist der Vaterpfad + das neue
}
else // Kein Verzeichniss :( Macht ja nichts, gibts ein f als Art und ich spare Arbeit
{
$tree[$zaehler]["art"] = "f";
$tree[$zaehler]["tiefe"] = $tree[$aktuell]["tiefe"]+1;
$tree[$zaehler]["vaterid"] = $aktuell;
$tree[$zaehler]["name"] = $auslesen;
$tree[$zaehler]["pfad"] = $tree[$aktuell]["pfad"]."/".$auslesen;
}
$zaehler++; // und wieder gehts ein Feld weiter
}
}
closedir($inhalt); // Alles gelesen dann kann man es auch schliesen
$aktuell++; // Das aktuelle Verzeichniss ist nun abgearbeitet mal sehen .....
while ($tree[$aktuell]["art"] <> "d" && $aktuell < $zaehler) // .... ob wir noch ein weiteres Art "d" finden
{
$aktuell++;
}
}
/*
Die Ausgabe muss noch sortiert werden hab da zwei Ideen,
man sollte es am besten rekursiv in die richtige Reihenfolge bringen.
Wer kann das ??
Oder noch eine Idee, anhand der Tiefe und der Vaterid könnte man ein
2D Array machen, und die Tiefe und die VaterID als Koordinaten nehmen,
okay man braucht noch eine Dimension damit man auch mehrer Einträge
auf einer Koordinate hinbekommt. Dann einfach von oben nach unten
von links nach rechts auslesen.
Wer kann das ??
*/
for ($i=0;$i<$zaehler;$i++)
{
echo $tree[$i]["art"].
$tree[$i]["tiefe"].
$tree[$i]["vaterid"].
$tree[$i]["name"].
$tree[$i]["pfad"];
}
?>
Kommentar