Brauche Hilfe bei Weiterentwicklung von Directory-Listing

ahykes

Erfahrenes Mitglied
Hallo!
Nach einigen Anlaufschwierigkeiten, habe ich es dann doch geschafft mir mein Directory-Listing-Script zu bauen. So weit so gut. Das ganz zeigt mir also den Inhalt eines Verzeichnisses plus Unterverzeichnisse an. Das Script ist so aufgebaut, dass ich die Namen von Verzeichnissen und Ordnern zunächste mit Hilfe von "<li>" und "<ul>" ausgebe und dann per Javascript als Baumstruktur darstellen lasse. ;) Das funktioniert alles auch wunderbar. Nun möchte ich aber auch den Inhalt der Unter- und Unterunterverzeichnisse etc. mit meiner Baumstruktur darstellen. Da liegt mein Weiterenwicklungsbedarf. Ich müsste also mein Script so oft ausführen, bis das gesamte Verzeichniss nach Dateien und Ordnern komplett durchsucht worden ist, um dann alles auszugeben und mit Javascript darzustellen. :suspekt:
Ich würde mcih echt freuen, wenn es uns zusammen gelingen könnte, dass Srcipt vollständig ans Fliegen zu bringen! :-)

Mein Script sieht bis jetzt so aus :
PHP:
	<li>Audiofiles
		<ul>
			<?php
				
			$Pfad='../SUDDENMEDIA';
				  
				$dir=scandir($Pfad); //$Pfad nach Dateien absuchen und in Array schreiben
				 $x=count($dir); //Anzahl der Dateien (=Objekte in Array) zählen
	
				for($i=0; $i<$x; $i++) //Durchläuft so viele Male, wie es Objekte im Array gibt
				 {
					if ($dir[$i]!="." && $dir[$i]!="..") //Die Folders "." und ".." ausfiltern
						{ 
								
							if(is_dir($Pfad.'/'.$dir[$i])) //Directories erkennen
							{	 
							echo '<li>';
							echo '<a href="../SUDDENMEDIA/';
							echo $dir[$i]; //Datei- oder Verzeichnisnamen ausgeben
							echo '">';
							echo $dir[$i];
							echo '</a>';
								echo '<ul>';
									echo '<li>';
										echo 'ALEX';//<----------Ab hier fängt ein nues Verzeichnis an
										echo '<li>';
									echo '</ul>';
							echo '</li>';
							}
								
								 
							if(is_file($Pfad.'/'.$dir[$i]))//Files erkennen
							{
							echo '<li>';
							echo '<a href="../SUDDENMEDIA/';
							echo $dir[$i]; //Datei- oder Verzeichnisnamen ausgeben
							echo '">';
							echo $dir[$i];
							echo '</a>';
						echo '</li>';
							}
									
								 
						}
				 }
				?>
		  </ul>
	</li>

Könnt Ihr mir weitehelfen?
 
Pack den Algorithmus des Ermittelns des Verzeichnisinhalts in eine Funktion und rufe diese immer dann auf, wenn es sich bei einem Objekt um ein Verzeichnis handelt.
 
Hmm okay...ich werde es versuchen, aber wie soll das funktionieren, wenn es mehrere Unterverzeichnisse gibt? Könntest Du mir den Code oben ansatzweise erweitern, sodas ich sehen kann wie Du das konkret meinst? ;)
 
Du solltest Dir mal mein Tutorial zu diesem Thema zu Gemuete fuehren.
Dort geht es ja gerade darum den Verzeichnisbaum in einer Variable, genauer: in einem Objekt, abzubilden.
Und am besten liest Du dort auch nicht nur den Code, sondern auch den Text drumherum, dort ist beschrieben warum ich das in der dort gegebenen Form implementiert habe.
 
Zuletzt bearbeitet:
Das "kenne" ich schon....da steige ich leider nicht wirklich durch.Habe jetzt angefangen, dass mit der Funktion zu realisieren, aber das noch nicht so wirklich. Wäre also wirklich dankbar, wenn ich mal sehen könnte, wie das funktionieren könnte. :p
 
Das mit der Funktion funktioniert genauso wie bei mir die Sache mit dem Objekt.
Nur, dass Du halt bei Fund eines Verzeichnisses kein neues Objekt erstellst, sondern die Funktion nochmal aufrufst.

Willst Du die Daten nur ausgeben oder auch in einer Variable (multi-dimensionales Array/ Objekt) speichern?
 
Ich will die Daten erstmal nur ausgeben.

Also jetzt gerade habe ich das mit der Funktion mal probiert und bin der Meinung, dass ich das nciht gut gemacht habe. Habe einfach den ganzen Quellcode quasi zweimal gemacht. Einmal als Funktion und einmal ganz normal...Nicht so wirklich gut. Mir fehlt einfach der Ansatz. :suspekt:
 
Zuletzt bearbeitet:
Ausserdem funktioniert das auch nur bis zur nächsten Ordnerebene logischerweise. Also Ich mache das so, das die Funktion mir einfach das nächste Verzeichniss ausliesst. ABER: Was soll sie mir zurückgeben`?
 
Wenn Du eine Funktion zur Ausgabe nutzt braucht die nichts zurueckgeben, es reicht wenn sie was ausgibt.

Du rekursive Ausgabe erklaer ich jetzt einfach mal anhand des Beispiel-Codes aus meinem Tutorial.

PHP:
<?php
function showdir($dirlist,$recursive=false)
{
echo '<li>[DIR] '.$dirlist->name.'</li>';
echo '<ul>';
for ($x=0;$x<count($dirlist->subdirs);$x++)
    {
        if ($recursive==true)
            {
                showdir($dirlist->subdirs[$x],true);
            }
        else
            {
                echo '<li>[DIR] '.$dirlist->subdirs[$x]->name.'</li>';
            }
    }
for ($x=0;$x<count($dirlist->files);$x++)
    {
        echo '<li>[FILE] '.$dirlist->files[$x].'</li>';
    }
echo '</ul>';
}

require("directorylist.class.php");
$dir=new directorylist("/var/www/htdocs/test",true);
showdir($dir,true);
?>
Den ganzen Kram mit dem Objekt musst Du einfach mal uebersehen.
Die Funktion showdir ist das was Du suchst, musst sie halt nur etwas anpassen.
Hier wird der Inhalt des Objektes ausgegeben, Du musst halt das uebergebene Verzeichnis scannen und ausgeben.
Wenn Du auf ein weiteres Verzeichnis stoesst rufst Du die Funktion nochmal auf, mit dem gefundenen Verzeichnisnamen als Parameter.
 
Also Moment mal! Ich habe da gerade etwas entdeckt in Deinem Script, was ich sehr interessant finde: Es ist also möglich, dass sich die Funktion "showDir" selber aufruft? :p

Krass, wenn das so ist/wäre...könnte ich das glaub ich auch hinkriegen...Ich setze mich mal dran... (!)
 
Zurück