Probleme beim Ordner auslesen

fmeyer84

Mitglied
Hallo,

möchte für eine Galerie auslesen, dazu habe ich folgendes Script:

PHP:
 if (isset($_GET['path'])) $path = $_GET['path'];
 else $path = "bilder";
 $handle = opendir ($path);
 while (($file = readdir($handle)) != false)
 {
 	if(is_dir($path.'/'.$file))
 	{
 		$array_dirs[]=$file;
 	}
 }
 closedir($handle);
 
 $i=0;
 $namen=explode("/", $path);
 while ($namefound!=true)
 {
 	$name2=$namen[$i];
 	if ($name2 =="" )
 		 {
 		$namefound=true;
 	}
 	else
 		 {
 		$name=": \"$name2\"";
 	}
 	if ($name2 == ".." OR $name2 == ".")
 		 {
 		$name="";
 	}
 	$i++;
 }
 
 if ($array_dirs != "")
 {
 	foreach($array_dirs as $dir)
 	{
 		$pathnew=$path."/".$dir;
 				 eval("dooutput(\"".gettemplate("directory_bit")."\");");
 			}
 }

Die Ordner werden mir ausgeben, gut.

1.
Nur allerdings: Kann ich auch in übergeordnete Ordner springen, was nicht sinnvoll ist. D.h. es gibt einen Bilderordner "bilder" und nur darin soll das Script arbeiten, dass heißt darüber hinaus nicht, höchstens nur noch in Unterordnern von "bilder", aber keine übergeordneten.

2. Werden auch die "Ordner" "." und ".." ausgegeben, das möchte ich unterbinden. Es sollen wirklich nur die richtigen Ordner angezeigt werden.

3. In den Ordnern befinden sich jpg und gif-Files. Diese sollen per extra Funktion gekennzeichnet werden und verlinkt, d.h.

wenn Ordner: index.php?path=$pathnew
wenn Bild: viewimage?path=pfad-zur-datei

Kann mir jemand helfen?

Grüße,
Fabian
 
fmeyer84 hat gesagt.:
keiner einen Denkanstoß?
Das liegt wahrscheinlich daran, weil der von dir gepostete Code überhaupt keinen Sinn ergibt. Erst werden alle Verzeichnisse im übergebenen Verzeichnis in ein Array geschrieben. Anschließend werden die Bestandteile des übergebenen Pfades durchlaufen, wobei immer der letzte Bestandteil in die Variable $name geschrieben wird (es sei denn er ist "." oder ".."). Und am Ende werden alle zu Beginn ermittelten Verzeichnisse durchlaufen, wobei immer die Variable $pathnew gesetzt wird, die den kompletten Pfad beinhaltet. Je Verzeichnis wird außerdem die Funktion "dooutput" aufgerufen, an die nichts übergeben wird, was innerhalb des Scriptes ermittelt wurde oder nur irgdendwie etwas mit den Verzeichnissen zu tun hat.

Was also soll das?
 
Hallo,

hmm, komisch. Für mich ergibt das Sinn, weil ja die Verzeichnisse ausgelesen werden und auch korrekt dargestellt werden, wollte ja nur noch weitere Funktionen dazu haben.

Grüße,
Fabian
 
Hallo,

hab das jetzt mal verändert:

PHP:
if (isset($_GET['path'])) $mydir = getcwd().$_GET['path'];
else $mydir = getcwd().$path_original_pics;

// Auslesen
	$verz = @dir($mydir);
	while(@$entry=$verz->read())
	{
        		if($entry != "." && $entry != "..")
        		{
        		$dateinamen[] = $entry;
        		}
	}
	$verz->close();

	//Ausgabe
	rsort($dateinamen);
	while(list($key, $val) = each($dateinamen))
	{
                 if (is_dir($val))
                 {
                 	if (isset($_GET['path'])) $pathnew = $_GET['path']."/".$val;
         		else $pathnew = $path_original_pics."/".$val;
                 	eval("dooutput(\"".gettemplate("directory_bit")."\");");
                 }
                 else eval("dooutput(\"".gettemplate("directory_nbit")."\");");
         }

Er soll also bei gefundenem Verzeichnis das Template "directory_bit" ausgeben, falls keine Ordner mehr vorhanden sind, dass "directory_nbit".

Lasse ich das Script laufen, dann kommt aber immer dass "directory_nbit". Obwohl ich viele Ordner mit Unterordner habe.

Woran liegts?

Grüße,
Fabian
 
Er soll also bei gefundenem Verzeichnis das Template "directory_bit" ausgeben, falls keine Ordner mehr vorhanden sind, dass "directory_nbit".
1.) Es werden ohnehin nur die Verzeichnisse ausgelesen, die sich im übergebenen Verzeichnis befinden.

2.) Im Array $dateinamen stehen nur die Namen der Verzeichnisse im auszulesenden Verzeichnis. Es fehlt vorangestellt der Name des auszulesenden Pfades.

3.) Etwas mehr Eigeninitiative hinsichtlich des Debuggings könnte nicht schaden. Wenn du merkst, dass nur das eine Template aufgerufen wird, dann muss demzufolge die Bedingung zum Aufruf des anderen Templates nie erfüllt werden. Um herauszufinden, woran der Fehler liegt, musst du also nachsehen, was die Variablen beinhalten, die zur Erfüllung der Bedingung verwendet werden. Stimmen deren Inhalte nicht, musst du im Code oberhalb nachprüfen, woran das liegt.

hmm, komisch. Für mich ergibt das Sinn, weil ja die Verzeichnisse ausgelesen werden und auch korrekt dargestellt werden, wollte ja nur noch weitere Funktionen dazu haben.
Das ist schön für dich, aber für die anderen macht es keinen Sinn, weil niemand weiss, was der Funktionsaufruf gettemplate genau bewirkt. Dein Codeausschnitt lässt nur vermuten, dass der Funktionsaufruf unabhängig vom restlichen Code erfolgt.

Und wie du gemerkt hast, hat dir ja auch niemand geantwortet.

Sven
 
Hallo,

also irgendwie hab ich es nicht so mit den Dateifunktionen. Habe das jetzt anders bewerkstelligt:

Datenbanktabelle mit ordnerid und ordnername erstellt und dann werden die Ordner so ausgelesen, irgendwie klappt das besser.

Trotzdem nochmal danke für die Hilfe. Werde mich bemühen, demnächst besseren Code zu posten, damit man gleich einen besseren Überblick über mein Problem hat.

Grüße,
Fabian
 
Zurück