Bilder Upload Problem!

NgiseD

Mitglied
Hi!

habe mir ein kleines BilderUpload Skript bebastelt und leider kaum ne Ahnung von PHP, kenne mich eigentlich mehr in der ASP richtung aus und nun kann ich zwar die Dateien Uploaden dennoch wandelt mir mein Skript nicht alle Jpegs in kleine thumbnails um, das hat zur folge, dass ich nur die bilder in der originalgröße auf dem server habe.

hier mein quelltext
PHP:
<?
$add="upimg/$userfile_name"; // the path with the file name where the file will be stored, upload is the directory name. 
if(move_uploaded_file ($userfile, $add)){
echo "Der Upload war erfolgreich!";
chmod("$add",0777);

}else{echo "Fehler: Bitte Mail an philme@web.de";
exit;}

///////// Start the thumbnail generation//////////////

$tsrc="thimg/$userfile_name";   // Path where thumb nail image will be stored
//echo $tsrc;
if (!($userfile_type =="image/jpeg" OR $userfile_type=="image/gif")){echo "Es sind nur JPEGs und GIFs zum Upload erlaubt.";
exit;}
/////////////////////////////////////////////// Starting of GIF thumb nail creation///////////
if (@$userfile_type=="image/gif")
{
$im=ImageCreateFromGIF($add);
$width=ImageSx($im);              // Original picture width is stored
$height=ImageSy($im);                  // Original picture height is stored
if ($width > $height)
{
$n_width = 130;
}
if ($width < $height)
{
$n_width = 100;
}
$n_h=$height/($width/$n_width);
$newimage=imagecreatetruecolor($n_width,$n_h);
imagecopyresampled($newimage,$im,0,0,0,0,$n_width,$n_h,$width,$height);
if (function_exists("imagegif")) {
Header("Content-type: image/gif");
ImageGIF($newimage,$tsrc);
}
elseif (function_exists("imagejpeg")) {
Header("Content-type: image/jpeg");
ImageJPEG($newimage,$tsrc);
}
chmod("$tsrc",0777);
}////////// end of gif file thumb nail creation//////////

////////////// starting of JPG thumb nail creation//////////
if($userfile_type=="image/jpeg"){
$im=ImageCreateFromJPEG($add); 
$width=ImageSx($im);              // Original picture width is stored
$height=ImageSy($im);             // Original picture height is stored
if ($width > $height)
{
$n_width = 130;
}
if ($width < $height)
{
$n_width = 100;
}
$n_h=$height/($width/$n_width);
$newimage=imagecreatetruecolor($n_width,$n_h);                 
imagecopyresampled($newimage,$im,0,0,0,0,$n_width,$n_h,$width,$height);
ImageJpeg($newimage,$tsrc);
chmod("$tsrc",0777);
}
////////////////  End of JPG thumb nail creation //////////
?>

Woran kann das liegen?

Danke im Voraus!!

mfg, ngised
 
