Upload image works fine unless image is edited first

Upload image works fine unless image is edited first

am 05.09.2007 16:33:07 von xx75vulcan

Hi,

I've got a PHP Upload Form that works great, unless that is, the image
your uploading has been modified through a photo editing software.

Example: if I upload the image straight from a camera or other, it
uploads fine. However, If I want to rotate the image, or resize it
with photoshop or simmilar, making sure to save it again as a jpg, the
PHP upload won't upload the image.

It's like editing the image somehow changes it's mime type or
something?!
Any ideas?
Here's my upload script:

if($_POST["upload"]) //Check to see if submit was clicked
{
// Get the details of "imagefile"
$filename = $_FILES['imagefile']['name'];
$temporary_name = $_FILES['imagefile']['tmp_name'];
$mimetype = $_FILES['imagefile']['type'];
$filesize = $_FILES['imagefile']['size'];

//Open the image using the imagecreatefrom..() command based on the
MIME type.
switch($mimetype) {
case "image/jpg":
case "image/jpeg":
case "image/pjpeg":
$i = imagecreatefromjpeg($temporary_name);
break;
case "image/gif":
$i = imagecreatefromgif($temporary_name);
break;
case "image/png":
$i = imagecreatefrompng($temporary_name);
break;
}

//Delete the uploaded file
unlink($temporary_name);

//Specify the size of the thumbnail
$dest_x = 350;
$dest_y = 350;

//Is the original bigger than the thumbnail dimensions?
if (imagesx($i) > $dest_x or imagesy($i) > $dest_y) {
//Is the width of the original bigger than the height?
if (imagesx($i) >= imagesy($i)) {
$thumb_x = $dest_x;
$thumb_y = imagesy($i)*($dest_x/imagesx($i));
} else {
$thumb_x = imagesx($i)*($dest_y/imagesy($i));
$thumb_y = $dest_y;
}
} else {
//Using the original dimensions
$thumb_x = imagesx($i);
$thumb_y = imagesy($i);
}

//Generate a new image at the size of the thumbnail
$thumb = imagecreatetruecolor($thumb_x,$thumb_y);

//Copy the original image data to it using resampling
imagecopyresampled($thumb, $i ,0, 0, 0, 0, $thumb_x, $thumb_y,
imagesx($i), imagesy($i));

//Save the thumbnail
imagejpeg($thumb, "../images/$filename", 80);

//Display FileName
Print "Value for Image field: $filename";
$added =true;
}
?>







Re: Upload image works fine unless image is edited first

am 05.09.2007 17:06:59 von luiheidsgoeroe

On Wed, 05 Sep 2007 16:33:07 +0200, xx75vulcan =

wrote:

> Hi,
>
> I've got a PHP Upload Form that works great, unless that is, the image=

> your uploading has been modified through a photo editing software.
>
> Example: if I upload the image straight from a camera or other, it
> uploads fine. However, If I want to rotate the image, or resize it
> with photoshop or simmilar, making sure to save it again as a jpg, the=

