This is a discussion on Script Crashing within the PHP Language forums, part of the PHP Programming Forums category; Okay, I posted this over at alt.php, but got nil response, so I'm posting it hear again in ...
|
|||||||
| FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
|
|||
|
Okay, I posted this over at alt.php, but got nil response, so I'm posting it
hear again in hopes of getting a response. Sorry to anyone reading this twice: Okay...so on my website, where people can upload pictures, there is a fairly major problem with the upload script. Specificaly the part of this script that automatically generates thumbnails. For some reason, when someone uploads a picture that is very large in dimensions, in the process of making a thumbnail, the script crashes, and the browser gives an 'internal server error' message. Here is the snippet of code that I've narrowed down as the problem: $width = $size[0]; //width of original image $height = $size[1]; //height of original image $width = round(($width/4)); //width for thumnail $height = round(($height/4)); //height for thumbnail $dst_img = ImageCreateTrueColor($width,$height); //creates new image ImageCopyResized($dst_img, $src_img, 0,0,0,0, $width, $height, $size[0], $size[1]); //creates thumbnail from original ImageJpeg($dst_img, "users/$uname/$album/small/$pic_name", 60); //copies thumnail to appropriate folder with quality adjustment Now the funny thing is that this works fine on my own computer where I test stuff out before making it live. When I upload it to my website however, these large pictures crash. This makes me wonder if it's not some sort of PHP config setting. The dimension in which I have found this is a problem is, 2032x1524 pixels. Anyways, any help would be greatly appeciated, and TIA. -- <=============> --Lee http://www.inaneasylum.org Goodbye, adios, bis bald, see ya later, wiedersehen, and everything in between |
|
|||
|
Lee Marsh <burgermeister01@fake.com> wrote:
> ImageJpeg($dst_img, "users/$uname/$album/small/$pic_name", 60); //copies > thumnail to appropriate folder with quality adjustment > > Now the funny thing is that this works fine on my own computer where I test > stuff out before making it live. When I upload it to my website however, > these large pictures crash. This makes me wonder if it's not some sort of > PHP config setting. The dimension in which I have found this is a problem > is, 2032x1524 pixels. Anyways, any help would be greatly appeciated, and > TIA. Your only the second person to ask the same question this week :) It's propably a memory limit, said dimension needs 12387072 bytes of memory. Default is 8Mb max IIRC. You can check this by looking at the error messages (set level to E_ALL and use a decend tool (like lynx -source URL | less) or simply send it as "text" (remove image/foo header)) |
|
|||
|
Ugg, that's the problem though. It's on my host's server, and I don't have
the $$ for anything nicer than a virtual server which puts the config files in their hands, and they're very obstinate about keeping their config files the same. Do you have any idea how I might be able to calculate the threshold and put some sorta check on that so the script doesn't crash? Also, do you not think it's strange that although I can send photos that are large, I can send files of equivelent file size (in this case 800KB)? On a similar note, I messed around with it some more, and the script will actually allow for images larger than the dimension I gave originally, however, the thumnail is a blank black image rather than, well, an actual thumnail? What do you think? -- <=============> --Lee http://www.inaneasylum.org Goodbye, adios, bis bald, see ya later, wiedersehen, and everything in between "Daniel Tryba" <partmapsswen@invalid.tryba.nl> wrote in message news:428a863e$0$64558$c5fe704e@news6.xs4all.nl... > Lee Marsh <burgermeister01@fake.com> wrote: >> ImageJpeg($dst_img, "users/$uname/$album/small/$pic_name", 60); //copies >> thumnail to appropriate folder with quality adjustment >> >> Now the funny thing is that this works fine on my own computer where I >> test >> stuff out before making it live. When I upload it to my website however, >> these large pictures crash. This makes me wonder if it's not some sort of >> PHP config setting. The dimension in which I have found this is a problem >> is, 2032x1524 pixels. Anyways, any help would be greatly appeciated, and >> TIA. > > Your only the second person to ask the same question this week :) > > It's propably a memory limit, said dimension needs 12387072 bytes of > memory. Default is 8Mb max IIRC. You can check this by looking at the > error messages (set level to E_ALL and use a decend tool (like lynx > -source URL | less) or simply send it as "text" (remove image/foo > header)) |
|
|||
|
It's not surprising that the server can send/recieve files larger than
the limit you're talking about. In those cases, it'll often not keep the entire file in memory at once, but stream parts of it as needed. You could do your thumbnail script in two parts. The first part is a sanity-check on the file. If the file has more than X pixels (pull the width and height, and multiply them), then fail, otherwise make the thumbnail. It's more of a way to gracefully deflect the problem than really solving it. ~D |
|
|||
|
One thing to try is to get the thumbnail that is stored in JPEG files.
Digital cameras and software like Photoshop often place thumbnail images into files to make them easier to browse through. The following function tries to extract the thumbnail, returning a GD image handle if successful. You will need to enable the exif extension. function imagecreatefromjpegthumbnail($path) { if($data = @exif_read_data($path, 'THUMBNAIL', false, true)) { if($thumb_nail_data = @$data['THUMBNAIL']['THUMBNAIL']) { return @imagecreatefromstring($thumb_nail_data); } } return false; } Example: $f = "C:/Documents and Settings/cleong/My Documents/My Pictures/gonch2.jpg"; if($img = imagecreatefromjpegthumbnail($f)) { header("Content-type: image/png"); imagepng($img); } |