PHP Dateiformat nicht erkannt

Benutzer-2472

abgemeldet
1 Mai 2006
32.694
1.621
Morgen,

ich habe ein Problem mit der exif_imagetyp(), bzw. sie mit mir.

Eigentlich will ich damit bestimmte Bildtypen filtern und andere erlauben - klappt soweit auch, bis auf einen Sonderfall. Eine (gültige) jpeg Datei wird in die Funktion geworfen, bringt aber keinen Rückgabewert.

Auch ein Test mit getimagesize() bringt kein Ergebnis, die Datei lässt sich nicht klassifizieren.

Hat da jemand ne Idee woran es liegen könnte?
 
Bekommst Du bei getimagesize() gar nix zurück, order erhälst du evtl. ne Warning oder Notice?
php.net schrieb:
Fehler/Exceptions

Wenn ein Zugriff auf die mit filename angegebene Grafik nicht möglich ist oder es sich um keine valide Grafik handelt wird ein Fehler vom Typ E_WARNING generiert. Bei einem Lesefehler wird ein Fehler vom Typ E_NOTICE erzeugt.
 
Wie kommst du drauf, dass sie gültig is? Unterscheidet sie irgendwas von den anderen?

Entweder sie is tatsächlich "kaputt" (was das auch immer heißen soll) oder die Funktionen haben n Bug. Aber unwahrscheinlich, dass beide gleichzeitig einen Bug haben.

Wenn möglich, kannst du mir das File ja mal schicken.
 
Ich habe das gleiche Problem, allerdings unmittelbar nach dem Upload. Mal ist der MIME-Type unbekannt, das andere mal hat das Bild angeblich eine Größe von 0x0 px, sodass mein Uploadscript einen eigentlich "unberechtigten" Fehler wirft (meldet dem User dass Bilder mindestens 250px breit und hoch sein müssen, oder eben, dass es Bilder sein müssen).

Das Kuriose dabei ist, dass die Bilder aber von jedem Betrachter anstandslos angezeigt werden. Auch ein erneutes Speichern nutzt dabei nichts. Genauer eingrenzen konnte ich das bisher auch noch nicht, aber ich vermute dass es entweder mit dem Bildformat zusammenhängt, oder tatsächlich diese PHP-Funktionen ein Fehlerchen haben (weiterreichend jedoch die entsprechenden Systembibliotheken auf die PHP zurückgreift)

Ich weiß, ist keine Hilfe...wollt nur mitteilen, dass Du kein Einzelfall bist.

Gruß
 
Ich habe hier zu Hause eine Vista Lapi und einen FreeNas Server im Heimnetzwerk. Also ich letztens ein JPG von einem Design auf den Server geschoben habe, hat mir Windows einen Hinweis gezeigt, ob ich das wirklich machen will, die Bildinfos würden verloren gehen. Das wird wahrscheinlich hier auch der Fall sein.

Ist zumindest der Ansatz wo ich loslegen würde zu suchen, wie TheHacker schon sagt.
 
Bekommst Du bei getimagesize() gar nix zurück, order erhälst du evtl. ne Warning oder Notice?

Die Logik zuvor erspare ich mir mal, die passt - das Teil funktioniert nur bei sehr wenigen Bildern geht es eben absolut gar nicht und ich kann es nicht sinnvoll verarbeiten.

PHP:
$bildart=exif_imagetype($_FILES['userfile']['tmp_name']);
$test=getimagesize($_FILES['userfile']['tmp_name']);

var_dump($test);
var_dump($bildart);
bool(false)
bool(false)

Wie kommst du drauf, dass sie gültig is? Unterscheidet sie irgendwas von den anderen?

Entweder sie is tatsächlich "kaputt" (was das auch immer heißen soll) oder die Funktionen haben n Bug. Aber unwahrscheinlich, dass beide gleichzeitig einen Bug haben.

Wenn möglich, kannst du mir das File ja mal schicken.

Ich kann das Bild einwandfrei in verschiedenen Viewern ansehen, auch ein mehrfaches neues speichern (in verschiedenen Formaten) bringt immer wieder den Fehler auf den Bildschirm.

Irgendwo muss der Fehler liegen ;) - leider kann ich die Datei nicht zur Verfügung stellen, aber vielleicht finde ich ja noch eine bei der das auch nicht geht, welche harmlosen Inhalt hat ^^

