• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mit readdir()

Status
Für weitere Antworten geschlossen.

Icy

Neues Mitglied
Hallo,

ich muss zugeben, dass ich mich mit dem Thema Dateien und Ordner auslesen/anzeigen noch nicht viel auseinander gesetzt habe. Deswegen habe ich ein kleines Problem.
Ich habe folgendes Script:

PHP:
<?php
  $dir = opendir('img/avas/');

  while (false !== ($file = readdir($dir))) {
    echo "<img src=\"img/avas/".$file."\" alt=\"Avatar\" /> ";
  }
  closedir($dir);
?>

Das Funktioniert so auch super, alle Grafiken des Ordners werden angezeigt.
Komischerweise werden aber noch zwei fehlerhafte weitere Grafiken vor den eigentlichen Bildern angezeigt (alt-Text wird angezeigt). Diese zwei Grafiken haben jeweils den Pfad "img/avas/" und "img/", also die zwei Unterordner.
Ich habe keine Ahnung, woran das liegt. Kann mir da wer helfen?

MfG Icy
 
readdir liest alles mit auch die verzeichnisse ./ und ../

PHP:
   <?php
  $dir = opendir('img/avas/');

  while (false !== ($file = readdir($dir))) {
    if($file == "." || $file == "..") continue;
    echo "<img src=\"img/avas/".$file."\" alt=\"Avatar\" /> ";
  }
  closedir($dir);
?>
 
readdir() liest auch Verzeichnisse und die ersten sind grundsätzlich '.' (aktuelles Verz.) und '..' (Elternverz.).

Prüf doch einfach, ob die aktuelle Datei ein Bild ist. Sollte so gehen:
PHP:
<?php
  $dir = "img/avas/";
  $handle = opendir($dir);
  while($file = readdir($handle))
  {
    if(@getimagesize("$dir/$file"))
      echo "<img src=\"$dir/$file\" alt=\"Avatar\" /> "; 
  }
?>

EDIT: Zu langsam...
 
PHP:
<?php
  $dir = opendir('img/avas/');

  while (false !== ($file = readdir($dir))) {
    if($file == '.' || $file == '..'){ continue; }
    echo "<img src=\"img/avas/".$file."\" alt=\"Avatar\" /> ";
  }
  closedir($dir);
?>

liegt daran das es ja auch noch . als referenz auf sich selbst und .. als referenz auf einen existierenden unterordner gibt ^^

//Edit: ich empfehle Franks methode da sie einfach schneller ist ;)
auch wenn ich es nicht gutheißen kann, das er die klammern weggelassen hat ^^
 
Klasse, ich danke euch dreien!
Habe jetzt einfach mal Franks Lösung genommen, die super funktioniert.
Trotzdem danke allen, jetzt weiß ich es auch fürs nächste Mal :)

MfG Icy
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben