By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
458,125 Members | 1,562 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 458,125 IT Pros & Developers. It's quick & easy.

Upload image works fine unless image is edited first

P: n/a
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:

<?php
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;
}
?>

<html>
<form action="upload.php" method="POST" enctype="multipart/
form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="200000">
<input type="file" name="imagefile">
<input type="submit" name="upload" value="Upload Image">
</form>
</html>

Sep 5 '07 #1
Share this Question
Share on Google+
7 Replies


P: n/a
On Wed, 05 Sep 2007 16:33:07 +0200, xx75vulcan <xx********@gmail.com
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:

<?php
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'];
Never trust mimetype. Use something like getimagesize() to determine
wether it is, and if so get the type of image.
$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;
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 = 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;
}
?>

So, have you enabled error_reporting/display_errors? Do you know where the
code fails? Try to determine exactly where everyting goes wrong.

--
Rik Wasmus
Sep 5 '07 #2

P: n/a
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 "<pre>";
print_r($_FILES);
echo "</pre>";
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:

<?php
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;
}
?>

<html>
<form action="upload.php" method="POST" enctype="multipart/
form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="200000">
<input type="file" name="imagefile">
<input type="submit" name="upload" value="Upload Image">
</form>
</html>
Sep 5 '07 #3

P: n/a
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
<Since_humans_read_this_I_am_spammed_too_m...@spam yourself.comwrote:
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 "<pre>";
print_r($_FILES);
echo "</pre>";
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:
<?php
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;
}
?>
<html>
<form action="upload.php" method="POST" enctype="multipart/
form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="200000">
<input type="file" name="imagefile">
<input type="submit" name="upload" value="Upload Image">
</form>
</html>

Sep 5 '07 #4

P: n/a
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 <xx75vul...@gmail.comwrote:
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

<Since_humans_read_this_I_am_spammed_too_m...@spam yourself.comwrote:
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 "<pre>";
print_r($_FILES);
echo "</pre>";
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:
<?php
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;
}
?>
<html>
<form action="upload.php" method="POST" enctype="multipart/
form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="200000">
<input type="file" name="imagefile">
<input type="submit" name="upload" value="Upload Image">
</form>
</html>

Sep 5 '07 #5

P: n/a
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 <xx75vul...@gmail.comwrote:
>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

<Since_humans_read_this_I_am_spammed_too_m...@spa myourself.comwrote:
>>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 "<pre>";
print_r($_FILES);
echo "</pre>";
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:
<?php
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;
}
?>
<html>
<form action="upload.php" method="POST" enctype="multipart/
form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="200000">
<input type="file" name="imagefile">
<input type="submit" name="upload" value="Upload Image">
</form>
</html>

Sep 5 '07 #6

P: n/a
On Wed, 05 Sep 2007 18:07:26 +0200, Erwin Moller
<Si******************************************@spam yourself.comwrote:
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/feature...oad.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
Sep 5 '07 #7

P: n/a
Rik Wasmus wrote:
On Wed, 05 Sep 2007 18:07:26 +0200, Erwin Moller
<Si******************************************@spam yourself.comwrote:
>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/feature...oad.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
Sep 6 '07 #8

This discussion thread is closed

Replies have been disabled for this discussion.