> PHP upload won't upload the image.
>
> It's like editing the image somehow changes it's mime type or
> something?!
> Any ideas?
> Here's my upload script:
>
> > if($_POST["upload"]) //Check to see if submit was clicked
> {
> // Get the details of "imagefile"
> $filename =3D $_FILES['imagefile']['name'];
> $temporary_name =3D $_FILES['imagefile']['tmp_name'];
> $mimetype =3D $_FILES['imagefile']['type'];

Never trust mimetype. Use something like getimagesize() to determine =

wether it is, and if so get the type of image.

> $filesize =3D $_FILES['imagefile']['size'];
>
> //Open the image using the imagecreatefrom..() command based on the
> MIME type.
> switch($mimetype) {
> case "image/jpg":
> case "image/jpeg":
> case "image/pjpeg":
> $i =3D imagecreatefromjpeg($temporary_name);
> break;
> case "image/gif":
> $i =3D imagecreatefromgif($temporary_name);
> break;
> case "image/png":
> $i =3D imagecreatefrompng($temporary_name);
> break;
=

Add:

default:
echo $mimetype.' is not a supported image';
exit;

> }

I would guess here is where it breaks, due to an unforseen mimetype. Do =
a =

var_dump($i);exit(); here... Probably it isn't set.

> //Delete the uploaded file
> unlink($temporary_name);
>
> //Specify the size of the thumbnail
> $dest_x =3D 350;
> $dest_y =3D 350;
>
> //Is the original bigger than the thumbnail dimensions?
> if (imagesx($i) > $dest_x or imagesy($i) > $dest_y) {
> //Is the width of the original bigger than the height?
> if (imagesx($i) >=3D imagesy($i)) {
> $thumb_x =3D $dest_x;
> $thumb_y =3D imagesy($i)*($dest_x/imagesx($i));
> } else {
> $thumb_x =3D imagesx($i)*($dest_y/imagesy($i));
> $thumb_y =3D $dest_y;
> }
> } else {
> //Using the original dimensions
> $thumb_x =3D imagesx($i);
> $thumb_y =3D imagesy($i);
> }
>
> //Generate a new image at the size of the thumbnail
> $thumb =3D imagecreatetruecolor($thumb_x,$thumb_y);
>
> //Copy the original image data to it using resampling
> imagecopyresampled($thumb, $i ,0, 0, 0, 0, $thumb_x, $thumb_y,
> imagesx($i), imagesy($i));
>
> //Save the thumbnail
> imagejpeg($thumb, "../images/$filename", 80);
>
> //Display FileName
> Print "Value for Image field: $filename";
> $added =3Dtrue;
> }
> ?>


So, have you enabled error_reporting/display_errors? Do you know where t=
he =

code fails? Try to determine exactly where everyting goes wrong.

-- =

Rik Wasmus

Re: Upload image works fine unless image is edited first

am 05.09.2007 17:14:48 von Erwin Moller

xx75vulcan wrote:
> Hi,
>
> I've got a PHP Upload Form that works great, unless that is, the image
> your uploading has been modified through a photo editing software.
>
> Example: if I upload the image straight from a camera or other, it
> uploads fine. However, If I want to rotate the image, or resize it
> with photoshop or simmilar, making sure to save it again as a jpg, the
> PHP upload won't upload the image.
>
> It's like editing the image somehow changes it's mime type or
> something?!

Hi Vulcan,

Maybe.

> Any ideas?

I ALWAYS start debugging such issues with:

echo "

";
print_r($_FILES);
echo "
";
exit;

Then compare the output of your uneditted and editted version.
Do you see any differences?

That will probably give you a hint.


And do NOT rely too much on mimetype.
from php.net:

$_FILES['userfile']['type']
The mime type of the file, if the browser provided this
information. An example would be "image/gif". This mime type is however
not checked on the PHP side and therefore don't take its value for granted.

Hope that helps.

Regards,
Erwin Moller

> Here's my upload script:
>
> > if($_POST["upload"]) //Check to see if submit was clicked
> {
> // Get the details of "imagefile"
> $filename = $_FILES['imagefile']['name'];
> $temporary_name = $_FILES['imagefile']['tmp_name'];
> $mimetype = $_FILES['imagefile']['type'];
> $filesize = $_FILES['imagefile']['size'];
>
> //Open the image using the imagecreatefrom..() command based on the
> MIME type.
> switch($mimetype) {
> case "image/jpg":
> case "image/jpeg":
> case "image/pjpeg":
> $i = imagecreatefromjpeg($temporary_name);
> break;
> case "image/gif":
> $i = imagecreatefromgif($temporary_name);
> break;
> case "image/png":
> $i = imagecreatefrompng($temporary_name);
> break;
> }
>
> //Delete the uploaded file
> unlink($temporary_name);
>
> //Specify the size of the thumbnail
> $dest_x = 350;
> $dest_y = 350;
>
> //Is the original bigger than the thumbnail dimensions?
> if (imagesx($i) > $dest_x or imagesy($i) > $dest_y) {
> //Is the width of the original bigger than the height?
> if (imagesx($i) >= imagesy($i)) {
> $thumb_x = $dest_x;
> $thumb_y = imagesy($i)*($dest_x/imagesx($i));
> } else {
> $thumb_x = imagesx($i)*($dest_y/imagesy($i));
> $thumb_y = $dest_y;
> }
> } else {
> //Using the original dimensions
> $thumb_x = imagesx($i);
> $thumb_y = imagesy($i);
> }
>
> //Generate a new image at the size of the thumbnail
> $thumb = imagecreatetruecolor($thumb_x,$thumb_y);
>
> //Copy the original image data to it using resampling
> imagecopyresampled($thumb, $i ,0, 0, 0, 0, $thumb_x, $thumb_y,
> imagesx($i), imagesy($i));
>
> //Save the thumbnail
> imagejpeg($thumb, "../images/$filename", 80);
>
> //Display FileName
> Print "Value for Image field: $filename";
> $added =true;
> }
> ?>
>
>
>