Ich habe das gleiche Problem, allerdings unmittelbar nach dem Upload. Mal ist der MIME-Type unbekannt, das andere mal hat das Bild angeblich eine Größe von 0x0 px, sodass mein Uploadscript einen eigentlich "unberechtigten" Fehler wirft (meldet dem User dass Bilder mindestens 250px breit und hoch sein müssen, oder eben, dass es Bilder sein müssen).

Das Kuriose dabei ist, dass die Bilder aber von jedem Betrachter anstandslos angezeigt werden. Auch ein erneutes Speichern nutzt dabei nichts. Genauer eingrenzen konnte ich das bisher auch noch nicht, aber ich vermute dass es entweder mit dem Bildformat zusammenhängt, oder tatsächlich diese PHP-Funktionen ein Fehlerchen haben (weiterreichend jedoch die entsprechenden Systembibliotheken auf die PHP zurückgreift)

2 Punkte für dich - das Bildformat soll für den Upload getestet werden und den zweiten Absatz kann ich 1:1 bestätigen. Ansehen unter Paint, acdsee ... und co funktioniert ohne Probleme nur die Funktionen sagen immer "iss nicht".
 
Ich habe hier zu Hause eine Vista Lapi und einen FreeNas Server im Heimnetzwerk. Also ich letztens ein JPG von einem Design auf den Server geschoben habe, hat mir Windows einen Hinweis gezeigt, ob ich das wirklich machen will, die Bildinfos würden verloren gehen. Das wird wahrscheinlich hier auch der Fall sein.
Irrelevant hier.
Diese Meldung warnt dich vor dem Verlust der (versteckten) Alternativdateiströme.

Auf ext3&Co gibts solchen Schwachfug eh ned.
 
Ich hab eben die Sourcen überprüft:
getimagefile() und exif_imagetype() prüfen die Datei folgendermaßen:
JPG, wenn die ersten 3 Bytes der Datei 0xff, 0xd8, 0xff sind. Check das selber mal mitm Hexeditor.

Beide Funktionen nutzen die gemeinsame Funktion php_getimagetype(), is also egal, welche von beiden du nimmst.
 
Dann geht beim Auslesen der Maße was schief. Ich häng den Source mal in den Anhang. Zeile 471ff.

Zur Not musst du die Funktion nachcoden :-?
 

Anhänge

  • image.rar
    8 KB · Aufrufe: 12
Danke th,

ich versuche es aber erst einmal anders.

Laut Bugbibel wurde die Funktion mehrfach überarbeitet. Also neuste PHP Version auf den Server und dann schau ich nochmal.
 
Try ;)

Ich hab die Änderungen grade mal gedifft (Anhang).
Code:
[FONT=Lucida Console]theHacker@kubuntu:~$ diff php-5.2.9/ext/standard/image.c php6.0-201001202130/ext/standard/image.c > diff.txt[/FONT]
[FONT=Lucida Console]theHacker@kubuntu:~$ zip diff.zip diff.txt[/FONT]
Auf den ersten Blick: Icon-Support hinzugekommen, M:money:-Content-Type mit x- versehen *hrhr* :evil: und die unsigned-Typen zu signeds gemacht.

Wenn es an Letzterem gelegen hat, hast du Glück, sonst wird sich wohl nix ändern.

Halt uns aufm Laufenden.
 

Anhänge

  • diff.zip
    2,9 KB · Aufrufe: 2
Lesen die Funktionen eigentlich das ganze Bild? Es koennte doch sein dass die Bilder wenn sie mal geladen sind die Memory Limite ueberschreiten. Unwahrscheinlich, aber einen versuch wert :)

Ist das Bild denn besonders gross?
 
Nicht wirklich...ich hab das gleiche jedenfalls auch mit PHP5.3.0 & 6.0.0 :(

Jepp, nachdem der Hoster überzeugt werden konnte ( :evil: ), dass ein Update mal angebracht wäre bleibt es leider dabei, dass die Funktion nicht funktioniert.

Hat jemand eine sinnvolle Alternative, ggf. mit vorhandenen Funktionen aus PHP eine solide Lösung zu erarbeiten?
 
du könntest selbst die Magic Number am Anfang der Datei prüfen, das würde aber nicht sicherstellen, dass es wirklich eine Grafikdatei sein muss, es kann ja auch ein PHP-Script sein, zusammen mit der Restriktion, dass in dem Ordner kein PHP ausgeführt werden darf, aber vllt ausreichend.

Kannst du die Dateien mit den gdlib-Funktionen laden? Dann könnte man das korrekte Laden der Bilder als "Korrektheitsbeweis" nutzen.