if (!($userfile_type =="image/jpeg"
...lass dir mal mit PHP den MIME-Type des JPGs ausgeben ..... für JPG gibt es diverse MIME-Typen, du wirst wahrscheinlich festellen, dass dashochgeladene Bild einen anderen hat.

Wenn du nicht alle einzeln abfragen willst, verwende die Funktion [phpf]getimagesize[/phpf] ... damit kannst du eindeutig ermitteln, ob es ein JPG ist ... unabhängig vom MIME-Typ.
 
Danke für die Antwort, aber was ist MIME und warum beeinflusst es die umwandlung?
Was muss ich denn ändern? welche werte von getimage() helfen mir dabei?

THX
 
Hallo!

Nun, es gibt jpeg und es gibt jpeg, dass heisst es gibt mhrere jpeg Formate.
Entweder gibst Du alle MIME-Typen an, damit dir nicht dass passiert was dir jetzt passiert ist.
Oder Du wählst den von Sven genannten Weg, das Dateiformat mittels getimagesize() auszulesen und zu prüfen ob es zu den von dir erlaubten Formaten gehört.
Hier mal ein kleines Beispiel wie so eine Abfrage/Überprüfung des Dateiformats für JPG und GIF aussehen könnte:
PHP:
<?php
$file = "testbild.jpg";
$type = getimagesize($file);
 
if(($type[2] == 1) OR ($type[2] == 2)) {
	 if($type[2] == 1) { 
		 echo "Das Bild hat das Dateiformat GIF.";
	 }
	 if($type[2] == 2) {
		 echo "Das Bild hat das Dateiformat JPG.";
	 }
} else {
	 echo "Das Bild ist kein gültiges Dateiformat!";
}
?>
Nicht unebdingt schön, aber als Demo sollte es langen. ;)

Gruss Dr Dau
 
aber alle dateien mit der endung .jpg .jpeg. .JPG .JPEG sind doch jpegs oder nicht?
warum macht er dass denn so nicht richtig? kann doch nicht sein? für die gifs habe ich das ja auch programmiert! folglich müsste es doch mit image/jpeg genügen? oder welche mimes muss ich noch einfügen?

THX nochmals
 
NgiseD hat gesagt.:
aber alle dateien mit der endung .jpg .jpeg. .JPG .JPEG sind doch jpegs oder nicht?
Nein, eben nicht.
Neben image/jpeg gibt es z.b. auch image/pjpeg (gut möglich dass es noch mehr gibt).
Vermutlich hängt es davon ab, mit welchem Program die Bilder erstellt wurden.
Auch könnten die Einstellungen des Webservers eine Rolle spielen.

Bei GIF's ist mir persönlich diese "Phänomen" noch nicht untergekommen..... bei JPG's aber schon öffter.

Und achte bitte auf korrekte Gross-/Kleinschreibung.
 
habe meinen quelltext geändert:

PHP:
<?
$add="upimg/$userfile_name"; // the path with the file name where the file will be stored, upload is the directory name. 
if(move_uploaded_file ($userfile, $add)){
echo "Der Upload war erfolgreich!";
chmod("$add",0777);

}else{echo "Fehler: Bitte Mail an philme@web.de";
exit;}

///////// Start the thumbnail generation//////////////

$tsrc="thimg/$userfile_name";   // Path where thumb nail image will be stored
$quelle="upimg/$userfile_name";
$type = getimagesize($quelle);
//echo $tsrc;
//echo $type[2];
if (!(($type[2] == 1) OR ($type[2] == 2))){echo "Es sind nur JPEGs und GIFs zum Upload erlaubt.";
exit;}
/////////////////////////////////////////////// Starting of GIF thumb nail creation///////////
if($type[2] == 1)
{
$im=ImageCreateFromGIF($add);
$width=ImageSx($im);              // Original picture width is stored
$height=ImageSy($im);                  // Original picture height is stored
if ($width > $height)
{
$n_width = 130;
}
if ($width < $height)
{
$n_width = 100;
}
$n_h=$height/($width/$n_width);
$newimage=imagecreatetruecolor($n_width,$n_h);
imagecopyresampled($newimage,$im,0,0,0,0,$n_width,$n_h,$width,$height);
if (function_exists("imagegif")) {
Header("Content-type: image/gif");
ImageGIF($newimage,$tsrc);
}
elseif (function_exists("imagejpeg")) {
Header("Content-type: image/jpeg");
ImageJPEG($newimage,$tsrc);
}
chmod("$tsrc",0777);
}////////// end of gif file thumb nail creation//////////

////////////// starting of JPG thumb nail creation//////////
if($type[2] == 2){
$im=ImageCreateFromJPEG($add); 
$width=ImageSx($im);              // Original picture width is stored
$height=ImageSy($im);             // Original picture height is stored
if ($width > $height)
{
$n_width = 130;
}
if ($width < $height)
{
$n_width = 100;
}
$n_h=$height/($width/$n_width);
$newimage=imagecreatetruecolor($n_width,$n_h);                 
imagecopyresampled($newimage,$im,0,0,0,0,$n_width,$n_h,$width,$height);
ImageJpeg($newimage,$tsrc);
chmod("$tsrc",0777);
}
////////////////  End of JPG thumb nail creation //////////

?>

der upload aber immer noch nicht mit allen Bildern!
habe immer noch bei den selben bildern ein problem

bild

woran kann das liegen


THX
 
*grrrrr*
getimagesize() erkennt den Grafik-Typ, aber nicht den MIME-Type.
Du überprüfst aber weiterhin den MIME-Type...... und da fallen einige Grafiken halt bei durch.
Entweder musst Du auf alle möglichen MIME-Typen überprüfen, oder halt universal auf den Grafik-Typ.

[edit]
Ich würde jetzt spontan sagen dass Du beim Upload auch den MIME-Type prüfst und dabei nur die Bilder hochgeladen werden, die dem richtigem MIME-Type entsprechen.
[/edit]

[edit2]
Ich bin mir jetzt nicht wirklich sicher, aber müsste
PHP:
if (!(($type[2] == 1) OR ($type[2] == 2)))
nicht eher
PHP:
if (!(($type[2] == 1) OR !($type[2] == 2)))
heissen?!
Ansonsten würde ich die Reihenfolge mal tauschen und dann nur mit JPG's versuchen.
[/edit2]

[edit3]
Hmm, nee, müsste doch so richtig sein.
[/edit3]
 
Zuletzt bearbeitet:
habe jetzt auch vor dem upload eine kontrolle eingebaut! die fotos erkennt er als jpg ist aber nicht in der lage sie umzuwandeln? ich frage mich mitlerweile ob es dabei wohl eine begrenzung der auflösung gibt? weil ab einer größe von ca 2000x2400 streikt der einfach! ich denke es liegt nicht an der dateigröße egal ob 2mb oder drei hochladen tut er die! aber ein bild mit einer auflösung von 1600x1200 mit 1,6mb nimmt er ein bild mit einer höheren auflösung und gleicher größe nicht?

kann der fehler bei der berechnung des größenverhältnisses aufgetreten sein?

THX
 
Zurück