>
>
>
>

>
>

Re: Upload image works fine unless image is edited first

am 05.09.2007 17:50:25 von xx75vulcan

Thanks Erwin, I feel I'm a little closer.

Deployed your trick, and below is what I get for edited files:

Array
(
[imagefile] => Array
(
[name] => DSC00064.JPG
[type] =>
[tmp_name] =>
[error] => 2
[size] => 0
)

)

This is what I get for un-edited files:

Array
(
[imagefile] => Array
(
[name] => 2_site_top.jpg
[type] => image/jpeg
[tmp_name] => C:\WINDOWS\TEMP\php59.tmp
[error] => 0
[size] => 32448
)

)


On Sep 5, 10:14 am, Erwin Moller
wrote:
> xx75vulcan wrote:
> > Hi,
>
> > I've got a PHP Upload Form that works great, unless that is, the image
> > your uploading has been modified through a photo editing software.
>
> > Example: if I upload the image straight from a camera or other, it
> > uploads fine. However, If I want to rotate the image, or resize it
> > with photoshop or simmilar, making sure to save it again as a jpg, the
> > PHP upload won't upload the image.
>
> > It's like editing the image somehow changes it's mime type or
> > something?!
>
> Hi Vulcan,
>
> Maybe.
>
> > Any ideas?
>
> I ALWAYS start debugging such issues with:
>
> echo "

";
> print_r($_FILES);
> echo "
";
> exit;
>
> Then compare the output of your uneditted and editted version.
> Do you see any differences?
>
> That will probably give you a hint.
>
> And do NOT rely too much on mimetype.
> from php.net:
>
> $_FILES['userfile']['type']
> The mime type of the file, if the browser provided this
> information. An example would be "image/gif". This mime type is however
> not checked on the PHP side and therefore don't take its value for granted.
>
> Hope that helps.
>
> Regards,
> Erwin Moller
>
> > Here's my upload script:
>
> > > > if($_POST["upload"]) //Check to see if submit was clicked
> > {
> > // Get the details of "imagefile"
> > $filename = $_FILES['imagefile']['name'];
> > $temporary_name = $_FILES['imagefile']['tmp_name'];
> > $mimetype = $_FILES['imagefile']['type'];
> > $filesize = $_FILES['imagefile']['size'];
>
> > //Open the image using the imagecreatefrom..() command based on the
> > MIME type.
> > switch($mimetype) {
> > case "image/jpg":
> > case "image/jpeg":
> > case "image/pjpeg":
> > $i = imagecreatefromjpeg($temporary_name);
> > break;
> > case "image/gif":
> > $i = imagecreatefromgif($temporary_name);
> > break;
> > case "image/png":
> > $i = imagecreatefrompng($temporary_name);
> > break;
> > }
>
> > //Delete the uploaded file
> > unlink($temporary_name);
>
> > //Specify the size of the thumbnail
> > $dest_x = 350;
> > $dest_y = 350;
>
> > //Is the original bigger than the thumbnail dimensions?
> > if (imagesx($i) > $dest_x or imagesy($i) > $dest_y) {
> > //Is the width of the original bigger than the height?
> > if (imagesx($i) >= imagesy($i)) {
> > $thumb_x = $dest_x;
> > $thumb_y = imagesy($i)*($dest_x/imagesx($i));
> > } else {
> > $thumb_x = imagesx($i)*($dest_y/imagesy($i));
> > $thumb_y = $dest_y;
> > }
> > } else {
> > //Using the original dimensions
> > $thumb_x = imagesx($i);
> > $thumb_y = imagesy($i);
> > }
>
> > //Generate a new image at the size of the thumbnail
> > $thumb = imagecreatetruecolor($thumb_x,$thumb_y);
>
> > //Copy the original image data to it using resampling
> > imagecopyresampled($thumb, $i ,0, 0, 0, 0, $thumb_x, $thumb_y,
> > imagesx($i), imagesy($i));
>
> > //Save the thumbnail
> > imagejpeg($thumb, "../images/$filename", 80);
>
> > //Display FileName
> > Print "Value for Image field: $filename";
> > $added =true;
> > }
> > ?>
>
> >
> >

