Verzeichnisse und Unterverzeichnisse auslesen
Silja Habenicht
- php
0 Sönke Tesch0 Silja0 Sönke Tesch0 Silja
Hi! Ich bin auf der Suche nach einem funktionsfähigem Skript, das Verzeichnisse in der Art des Explorers auslesen kann:
Die Startseite listet alle übergeordneten Verzeichnisse als Links auf, die, wenn sie angeklickt werden, zu den untergeordneten Verzeichnissen führt (eben wie beim Explorer: klickt man auf C: erscheinen die jeweiligen Unterordner z.B. WINDOWS); mit rekursivem Programmieren hab ich es schon versucht, jedoch werden dann ja alle Verzeichnisse mit ihren Unterverzeichnissen und Dateien auf einmal aufgelistet...
Für eine schnelle Antwort wäre ich wirklich dankbar, denn ich befinde mich gerade im Projekt und muß u.a. diese Aufgabe lösen.
Mit Dank im voraus und tschüß, Silja
Hi! Ich bin auf der Suche nach einem funktionsfähigem Skript, das Verzeichnisse in der Art des Explorers auslesen kann:
Die Startseite listet alle übergeordneten Verzeichnisse als Links auf, die, wenn sie angeklickt werden, zu den untergeordneten Verzeichnissen führt (eben wie beim Explorer: klickt man auf C: erscheinen die jeweiligen Unterordner z.B. WINDOWS); mit rekursivem Programmieren hab ich es schon versucht, jedoch werden dann ja alle Verzeichnisse mit ihren Unterverzeichnissen und Dateien auf einmal aufgelistet...
Aus Deiner Beschreibung heraus würde ich jetzt sagen, daß Du einfach die Rekursion rausnehmen solltest, also einfach alle Objekte auflisten und die Verzeichnisse als Verweise auf "liste.php?verzeichnis=blabla" einrichten. Wird liste.php dementsprechend mit dem Argument verzeichnis aufgerufen, listet es statt des Startverzeichnisses halt das angegebene auf.
Weil Du das aber ja anscheinend schon gemacht hast und mit der Rekursion nur über's Ziel hinausgeschossen bist, habe ich irgendwie das Gefühl, daß Du da selber drauf gekommen wärst/bist und insofern eine detailierte Erklärung nötig wäre :)
Nebenbei: Vielleicht tut's ja auch die sehr konfigurierbare Standard-Verzeichnisliste des Servers, beim Apache einzuschalten mit "options +indexes" in der jeweiligen .htaccess (siehe auch http://httpd.apache.org/docs/mod/mod_autoindex.html).
Gruß,
soenk.e
[...]Wird liste.php dementsprechend mit dem Argument verzeichnis aufgerufen, listet es statt des Startverzeichnisses halt das angegebene auf.
Genau das habe ich auch probiert, mit und ohne Rekursion..ich schicke Dir einfach mal den Quelltext, vielleicht ist es ja nur ein kleiner Fehler... :-)
$dir= "/data/01Jobs/fff/_aktuell/pro/dokumente/" . $folderName;
echo " dir: " . $dir . "<br>";
$handle=opendir($dir);
echo "handle: " . $handle . "<br>";
while($datei=readdir($handle))
{
echo $datei . "<br>";
if (is_dir("$dir/$datei") && $datei!="." && $datei!="..")
{
echo "<a href="nextTry.php?folderName=$datei">$datei</a>(dir)<br>";
}
else
{
echo " $datei<br>";
}
}
closedir($handle);
PS: Das erste Verzeichnis wird -wie gewünscht- ausgelesen. Ebenso das zu dem jeweiligen Link führende Unterverzeichnis. Nur eine Verzweigung in ein weiteres Unterverzeichnis ist nicht möglich. Es gibt folgende Fehlermeldung:
Warning: OpenDir: No such file or directory (errno 2) in /data/05users/Habenicht/4.Woche/Startscripts/nextTry.php on line 6
etc.
...
PS: Das erste Verzeichnis wird -wie gewünscht- ausgelesen. Ebenso das zu dem jeweiligen Link führende Unterverzeichnis. Nur eine Verzweigung in ein weiteres Unterverzeichnis ist nicht möglich. Es gibt folgende Fehlermeldung:
Warning: OpenDir: No such file or directory (errno 2) in
Aha, da haben wir das Problem: Die Unterverzeichnisse der zweiten Ebene erscheinen nicht mit vollem Pfad in der URL.
/
+--a/
| +--1/
| +--2/
|
+--b/
+--c/
Wenn Du den Inhalt von /a/1/ anzeigen willst, mußt Du auch /a/1/ angeben, damit $dir korrekterweise zu "/blabla/a/1" wird und nicht, wie momentan, zu "/blabla/1". Die erste Ebene funktioniert noch, weil /a ja tatsächlich im Wurzelverzeichnis liegt. In der Zeile
echo "<a href="nextTry.php?folderName=$datei">$datei</a>(dir)<br>";
fehlt also die Angabe des aktuellen Pfades:
echo "<a href="nextTry.php?folderName=$folderName/$datei">$datei</a>(dir)<br>";
Noch zwei Tipps:
Gruß,
soenk.e
WOWWWW!!!! :-))))
Du bist der Held des Tages (auch wenn das wahrscheinlich für Dich Peanuts ist!)... wir haben Tage daran gesessen, rauszubekommen, woran es liegt; wir haben uns schon gedacht,daß irgendwo ein kleiner, aber schwerwiegender Fehler im Programm sein muß...
Es funktioniert jetzt und wir kommen zumindest einen Schritt weiter!
Echt vielen, vielen Dank!!!
Das mit den Sicherheitsvorkehrungen sind auch gute Tips, ich werde sie mal im Hinterkopf behalten..
Mach's erstmal gut, und danke nochmal, tschüß
Silja