Worauf muss ich achten beim hochladen von bildern

matze1983

Erfahrenes Mitglied
Hallo,
soweit so gut, mein Script funktioniert. Ich kann Bilder hochladen. Jedoch geht das nur mit GIF's...wenn ich bei image statt gif, jpeg verwende funktioniert es nicht. Ich habe mich schon im Forum umgeschaut....da hieß es, dass man auf die MIME-Types achten soll. Nun ich habe mich aber daran gehalten....gibt es denn noch andere Ursachen dafür?
 
Zuletzt bearbeitet:
also ich habe jpeg...so wie es der MIME-Type definiert geschrieben.

PHP:
 if($type!='image/jpeg')
der rest funktioniert ja soweit, nur hier haut er mir immer eine Fehlermeldung raus, das error, dass es sich nicht um dieses Format handelt.
 
Nutzt du Windows? Weil wenn du Linux nutzt:

jpg != JPG
jpeg != jpeg

Und guck auch mal, ob die Endung vielleicht .jpg und nich .jpeg ist
 
ne ich benutze windows.

aber ich weis woran es liegt..ich habe via echo $type auschreiben lassen. Es muss also statt jpg oder jepg -pjepg heißen, warum auch immer,..weil im mimetype steht ja jpeg, und dann müssten ja alle jpg formate funktionieren. das versteh ich nicht.:confused:
Aber nun stellt sich mir die Frage, ob jetzt jeder seine jpg bilder hochladen kann. wie kann man das jetzt verbessern? sollte man ein array schreiben, welches alle beinhaltet, also jpg, jepeg, pjpeg etc. oder sollte man via oder es so schreiben, dass halt bmp, gif, tif usw. ausgeschlossen würden...was wäre jetzt der bessere weg?
 
Zuletzt bearbeitet:
Der Content MimeType wird beim normalen Hochladen via HTTP vom Browser mitgesendet, und da vor allem Microsoft gerne Standards umgeht (oder auch nicht), kommt es zu der Interferenz, dass womöglich zB ein Mozilla Browser image/jpeg mitsendet, der MSIE jedoch image/pjpeg. Interessanter ist jedoch der Fakt, dass diese Angaben nie 100%ig sicher sind. Die Garantie, Bilder vom Typ JPEG, GIF oder PNG zu verarbeiten, kann dateierweiterungsunabhängig erlangt werden, indem der Content MimeType ermittelt wird. Wie das geht ist kurz erklärt aber leider etwas umständlich zu lösen in PHP - Entweder über die entsprechende PECL (oder war es PEAR?) Erweiterung oder über einen Systembefehl (Beispiel gilt nur für Linux Systeme):
PHP:
list( $mime ) = explode( ';', trim( exec( 'file -ib ' . escapeshellarg( $path ) ) ) );

Hab nochmal schnell die PHP Doku konsultiert: [phpf]fileinfo[/phpf] und [phpf]mime_content_type[/phpf] sind wohl doch die günstigeren Wege für den Hausgebrauch ;)

Anhand der Ergebnisse könntest du die hochgeladenen Daten im temporären Verzeichnis verwerten und uniform auf zB "image/jpeg" und so weiter überprüfen.
 
Hallo!

Wie kommst Du eigentlich auf jepeg?
Wo auch immer Du diese Schreibweise her hast, sie ist falsch.
Siehe dazu auch die Trefferquote bei Google:
image/jepeg 9 Treffer.
image/jpeg ungefähr 2.790.000 Treffer.

Zum Thema jpeg vs. pjpeg:
Klare Aussagen scheint es hier nicht zu geben.
Die einen sagen dass es am Grafikprogramm liegt, die anderen sagen das es am Browser liegt.
Daher mein Rat: prüfe ob das Bild vom Typ image/jpeg oder image/pjpeg ist.
Du könntest natürlich auch mit getimagesize() prüfen ob das Bild vom Typ "2" (JPG) ist:
PHP:
$bild = "bild.jpeg";
$size = getimagesize($bild);
if($size[2] == 2) {
     echo $bild." ist ein ".$size[2];
} else {
    echo $bild." ist <u>kein</u> JPG, sondern ein ".$size[2];
}
Gruss Dr Dau
 
Zusätzlich ist es noch wichtig, darauf zu achten, dass die Datei mit der richtigen Dateiendung gespeichert wird. Denn auf die vom Client gesendeten Daten ist kein Verlass und so kann ein vermeintlich als Grafik getarntes PHP-Skript auf deinen Webserver gespeichert und dann auch ausgeführt werden.
 
Vielen Dank für die vielen Antworten.
Ich werde mal schauen, was und wie ich es nun realisiere, dann stell ich das hier noch rein.
Bis dahin erstmal danke!
Mathias
 
Zurück