Sortierunktion mit Fehlern

Seven Secrets

Erfahrenes Mitglied
Hallo,

ich habe mir die Funktionen: opendir und readdir mal angeschaut. Nun wollte ich eine Ausgabevariation davon erzeugen. Und zwar soll er mir die Verzeichnisse darüber nicht ausgeben, sondern nur die Datein. Daraufhin habe ich weitergeblättert und die Funktion is_file gefunden. Leider erzeugt er mir jetzt keine Ausgabe mehr. Wo ist mein Denkfehler?

PHP:
$dir = "downloads/pool/";

if (is_dir($dir)) {
   if ($dh = opendir($dir)) {
       while (($file = readdir($dh)) !== false) {
           if(is_file($file)) echo 'filename: $file <br>';
       }
       closedir($dh);
   }
}
 
nur so eine Vermutung, aber lass beim Verzeichnis das letzte / weg. also

Code:
$dir = "downloads/pool";
 
Die Frage ist wo der Fehler passiert. Du hast insgesammt 3 logische Schalter, die entweder true oder false liefern können.

PHP:
if (is_dir($dir)) {
   if ($dh = opendir($dir)) {
       while (($file = readdir($dh)) !== false) {
           if(is_file($file)) 
               echo 'filename: $file <br>';
           else
               echo "nofile: ". $file. "<br />";
       }
       closedir($dh);
   }
   else 
       echo "Verzeichnis kann nicht geöfnet werden!";
}  
else 
    echo $dir. " ist kein Verzeichnis!";
 
hmmm ... Ich habe das jetzt nochmal durchprobiert und bekomme trotzdem wieder die Verzeichnisstrucktur drüber angezeigt. Die will ich ja nicht. Ich brauche nur den Inhalt des Verzeichnis als Ausgabe.
 
Hallo,

[phpf]readdir[/phpf] gibt nur Datei-/Verzeichnisnamen zurück, nicht den vollständigen Pfad. Für die Überprüfung mit [phpf]is_file[/phpf] ist aber ein Pfad vonnöten. (Es sei denn, die Datei befindet sich im aktuellen Arbeitsverzeichnis, aber das ist ja hier nicht der Fall.)

So sollte es also klappen:
PHP:
$dir = "downloads/pool/";

if (is_dir($dir)) {
   if ($dh = opendir($dir)) {
       while (($file = readdir($dh)) !== false) {
           $path = $dir.$file;
           if(is_file($path)) echo "filename: $file <br>";
       }
       closedir($dh);
   }
}

Grüße,
Matthias
 
das . und von .. kommt von der Art und Weise wie ein Dateisystem aufgebaut ist, die bekommets du in der Ausgabe weg, wenn du ein Abfrage danach machst. Wenn du sicher sein kannst, dass in dem Verzeichnis kein Unterverzeichnis mehr ist, würde folgendes reichen:

PHP:
$dir = "downloads/pool/";

if (is_dir($dir)) {
   if ($dh = opendir($dir)) {
       while (($file = readdir($dh)) !== false) {
           if($file != "." && $file != "..") echo "filename: $file <br>";
       }
       closedir($dh);
   }
}

Das man bei is_file das Verzichnis mit angeben muss, da hat Matthias recht; hab ich übersehen. Lass dir einmal echo $dir.$file ausgeben und überprüft, ob der Pfad stimmt.
 
Zurück