> >
> >
> >
> >

> >

Re: Upload image works fine unless image is edited first

am 05.09.2007 18:00:32 von xx75vulcan

Ok I feel like a dope!

I didn't realize that editing a picture, even simply rotating it could
increase it's file size.
Upped the upload_max_filesize in php.ini and the hidden form field
max_file_size value and it works great.

Thanks a million for that neat debugging trick!

Chris


On Sep 5, 10:50 am, xx75vulcan wrote:
> Thanks Erwin, I feel I'm a little closer.
>
> Deployed your trick, and below is what I get for edited files:
>
> Array
> (
> [imagefile] => Array
> (
> [name] => DSC00064.JPG
> [type] =>
> [tmp_name] =>
> [error] => 2
> [size] => 0
> )
>
> )
>
> This is what I get for un-edited files:
>
> Array
> (
> [imagefile] => Array
> (
> [name] => 2_site_top.jpg
> [type] => image/jpeg
> [tmp_name] => C:\WINDOWS\TEMP\php59.tmp
> [error] => 0
> [size] => 32448
> )
>
> )
>
> On Sep 5, 10:14 am, Erwin Moller
>
> wrote:
> > xx75vulcan wrote:
> > > Hi,
>
> > > I've got a PHP Upload Form that works great, unless that is, the image
> > > your uploading has been modified through a photo editing software.
>
> > > Example: if I upload the image straight from a camera or other, it
> > > uploads fine. However, If I want to rotate the image, or resize it
> > > with photoshop or simmilar, making sure to save it again as a jpg, the
> > > PHP upload won't upload the image.
>
> > > It's like editing the image somehow changes it's mime type or
> > > something?!
>
> > Hi Vulcan,
>
> > Maybe.
>
> > > Any ideas?
>
> > I ALWAYS start debugging such issues with:
>
> > echo "

";
> > print_r($_FILES);
> > echo "
";
> > exit;
>
> > Then compare the output of your uneditted and editted version.
> > Do you see any differences?
>
> > That will probably give you a hint.
>
> > And do NOT rely too much on mimetype.
> > from php.net:
>
> > $_FILES['userfile']['type']
> > The mime type of the file, if the browser provided this
> > information. An example would be "image/gif". This mime type is however
> > not checked on the PHP side and therefore don't take its value for granted.
>
> > Hope that helps.
>
> > Regards,
> > Erwin Moller
>
> > > Here's my upload script:
>
> > > > > > if($_POST["upload"]) //Check to see if submit was clicked
> > > {
> > > // Get the details of "imagefile"
> > > $filename = $_FILES['imagefile']['name'];
> > > $temporary_name = $_FILES['imagefile']['tmp_name'];
> > > $mimetype = $_FILES['imagefile']['type'];
> > > $filesize = $_FILES['imagefile']['size'];
>
> > > //Open the image using the imagecreatefrom..() command based on the
> > > MIME type.
> > > switch($mimetype) {
> > > case "image/jpg":
> > > case "image/jpeg":
> > > case "image/pjpeg":
> > > $i = imagecreatefromjpeg($temporary_name);
> > > break;
> > > case "image/gif":
> > > $i = imagecreatefromgif($temporary_name);
> > > break;
> > > case "image/png":
> > > $i = imagecreatefrompng($temporary_name);
> > > break;
> > > }
>
> > > //Delete the uploaded file
> > > unlink($temporary_name);
>
> > > //Specify the size of the thumbnail
> > > $dest_x = 350;
> > > $dest_y = 350;
>
> > > //Is the original bigger than the thumbnail dimensions?
> > > if (imagesx($i) > $dest_x or imagesy($i) > $dest_y) {
> > > //Is the width of the original bigger than the height?
> > > if (imagesx($i) >= imagesy($i)) {
> > > $thumb_x = $dest_x;
> > > $thumb_y = imagesy($i)*($dest_x/imagesx($i));
> > > } else {
> > > $thumb_x = imagesx($i)*($dest_y/imagesy($i));
> > > $thumb_y = $dest_y;
> > > }
> > > } else {
> > > //Using the original dimensions
> > > $thumb_x = imagesx($i);
> > > $thumb_y = imagesy($i);
> > > }
>
> > > //Generate a new image at the size of the thumbnail
> > > $thumb = imagecreatetruecolor($thumb_x,$thumb_y);
>
> > > //Copy the original image data to it using resampling
> > > imagecopyresampled($thumb, $i ,0, 0, 0, 0, $thumb_x, $thumb_y,
> > > imagesx($i), imagesy($i));
>
> > > //Save the thumbnail
> > > imagejpeg($thumb, "../images/$filename", 80);
>
> > > //Display FileName
> > > Print "Value for Image field: $filename";
> > > $added =true;
> > > }
> > > ?>
>
> > >
> > >

