Paul: Ist ein Bild vorhanden?

Moin,
möchte mit PHP abfragen ob ein bestimmtes Bild vorhanden ist.

Bisher mache ich das so:

if (imagecreatefrompng($imgPath.$number.'.png')) {
 echo 'vorhanden';
}
else {
 echo 'nicht vorhanden';
}

So weit so gut. Allerdings kommt natürlich immer eine Warnung wenn das Bild nicht existiert. Das ist nicht so schön. Gibt's da vielleicht eine Funktion die prüft ob ein Bild vorhanden ist?

Paul

  1. Hi,

    Allerdings kommt natürlich immer eine Warnung wenn das Bild nicht existiert. Das ist nicht so schön. Gibt's da vielleicht eine Funktion die prüft ob ein Bild vorhanden ist?

    file_exists sagt dir, ob eine solche Datei vorhanden ist, und getimagesize dann, ob es sich um eine Bildatei handelt.

    Wenn du nicht so ausfuehrlich pruefen magst (was aber natuerlich empfehlenswerter waere), kannst du natuerlich Warnungen auch durch ein @ vor dem Funktionsaufruf unterdruecken.

    MfG ChrisB

    1. file_exists sagt dir ...

      Danke, genau was ich gesucht habe :-)

    2. Hello,

      Allerdings kommt natürlich immer eine Warnung wenn das Bild nicht existiert. Das ist nicht so schön. Gibt's da vielleicht eine Funktion die prüft ob ein Bild vorhanden ist?

      file_exists sagt dir, ob eine solche Datei vorhanden ist, und getimagesize dann, ob es sich um eine Bildatei handelt.

      Wenn du nicht so ausfuehrlich pruefen magst (was aber natuerlich empfehlenswerter waere), kannst du natuerlich Warnungen auch durch ein @ vor dem Funktionsaufruf unterdruecken.

      Die einzige datentechnisch sinnvolle Prüfung ist diejenige, es auf die "Fehlermeldung" ankommen zu lassen. Alles andere würde einen "TOCTOU"-Fehler geben (Time of Control / Time od Use). Das bedeutet, dass der Zugriff in der vorgesehenen Art zusammen mit der Prüfung, ob er zulässig ist, zusammen in einem gebundenen Statementblock stattfinden muss. Das kann man nur durch zusätzliche Sperrmaßnahmen oder durch Bindung der einzelnen Befehlsteile zu einem Betriebssystembefehl.

      Angenommen, Paul würde nun erst mit getimagesize() nachfragen, ob die gewünschte Datei vorhanden ist und ob es sich dabei um ein Bild handelt und erst einige Millisekunden später dann diese Datei öffnen, um sie zu lesen und umzuwandeln, dann könnte in der zwischenzeit schon ein anderer Prozess diese Datei gelöscht, ausgetauscht oder sie mit einem Text überschrieben haben.

      Die Fehlermeldung ist also hier kein Feind des Programmierers, sondern sein Freund.

      Leider haben die PHP-Leute es bisher versäumt, vernünftige Fehlernummern zurückzugeben, oder ich habe die Stelle nur noch nicht gefunden, an der die abgelegt werden.

      Man kann aber die Meldung selbst für die Standardausgabe für den aktiven Betrieb vermeiden, wenn man Warnungen ausschaltet bzw die Meldungen in ein Log umleitet. Das halte ich für besser, als sie durch ein @ zu unterdrücken.

      Dann kann man außerdem noch "track_errors" in der INI einschalten, was dafür sorgt, dass die Variable $php_errormsg von PHP zumindest mit einer textuellen Fehlermeldung gefüllt wird. Die kann man dann im Programm ggf. auch auswerten.

      Außerdem hat man im Fehlerfall auch noch die allgemeine Rückmeldung durch (=== false). Das programm weiß also, wann ein Fehler aufgetreten ist, nur noch nicht welcher. Das ist mMn zur Zeit nur über die Auswertung der textlichen Fehlermeldung herauszufinden. Die muss man dafür aber erst mal alle durchspielen, ich bisher auch keine Liste mit allen FehlerMELDUNGEN finden können...

      Da würde ich mich selber über einen Tipp freuen.

      Harzliche Grüße aus
      Sankt Andreasberg
      und Frohes Neues Jahr

      Tom

      --
      Nur selber lernen macht schlau