Script Crashing

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View

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: 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
$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

Goodbye, adios, bis bald, see ya later, wiedersehen, and everything in

Re: Script Crashing

Quoted text here. Click to load it

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

Re: Script Crashing

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?

Goodbye, adios, bis bald, see ya later, wiedersehen, and everything in
Quoted text here. Click to load it

Re: Script Crashing

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.


Re: Script Crashing

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;


$f = "C:/Documents and Settings/cleong/My Documents/My
if($img = imagecreatefromjpegthumbnail($f)) {
    header("Content-type: image/png");

Site Timeline