> > >
> > >
> > >
> > >

> > >

Re: Upload image works fine unless image is edited first

am 05.09.2007 18:07:26 von Erwin Moller

xx75vulcan wrote:
> Ok I feel like a dope!
>
> I didn't realize that editing a picture, even simply rotating it could
> increase it's file size.
> Upped the upload_max_filesize in php.ini and the hidden form field
> max_file_size value and it works great.
>

Good.

> Thanks a million for that neat debugging trick!

Yes, print_r() is very handy during debuggingsession.
Whenever you are in trouble, just print_r() whatever it is you don't
understand. Often helps.
(Even used it on my girlfriend, but I didn't understand the output.)

Regards,
Erwin Moller

>
> Chris
>
>
> On Sep 5, 10:50 am, xx75vulcan wrote:
>> Thanks Erwin, I feel I'm a little closer.
>>
>> Deployed your trick, and below is what I get for edited files:
>>
>> Array
>> (
>> [imagefile] => Array
>> (
>> [name] => DSC00064.JPG
>> [type] =>
>> [tmp_name] =>
>> [error] => 2
>> [size] => 0
>> )
>>
>> )
>>
>> This is what I get for un-edited files:
>>
>> Array
>> (
>> [imagefile] => Array
>> (
>> [name] => 2_site_top.jpg
>> [type] => image/jpeg
>> [tmp_name] => C:\WINDOWS\TEMP\php59.tmp
>> [error] => 0
>> [size] => 32448
>> )
>>
>> )
>>
>> On Sep 5, 10:14 am, Erwin Moller
>>
>> wrote:
>>> xx75vulcan wrote:
>>>> Hi,
>>>> I've got a PHP Upload Form that works great, unless that is, the image
>>>> your uploading has been modified through a photo editing software.
>>>> Example: if I upload the image straight from a camera or other, it
>>>> uploads fine. However, If I want to rotate the image, or resize it
>>>> with photoshop or simmilar, making sure to save it again as a jpg, the
>>>> PHP upload won't upload the image.
>>>> It's like editing the image somehow changes it's mime type or
>>>> something?!
>>> Hi Vulcan,
>>> Maybe.
>>>> Any ideas?
>>> I ALWAYS start debugging such issues with:
>>> echo "

";
>>> print_r($_FILES);
>>> echo "
";
>>> exit;
>>> Then compare the output of your uneditted and editted version.
>>> Do you see any differences?
>>> That will probably give you a hint.
>>> And do NOT rely too much on mimetype.
>>> from php.net:
>>> $_FILES['userfile']['type']
>>> The mime type of the file, if the browser provided this
>>> information. An example would be "image/gif". This mime type is however
>>> not checked on the PHP side and therefore don't take its value for granted.
>>> Hope that helps.
>>> Regards,
>>> Erwin Moller
>>>> Here's my upload script:
>>>> >>>> if($_POST["upload"]) //Check to see if submit was clicked
>>>> {
>>>> // Get the details of "imagefile"
>>>> $filename = $_FILES['imagefile']['name'];
>>>> $temporary_name = $_FILES['imagefile']['tmp_name'];
>>>> $mimetype = $_FILES['imagefile']['type'];
>>>> $filesize = $_FILES['imagefile']['size'];
>>>> //Open the image using the imagecreatefrom..() command based on the
>>>> MIME type.
>>>> switch($mimetype) {
>>>> case "image/jpg":
>>>> case "image/jpeg":
>>>> case "image/pjpeg":
>>>> $i = imagecreatefromjpeg($temporary_name);
>>>> break;
>>>> case "image/gif":
>>>> $i = imagecreatefromgif($temporary_name);
>>>> break;
>>>> case "image/png":
>>>> $i = imagecreatefrompng($temporary_name);
>>>> break;
>>>> }
>>>> //Delete the uploaded file
>>>> unlink($temporary_name);
>>>> //Specify the size of the thumbnail
>>>> $dest_x = 350;
>>>> $dest_y = 350;
>>>> //Is the original bigger than the thumbnail dimensions?
>>>> if (imagesx($i) > $dest_x or imagesy($i) > $dest_y) {
>>>> //Is the width of the original bigger than the height?
>>>> if (imagesx($i) >= imagesy($i)) {
>>>> $thumb_x = $dest_x;
>>>> $thumb_y = imagesy($i)*($dest_x/imagesx($i));
>>>> } else {
>>>> $thumb_x = imagesx($i)*($dest_y/imagesy($i));
>>>> $thumb_y = $dest_y;
>>>> }
>>>> } else {
>>>> //Using the original dimensions
>>>> $thumb_x = imagesx($i);
>>>> $thumb_y = imagesy($i);
>>>> }
>>>> //Generate a new image at the size of the thumbnail
>>>> $thumb = imagecreatetruecolor($thumb_x,$thumb_y);
>>>> //Copy the original image data to it using resampling
>>>> imagecopyresampled($thumb, $i ,0, 0, 0, 0, $thumb_x, $thumb_y,
>>>> imagesx($i), imagesy($i));
>>>> //Save the thumbnail
>>>> imagejpeg($thumb, "../images/$filename", 80);
>>>> //Display FileName
>>>> Print "Value for Image field: $filename";
>>>> $added =true;
>>>> }
>>>> ?>
>>>>
>>>>

>>>>
>>>>
>>>>
>>>>

>>>>
>
>

Re: Upload image works fine unless image is edited first

am 05.09.2007 20:20:55 von luiheidsgoeroe

On Wed, 05 Sep 2007 18:07:26 +0200, Erwin Moller
wrote:

> xx75vulcan wrote:
>> Ok I feel like a dope!
>> I didn't realize that editing a picture, even simply rotating it could
>> increase it's file size.
>> Upped the upload_max_filesize in php.ini and the hidden form field
>> max_file_size value and it works great.
>>
>
> Good.
>
>> Thanks a million for that neat debugging trick!

Ah, fileuploads gone array, check:
http://www.php.net/manual/en/features.file-upload.errors.php

> Yes, print_r() is very handy during debuggingsession.
> Whenever you are in trouble, just print_r() whatever it is you don't
> understand. Often helps.
> (Even used it on my girlfriend, but I didn't understand the output.)

Hehe, probably due to circular references :P
--
Rik Wasmus

Re: Upload image works fine unless image is edited first

am 06.09.2007 09:42:06 von Erwin Moller

Rik Wasmus wrote:
> On Wed, 05 Sep 2007 18:07:26 +0200, Erwin Moller
> wrote:
>
>> xx75vulcan wrote:
>>> Ok I feel like a dope!
>>> I didn't realize that editing a picture, even simply rotating it could
>>> increase it's file size.
>>> Upped the upload_max_filesize in php.ini and the hidden form field
>>> max_file_size value and it works great.
>>>
>>
>> Good.
>>
>>> Thanks a million for that neat debugging trick!
>
> Ah, fileuploads gone array, check:
> http://www.php.net/manual/en/features.file-upload.errors.php
>
>> Yes, print_r() is very handy during debuggingsession.
>> Whenever you are in trouble, just print_r() whatever it is you don't
>> understand. Often helps.
>> (Even used it on my girlfriend, but I didn't understand the output.)
>
> Hehe, probably due to circular references :P

:-) I can tell you must have one too. :P

Regards,
Erwin