elBee: GetImageSize

Hallo Forum,

ich habe hier ein Problem:

Ich ermittle anhand
   $y = GetImageSize($thumb);
die Größe eines Bildes...

Das Script funktioniert auch soweit recht gut, aber
am Ende der Ausgabe erhalte ich grundsätzlich die
Fehlermeldung:

Warning: getimagesize(10_jahre_grunz/thumbs/tn_thumbs) [function.getimagesize]: failed to open stream: No such file or directory in C:\XAMPP\htdocs\grunz\bilder\loadpics.php on line 62

Die Pfade zu den Bilder & Thumbs sind jedoch richtig...

Hier mal das ganze Script:

<?php

echo "<h2>Bildergalerie: $topic</h2>";

echo "<div align="center">";
   if(is_dir($dir)){

$dh  = opendir($dir);
while (false !== ($filename = readdir($dh))) {
   $files[] = $filename;
}

$thumbdir=$dir."thumbs/"; //Pfad für Thumbs
sort($files);

array_shift($files);
array_shift($files);

closedir($dh);

foreach($files as $bild){
$thumb=$thumbdir."tn_".$bild;

$y = GetImageSize($thumb);  //Bildgröße ermitteln

if ($y[1]=="200")
{
$bild="<a href="$dir$bild"><img src=$thumb height="136" width="92"></a>";
} else {
$bild="<a href="$dir$bild"><img src=$thumb></a>";
}
echo "$bild\n";

$j++;

if($j%3 == 0){
}

}

echo "</div>";
}

else{
    die("Galerie nicht gefunden!");
   }

?>

Grüße
elBee

  1. Moin,

    Warning: getimagesize(10_jahre_grunz/thumbs/tn_thumbs) [function.getimagesize]: failed to open stream: No such file or directory in C:\XAMPP\htdocs\grunz\bilder\loadpics.php on line 62

    sicher bin ich nicht, aber ich würde mal vermuten, dass da ein ein Unterverzeichnis angesprochen wird, also was, das kein Bild ist und demnach nicht wie ein Bild behandelt werden kann. Was ist denn "tn_thumbs"?

    Schönen Gruß,

    Mike

    1. Super, vielen Dank an Euch beiden...

      eigentlich hätte ich da auch draufkommen sollen...
      ich habe in dem selben Pfad indem er die Bilder ausliest ein
      Unterverzeichnis angelegt, indem die Thumbnails abgespeichert sind.
      Dieses hat er mir natürlich auch ausgelesen, da dieses aber kein
      Bild ist, kann man logischerweise auch mit imagesx() / imagesy()
      keine Werte auslesen... Naja... nochmals vielen Dank...
      Habe jetzt auch eine Prüfung auf den Dateityp miteingebracht und
      lasse alles, wie Mike gesagt hat, über ein Funktion prüfen...

      P.S: Aus Fehlern lernt man :)

  2. Moin elBee,

    $dh  = opendir($dir);
    while (false !== ($filename = readdir($dh))) {
       $files[] = $filename;
    }

    ich schließe mich der Vermutung von Mike an, und würde daher in der obigen Schleife eine Prüfung einbauen:
    http://www.php.net/manual/de/function.is-file.php

    u.U. noch zusätzlich die Dateiendung prüfen (jpg/tif/png)

    regds
    Mike©

    --
    Freunde kommen und gehen. Feinde sammeln sich an.
  3. echo $begrüßung;

    Ich ermittle anhand
       $y = GetImageSize($thumb);
    die Größe eines Bildes...

    Warning: getimagesize(10_jahre_grunz/thumbs/tn_thumbs) [function.getimagesize]: failed to open stream: No such file or directory in C:\XAMPP\htdocs\grunz\bilder\loadpics.php on line 62

    Eine Lösung, die vermutlich richtig ist, hast du schon bekommen, jedoch ist das nur die halbe Miete, wie du weiter unten lesen kannst.

    Ein sehr wichtiger Teil einer Fehlersuche ist es, sich Variableninhalte ausgeben zu lassen und diese mit den erwarteten Werten zu vergleichen. Dadurch kann man der Ursache von unbeabsichtigtem Verhalten näherkommen.

    $dh  = opendir($dir);
    while (false !== ($filename = readdir($dh))) {

    echo $filename, '<br>';

    $files[] = $filename;
    }

    Damit sollte klar werden, welchen Wert getimagesize() hier anmeckert.

    Weiterhin ist empfehlenswert alle Rückgabewerte zu berücksichtigen. getimagesize() liefert nämlich FALSE statt einem Array zurück, wenn der übergebenen Dateiname nicht auf eine Datei mit einem bekannten Bildformat verweist. [1]

    Und außerdem ist immer empfehlenswert wenigstens beim Entwickeln von PHP-Scripten das error_reporting auf E_ALL zu setzen. Damit hättest du einen Zugriffsfehler beim Lesen von $y[1] angezeigt bekommen, als getimagesize() das FALSE statt des erwarteten Arrays zurückgab.

    echo "$verabschiedung $name";

    [1] Leider kommt die Warnung bei ungültigen Grafikdateien immer. Deshalb ist es m.E. hier empfehlenswert, diese Warnung mit @ zu unterdrücken, _wenn_ man das Ergebnis von getimagesize() ordentlich (also auch auf FALSE hin) auswertet.