PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Frage zu readdir (http://www.selfphp.de/forum/showthread.php?t=6423)

xabbuh 20.12.2003 12:38:50

Frage zu readdir
 
Ich habe mal eine Frage zu readdir:

Warum funktioniert das Auslesen eines Ordners so:

PHP-Code:

$verz=opendir ('.');

while (
$file readdir ($verz)){
    echo 
"$file <br>";
    }

closedir($verz); 

aber so nicht:

PHP-Code:

$verz=opendir ('.');

$file readdir ($verz);

while (
$file){
    echo 
"$file <br>";
    }

closedir($verz); 

Ich tippe mal, dass die Lösung ziemlich einfach ist, aber ich komme einfach nicht dahinter.

c4 20.12.2003 12:57:06

Ich versuche es mal mit Kommentaren zu erklären:
PHP-Code:

// Variante 1

// oeffne verzeichnis und nutze $verz als handle/pointer/verweis
$verz=opendir('.');
// lies die erste/naechste datei aus dem verzeichnis aus
// findet readdir(handle) eine naechste datei, dann gibt die wertzuweisung true zurueck,
//  sonst false, sprich die schleife wird abgebrochen
while ($file readdir($verz)) {
    
// ausgelesenen dateinamen auslesen
    
echo "$file <br>";
}
// handle schliessen/beenden
closedir($verz);

// Variante 2

// oeffne verzeichnis und nutze $verz als handle/pointer/verweis
$verz=opendir('.');
// lies die erste/naechste datei aus dem verzeichnis aus
$file readdir($verz);
// durchlaufe schleife, solange $file nicht false zurueckgibt
// ergebnis sollte eine endlosschleife sein
while ($file) {
    
// ausgelesenen dateinamen auslesen
    
echo "$file <br>";
}
// handle schliessen/beenden
closedir($verz); 


xabbuh 20.12.2003 13:32:36

Danke schön :). Ich glaube, dass hat mir weitergeholfen.

Wenn ich das richtig verstanden habe, gibt $file=readdir($ordner) also keinen array zurück, sondern nur einen Verweis auf die erste/nächste Datei?

c4 20.12.2003 13:36:43

Nein, nicht ganz.
Code:

Aktion                      Ergebnis
$file=readdir($ordner)      true, wenn eine naechste Datei gefunden wurde
$file=readdir($ordner)      false, wenn keine naechste Datei gefunden wurde
readdir($ordner)            naechster Dateiname

Ein Array gibt Dir keine dieser Funktionen zurück, das musst Du selber erstellen. Das kannst Du einfach mit dieser Schleife bewerkstelligen:
PHP-Code:

while ($file[]=readdir($ordner)) {



xabbuh 20.12.2003 13:54:37

Meine letzte Frage war ein bisschen missverständlich gestellt:

Ich meinte, ob ich es richtig verstanden habe, dass die Funktion readdir() keinen Array sondern einen Verweis auf die nächste Datei zurückgibt?

c4 20.12.2003 14:03:10

Ahso. readdir() gibt den Namen der Datei als String zurück.

Fuchs 20.12.2003 16:04:45

Wobei diese Vorgehensweise, ein Verzeichnis auszulesen im duemmsten Fall schiefgehen _KANN_.

PHP-Code:

print_r(scandir('.'));

$dh opendir('.');
while (
$fname readdir($dh)){
    echo 
$fnameendl;


Meine Ausgabe:
Code:

Array
(
    [0] => .
    [1] => ..
    [2] => .htaccess
    [3] => 0
    [4] => PHPFunctions.xml
    [5] => bench.php
    [6] => bench1.php
    [7] => bench2.php
    [8] => config.ini
    [9] => inclusions
    [10] => misc.php
    [11] => phpinfo.php
    [12] => projects
)
.
..
.htaccess

Was passiert hier?

Nach dem 3. Durchlauf d. Schleife ('.htaccess') kommt eine Datei mit dem Namen '0'. Also ist $fname == '0' und if ('0') {} wird zu false evaluiert. Die Schleife wurde abgebrochen.

Korrekt muesst man auf den Bool'schen Wert false ueberpruefen.

Sprich:
PHP-Code:

while ($fname readdir($dh) !== false) {}; 

Natuerlich ist das ein Worst-Case, aber es _KANN_ vorkommen und dann sucht man 2 Std. nach dem Problem.


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:26:34 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.