Grafikformat einer hochgeladenen Datei wird nicht erkannt

Templorials

Erfahrenes Mitglied
Hi.

Habe ein Bilduploadscript was bei Hochladen eines Bildes ein kleines Vorschaubild und ein großes Bild am Server speichert. Die Pixel-Größen werden automatisch angepasst.

Hier mal ein Codeausschnitt:
PHP:
$pic_tempname = $_FILES['file']['tmp_name']; 
$pic_name = $_FILES['file']['name']; 
$pic_type = $_FILES['file']['type']; 
switch ($pic_type) {
case "image/gif": $pic = imagecreatefromgif($pic_tempname); break;
case "image/jpg": case "image/jpeg":   $pic = imagecreatefromjpeg($pic_tempname); break;
case "image/png":  $pic = imagecreatefrompng($pic_tempname); break;
default: $type_error = 1; break;
}
if($type_error != 1) {
$x = imagesx($pic);
$y = imagesy($pic);
$max_x = 145; $max_y = 120;
$max_x2 = 480; $max_y2 = 480;
if (($max_x/$max_y) < ($x/$y)) {
$save = imagecreatetruecolor($x/($x/$max_x), $y/($x/$max_x));
}
else {
$save = imagecreatetruecolor($x/($y/$max_y), $y/($y/$max_y));
}
if (($max_x2/$max_y2) < ($x/$y)) {
$save2 = imagecreatetruecolor($x/($x/$max_x2), $y/($x/$max_x2));
}
else {
$save2 = imagecreatetruecolor($x/($y/$max_y2), $y/($y/$max_y2));
}
imagecopyresized($save, $pic, 0, 0, 0, 0, imagesx($save), imagesy($save), $x, $y);
imagecopyresized($save2, $pic, 0, 0, 0, 0, imagesx($save2), imagesy($save2), $x, $y);
$string_pool = "qwertzupasdfghkyxcvbnm";
$string_pool .= "POIUZTREWQLKJHGFDSAMNBVCXY";
$string_pool .= "5172038469";
srand ((double)microtime()*1000000);
for($i=0;$i<=8;$i++) {
$random .= substr($string_pool,(rand()%(strlen ($string_pool))), 1);
}
switch ($pic_type) {
case "image/gif": $path_img = "thumb_".$rid."_".$_SESSION[id]."_".$random.".gif"; imagegif($save, "http://www.tutorials.de/forum/images/thumbs/".$path_img); $path_img2 = $rid."_".$_SESSION[id]."_".$random.".gif"; imagegif($save2, "http://www.tutorials.de/forum/images/thumbs/".$path_img2); break;
case "image/jpg": case "image/jpeg": $path_img = "thumb_".$rid."_".$_SESSION[id]."_".$random.".jpg"; imagejpeg($save, "http://www.tutorials.de/forum/images/thumbs/".$path_img); $path_img2 = $rid."_".$_SESSION[id]."_".$random.".jpg"; imagejpeg($save2, "http://www.tutorials.de/forum/images/thumbs/".$path_img2); break;
case "image/png": $path_img = "thumb_".$rid."_".$_SESSION[id]."_".$random.".png"; imagepng($save, "http://www.tutorials.de/forum/images/thumbs/".$path_img); $path_img2 = $rid."_".$_SESSION[id]."_".$random.".png"; imagepng($save2, "http://www.tutorials.de/forum/images/thumbs/".$path_img2); break;
}
$mysql_ins_img = mysql_query("INSERT INTO images (rid, uid, thumb, time) VALUES ('$rid', '".$_SESSION[id]."', '$path_img2', '".time()."');");
imagedestroy($pic);
imagedestroy($save);
imagedestroy($save2);
$upl_true = "<br><br>Erfolgreich hochgeladen. Ihr Bild wird so bald wie m&ouml;glich von uns &uuml;berpr&uuml;ft.";
}
else {
$error_format = '#990000';
}

Ja ist net grad schön gemacht, aber es funktioniert.... Im Firefox ganz normal. Jedoch gehts im IE einfach net.. und zwar nur JPEGs nicht.. GIFs gehn auch im IE.. bei PNG weis ich jetz garnicht..

Wieso?

mfg
 
Prüfe lieber mit den PHP-eigenen Mitteln, ob es sich bei der hochgeladenen Datei um eine verarbeitbare Grafikdatei handelt. So könntest du etwa die getimagesize()- oder exif_imagetype()-Funktion einsetzen, um den Grafiktyp zu ermitteln.

Ich habe übrigens zu einem ähnlichen Thema eine Funktion veröffentlicht, die für dich interessant sein könnte.
 
Ich hatte so ein Problem mal, weil die beiden Browser jpeg und pjpeg (progressive JPEG) nicht gleich behandeln, das kannste vielleicht auch mal testen...

Im Zweifelsfall einfach hinschreiben, dass man erwachsen werden soll und einen anderen Browser wie den IE benutzen soll :-)
 
maexle1894 hat gesagt.:
Im Zweifelsfall einfach hinschreiben, dass man erwachsen werden soll und einen anderen Browser wie den IE benutzen soll :-)

...oder im Zweifelsfall erwachsen sein und die Forensuche benutzen...diese Problematik wurde bereits dutzende male erörtert, das letzte mal dürfte keine 3 Tage her sein ;)
 
Zurück