PHP Ordner durchsuchen
-
Bei 8 Dateien in einem Verzeichnis kann der obige Code die Laufzeit nicht sprengen (es sei den, der Server bzw. Webserver selbst ist in dem Moment am krepieren ...). Der Fehler sollte folglich wo anders zu suchen sein ...
-
Der obige Code läuft so derzeit auch ohne Probleme.
Nur wenn ich mir die eine, unnötige Variable $file sparen will, dann gibts Probleme. Folgender Code verursacht immer ein "Fatal error: Maximum execution time of 10 seconds exceeded in" wenn ich einen Dateinamen übergebe, der nicht vorhanden ist. Wenn ich garnichts übergebe, sprich id="", dann findet er zwar was, macht aber natürlich später stress, da das was er findet nichts ist.if ($dir = OpenDir(".")) { while($dir !== false) { if (readdir($dir) == $_GET['id']) { $data = $_GET['id']; break; } } closedir($dir); }
-
In diesem fall müsste $dir immer !=0 sein, da opendir soviel ich weiß eine resource zurückgibt und sich danach nicht mehr verändert, außer du würdest es tun. Und wenn eine Datei mit dem Namen $_GET['id'] nicht existiert, wird die Schleife ja auch nie beendet.
@árn[y]ék: Upsi, da war ich wohl etwas vorschnell
-
Hmm laut http://de3.php.net/manual/de/function.readdir.php gibt die Funktion false beim Misserfolg zurück. Daher muss ich immer den Rückgabewert der Funktion testen, hab ich wohl auch falsch gedacht. Daher ich komme nicht ohne weitere Variable aus oder habt ihr einen spontanen Geistesblitz?
-
Ja, das mit readdir stimmt schon, aber deine Abbruchbedigung ist doch $dir!==false. Und dir hat doch den Rückgabewert von opendir(). Und zum break springt er ja nur, wenn readdir(dir)==$_GET['id'] ist.
Ich wüsste jetzt spontan keinen Grund, weshalb du nciht eine weitere Variable verwenden solltest. Nimm doch einfach dein erstes Beispiel?!
-
Vor allen Dingen ist die Schlussfolgerung absolut ... unsinnig
Du baust eine Endlosschleife.
Die Folge: Dein Skript sprengt die maximal erlaubte Laufzeit.
Die Schlussfolgerung: Essentielle Variablen streichen, um die Laufzeit zu verbessern?Ahm, ja. Das nenne ich mal eine Arugmentation
-
Wenn ich das richtig verstanden habe...
...lief seine erste Version einwandfrei.
...hat er hat die "unnötige" Variable $file gestrichen.
...hat damit eine Endlosschleife programmiert.
-
Mal ne andere Frage: Warum nimmst Du dafür nicht einfach file_exists(), evtl. abgesichert durch basename()?
Gruß Jens
-
LeGaN schrieb:
Wenn ich das richtig verstanden habe...
...lief seine erste Version einwandfrei.
...hat er hat die "unnötige" Variable $file gestrichen.
...hat damit eine Endlosschleife programmiert.vollkommen korrekt. Dachte halt, dass ich mir eine Variable sparen könnte, aber wie wir ja herausgefunden haben geht das nicht.
file_exists kannte ich nicht, werd ich aber mal probieren. Wäre natürlich sehr viel einfacher damit. Danke Sa(n)dman für den Tipp:)
-
Pass nur auf, dass du dir damit kein Schleusentor für Code-Injection oder ähnliches einbaust