PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: Problem mit while


mf_2
2006-08-13, 15:19:26
Hallo,

Ich will ein Verzeichnis mit einer while-Schleife auslesen. Allerdings will ich verhindern, dass die Verzeichnisse "." und ".." mirbearbeitet werden.
Daher habe ich folgendes Script geschrieben:


if ($handle = opendir($startdir)) {

/* Das ist der korrekte Weg, ein Verzeichnis zu durchlaufen. */
while (($file = readdir($handle)) !== false) {
if($file == ".")
{
break;
}
if($file == "..")
{
break;
}
$filename_array = explode(".",$file);

echo "User: ".$filename_array[0]."<BR>";
}

closedir($handle);
}


Ohne die beiden if-Abfragen hat das Script funktioniert, aber eben auch die "." und ".." Einträge mit abgearbeitet. Wenn ich das Script so wie es oben steht laufen lasse, passiert garnichts.
Ich vermute,dass es daran liegt, dass break; die while-Schleife komplett beendet und nicht nur für den einen $file-Wert. Welches Kommando muss ich statt break; verwenden, dass nur die "." und ".." Werte nicht in der Schleife verarbeitet werden? Gibt es da etwas?
Oder bleibt mir nur folgende Lösung, die mir wenig elegant erscheint ( alles in eine riesige if-Schleife packen ):

if ($handle = opendir($startdir)) {

/* Das ist der korrekte Weg, ein Verzeichnis zu durchlaufen. */
while (($file = readdir($handle)) !== false) {
if(($file!=".")&&($file!=".."))
{
$filename_array = explode(".",$file);

echo "User: ".$filename_array[0]."<BR>";
}
}

closedir($handle);
}

Trap
2006-08-13, 15:25:26
break beendet die Schleife. Was du suchst ist continue, das überspringt nur den Rest des body.

darph
2006-08-13, 15:25:43
Also ich hab's so:
public function loadFilters($filterPath = "./filters/") {
if ($handle = opendir($filterPath)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$this->doSomethingWith($file);
}
}
}
}
Shamelessly stolen from the php documentation (http://de3.php.net/manual/de/function.readdir.php).

The_Invisible
2006-08-13, 16:17:22
also ich würde sowieso die "dir" klasse verwenden, schöner zu lesen -> http://de.php.net/manual/de/class.dir.php

mfg

MadMan2k
2006-08-13, 16:41:24
http://www.forum-3dcenter.org/vbulletin/showpost.php?p=4632100&postcount=10

mf_2
2006-08-13, 17:26:02
Wow, danke für diese Vielzahl an verschiedenen Lösungsvorschlägen! Ich habe das "break;" einfach gegen ein "continue;" getauscht und es funktioniert einwandfrei.