Sarah: getimagesize

Hallo!
Ich bekomme ein für mich unerklärliches Warning:

Warning: getimagesize(flyer-prog-mar.jpg) [function.getimagesize]: failed to open stream: No such file or directory in /home/***/aktionen.php on line 15

mein Code kann meiner Meinung nach aber nur Dateien nehmen die auch vorhanden sind. Außerdem zeigt er mir das Bild auch ganz normal an als wäre nichts?!?
Was kann hier falsch sein?!?

Hier der Code:
$pfad= "bilder/aktionen";
 $handle=opendir($pfad);
  while ($file = readdir ($handle)) //geht alle unterordner durch
     {
      if ($file != "." && $file != ".." && !is_dir($pfad."/".$file))
      {
    $position = strpos($file,".");
    if (substr($file,$position)==".jpg")
    {
     list($width, $height, $type, $attr)=getimagesize($file);

$width=518;
     $height=380;
     $filepfad=$pfad."/".$file;

echo "<a  href="#" onclick="return newWindow('".$filepfad."',".$width.",".$height.");return false">";
     echo "<img class="img-aktion" src="".$filepfad."">";

echo "</a>";

}
      }
    }

  1. Ich bekomme ein für mich unerklärliches Warning

    [Auch wenn sie unerklärlich ist, darfst du sie gerne "eine Warnung" nennen. So unter einem Verkaufszwang steht dieses Ereignis nun nicht, da unbedingt auf Englisch verfallen zu müssen.]

    mein Code kann meiner Meinung nach aber nur Dateien nehmen die auch vorhanden sind.

    [Bitte zukünftig mit der Vorschaufunktion des Forums dafür sorgen, dass der Code ordentlich formatiert hier ankommt.]

    failed to open stream: No such file or directory in

    Vergleiche doch mal diese beiden Zeilen, insbesondere den Zugriff auf die Datei mittels ihres Namens:

    if ($file != "." && $file != ".." && !is_dir($pfad."/".$file))

    list($width, $height, $type, $attr)=getimagesize($file);

    Du kannst auch noch diese Zeilen zum Vergleich heranziehen, der zum Fehler führende Unterschied ist der gleiche:

    $filepfad=$pfad."/".$file;

    echo "<img class="img-aktion" src="".$filepfad."">";

    1. Entschuldige wegen dem nur eingefügten Code, habe die Code-Formatierung nicht gefunden... (und wusste auch nicht wie sie hier manuell angesprochen wird - warscheinlich eh mit [code] *aufskopfiklopf*)

      dh. ich brauche den direkten Pfad?
      ich dachte durch opendir bin ich direkt in dem ordner und muss den kompletten pfad nicht angeben.

      Kann das sein, dass das unterschiedlich bei unterschiedlichen Servern ist, da die Warnung bei meinem anderen Server nicht entsteht?

      Aber danke für die Hilfe ;)

      1. Entschuldige wegen dem nur eingefügten Code, habe die Code-Formatierung nicht gefunden...

        Es ging mir weniger um einen bunten Teller (den gibt es in der Tat mit [code]), sondern darum, dass die Einrückungen mal weiter links, mal weiter rechts lagen, wodurch die Struktur und letztlich die Übersichtlichkeit leidet, was seinerseits die Fehlersuche erschwert und was dann schlussendlich darin endet, dass sich weniger Leute um deine Frage kümmern.
        Mir soll's letztlich wurscht sein, denn obwohl ich dahingerotze Fragen unhöflich finde (n.b., deine war nicht dahingerotzt) - wenn ich mich da durchquäle, ist es meine Schuld.

        Wie dem auch sei, ordentlich eingerückte Blöcke bekommst du nur mit der Leertaste hin, eine Automatik gibt es dafür nicht. Aber ist ja nicht so wild, beim nächsten Mal wird's besser.

        dh. ich brauche den direkten Pfad?

        Jein, du brauchst den Pfad vom aktuellen Arbeitsverzeichnis.

        ich dachte durch opendir bin ich direkt in dem ordner

        Nein, opendir() öffnet nur das Verzeichnis zum Auslesen seines Inhalts. Um ein Verzeichnis als Arbeitsbasis festzulegen, musst du chdir() benutzen.

        Kann das sein, dass das unterschiedlich bei unterschiedlichen Servern ist, da die Warnung bei meinem anderen Server nicht entsteht?

        Nein, der Unterschied dürfte woanders liegen. Anfänger schalten die Warnungen mittels der Option error_reporting ab, weil sie nicht wissen, dass das Ausgeben von Warnungen und Fehlern in die Webseite nur für den Privatgebrauch gedacht ist und diese Meldungen von PHP im tatsächlichen Betrieb nur im Fehlerprotokoll des Servers geführt werden sollten (siehe display_errors).

        1. Hi Gonzo,

          Nein, der Unterschied dürfte woanders liegen. Anfänger schalten die Warnungen [...] ab,

          .... und dabei sind Notices und Warnings wirklich gute Freunde, wenn einem sein Server am Herzen liegt. Man sollte sie immer gut behandeln, beachten, ihnen auf den Grund gehen und dem PHP-Runtime dankbar sein, dass es so redselig ist. Wenn PHP etwas Gutes hat, dann sind es die wirklich aussagefähigen und reichhaltigen Meldungen.

          Wie Du schon sagtest, im regulären Betrieb schiebt man die natürlich in eine Log-Datei und nicht zum User-Screen.

          LG
          Chris©

          1. Hi,

            Wie Du schon sagtest, im regulären Betrieb schiebt man die natürlich in eine Log-Datei und nicht zum User-Screen.

            Im regulaeren Betrieb sollte es in aller Regel ueberhaupt keine Warnungen und Notizen mehr geben.

            MfG ChrisB

            1. Hallo Chris,

              Wie Du schon sagtest, im regulären Betrieb schiebt man die natürlich in eine Log-Datei und nicht zum User-Screen.

              Im regulaeren Betrieb sollte es in aller Regel ueberhaupt keine Warnungen und Notizen mehr geben.

              Das kann ich mir nicht vorstellen, dass eine gut besuchte Webseite nicht gelegentlich mal eine Racetime Condition vergeigt und dann ein File oder ein DS nicht zugänglich sind. Da wird man nicht immer eine vollwertige Behandlungsstrategie dahinterliegen haben, sondern auch schon mal einen Fehler auslösen.

              Das fehlt mir z.B. noch in PHP. Eine einstellbare Seite, die bei Script-Timeout ausgeliefert wird. Geht das eigentlich? Kann man da eventuell noch einen Error-Handler vereinbaren?

              LG
              Chris©

              1. Das fehlt mir z.B. noch in PHP. Eine einstellbare Seite, die bei Script-Timeout ausgeliefert wird. Geht das eigentlich? Kann man da eventuell noch einen Error-Handler vereinbaren?

                Anstatt zu überlegen, wie du aus dem Auto rauskommst, nachdem du es gegen den Baum gebummst hast, solltest du dir Gedanken darüber machen, wie du es vermeidest, überhaupt erst gegen den Baum zu fahren.

                Wenn ein Skript länger als vier, fünf Sekunden braucht, um dem Benutzer eine Antwort zu liefern, hilft auch keine Fehlerseite mehr, weil der Benutzer zu dem Zeitpunkt schon das Weite gesucht haben wird.

                Kurz: Bringe dem Skript erstmal akzeptable Antwortzeiten bei und keine großartigen Entschuldigungen.