Uplodfehler wenn Typ nicht JPG

aargau

Erfahrenes Mitglied
Ich habe ein kleines oder besser gesagt grösseres Problem. Bei meinem Upload Script kann ich problemlos Bilder des Typ JPG Hochladen und auch Verkleinern. Mit PNG Passiert da schon ein riesen Fehler. Er verkleinert das Bild zwar, leider wird es dann aber nur Schwaz ausgegeben. Nun sollte das Script eigentlich alle Dateizytpen ausser JPG Sperren. Wenn ich jedoch eine Text datei hocghlade bekomme ich Einige Fehler... Ich währe froh wenn mir jemand sagen könnte was ich am Script ändern muss damit es Problemlos Funktionirt und Bilder des Types JPG Hochgeladen werden können.

PHP:
<p align="center"><?php if(isset($_POST['send']) && $_POST['send'] == "ja")  
{ $uploaddir = 'img/upload/';  
if (move_uploaded_file($_FILES['picture1']['tmp_name'], $uploaddir . $_FILES['picture1']['name']))  
{  

print "1 Bild erfolgreich hochgeladen.  

\n"; }  
else  
{  
print "Kein Bild hochgeladen";  
}  
}  
?>
<?  
// Datei auf Grösse kontrollieren  

$maxsize = 1044000; // KB  
$maxsize = $maxsize * 1024; // Umwandlung in Byte  

if ($_FILES['picture1']['size'] > $maxsize)  
{  
header ("location: nav_black.php"); exit;  
}  

// Datei verschieben  



$dir = "img/userpic/";  

if ($_FILES['picture1']['size'] > "0")  
{  

$filename = $_FILES['picture1']['name'];  

move_uploaded_file ($picture, "$dir$filename");  
chmod ("$uploaddir$filename", 0777);  
}  

// Datei auf Typ kontrollieren und wenn nötig wieder löschen  

$fileinfos = getimagesize("$uploaddir$filename");  
$type = $fileinfos[2]; // 2 = JPG  

if ($type != 2)  
{  
}  

// Thumbnail erstellen  
//////////////////////  

// Anmerkungen:  
//  
// $dir = Pfad für das Verzeichnis, in dem sich das upgeloadete Bild befindet  
// $filename = dateiname.jpg  

// Größe des Bildes auslesen  

$size = getimagesize("$uploaddir$filename");  
$width = $size[0];  
$height = $size[1];  

// Breite des Thumbnails festlegen (Höhe wird automatisch angepasst)  

$width_tn = 500;  
$height_tn = intval($height * $width_tn / $width);  

// Bei GD < 2.0.1: ImageCreateTrueColor -> ImageCreate, ImageCopyResampled -> ImageCopyResized  

$picture = ImageCreateFromJPEG("$uploaddir$filename");  
$picture_tn = ImageCreateTrueColor($width_tn,$height_tn);  
ImageCopyResampled($picture_tn,$picture,0,0,0,0,$width_tn,$height_tn,$width,$height);  

// Endung "_tn" bei Dateiname hinzufügen, vor ".jgp"  

$filename = explode (".", $filename);  
$tn = ".";  

// Thumbnail in $dir mit angepasstem $filename speichern, JPG Qualität: 95  

ImageJPEG($picture_tn, $dir.$filename[0].$tn.$filename[1],95);
?>
<?
		$empfaenger ="admin@upload.volt.ch";
		$betreff ="UPLOAD";
		$from = "From: MV Upload <mail_schutz@isp.ch>";
		$ip = $_SERVER["REMOTE_ADDR"];
		$subject = "Upload auf Homepage";
		$body .= "Datum: ".date("d.m.Y, H:i:s")." Uhr\n";
		$body .= "IP: $ip\n";
		$body .= "";
		$body .= $filename['0'];
		$body .= "";
mail($empfaenger, $betreff, $body, $from);
?>
<? 
$filenamea = $filename['0'];  ;
?>
Fehlermeldungen beim Upload von einem anderen Format:
1 Bild erfolgreich hochgeladen.
Warning: Division by zero in /home.14/m/a/r/marcovol/www/upload.php on line 68

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error: in /home.14/m/a/r/marcovol/www/upload.php on line 72

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: 'img/upload/upload.php' is not a valid JPEG file in /home.14/m/a/r/marcovol/www/upload.php on line 72

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /home.14/m/a/r/marcovol/www/upload.php on line 73

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /home.14/m/a/r/marcovol/www/upload.php on line 74

Warning: imagejpeg(): supplied argument is not a valid Image resource in /home.14/m/a/r/marcovol/www/upload.php on line 83
 
Hallo!

Du prüfst erst ob eine Datei hochgeladen wurde..... aber dann verschiebst Du die Datei ohne vorher den Dateityp zu prüfen und gibts gleichzeigt (wenn die Datei erfolgreich verschoben wurde) per print() aus dass die Datei hochgeladen wurde.
Dass ist schonmal verkehrt..... denn wenn die Datei nicht dem gewünschtem Dateityp entpricht, musst Du sie manuell wieder löschen..... oder Du müllst Dir Deinen Webspace zu.

Du willst nur JPG erlauben?
Und warum fragst Du dann mit
PHP:
if ($type != 2)
ob es kein JPG ist und unternimmst bei Übereinstimmumg nichts?
Und vor allem..... warum versuchst Du die Datei, die (wenn ich es richtig überblicke) im grunde irgend ein Dateityp sein kann, dann auch noch mit imagecreatefromJPEG() zu bearbeiten?
Wie der Funktionsname schon vermuten lässt, gehören dort nur JPG-Dateien hin.

Wodurch die Fehlermeldungen kommen, kann ich nicht mit sicherheit sagen.
Aber ich vermute mal dass getimagesize() keine gültige Ressource enthält und somit versucht wird 0 durch 500 zu teilen (Divizion by Zero..... Zero = 0).
Arbeite mal mit error_reporting(E_ALL).

Irgendwie machst Du da ein paar grundlegende Fehler.
Schaue Dich mal ein wenig im Forum um, es gibt schon genug Beiträge die sich mit dem Upload von Bildern oder dem Upload im allgemeinen befassen.

Gruss Dr Dau

PS: und wenn Du Quelltext postest, dann bitte halbwegs anständig formatiert (Zeilen entsprechend einrücken).
 
Zurück