son Posted August 31, 2013 Share Posted August 31, 2013 Have issue with image upload script. The error is as follows: Fatal error: Out of memory (allocated 56360960) (tried to allocate 19712 bytes) and image file that caused this is 514KB. The entry in db is okay. I checked with local settings on hosted server: max_file_uploads -> 20upload_max_filesize -> 40Mmemory_limit -> 90Mpost_max_size -> 8M As lowest value post_max_size is 8M which is 1024 KB am confused. The image is only half as big. My script runs through the creation of three sizes when uploading an image (thumbnail, medium and large version). The large version sits okay on webserver, it is only the medium and small version that does not run okay. I run the problematic file through a Photoshop resize and uploaded the 529KB file and it created a 42KB large version, 12KB medium version and 2KB thumb. It worked well. Only then did I notice that the original file was actually smaller in size than 529KB. Not only that it is very weird that the save for web in Photoshop has actually increased file size, but the original file should definitely upload okay. It does not. Is there any sense in this? Thanks, Son Link to comment Share on other sites More sharing options...
Ingolme Posted August 31, 2013 Share Posted August 31, 2013 Are you working with PHP GD functions? Remember to use image_destroy() as soon as you're done with an image resource, and if possible, only have one image resource being processed at a time. It's not the uploading that's the problem, it's that the program is using a lot of resources. Link to comment Share on other sites More sharing options...
son Posted September 3, 2013 Author Share Posted September 3, 2013 I use image_destroy(), so not sure if that is the issue. Paste code below... function resize_image($opts){ $src = isset($opts['source']) ? $opts['source'] : ''; $dest = isset($opts['dest']) ? $opts['dest'] : ''; $w = isset($opts['w']) ? intval($opts['w']) : 0; $h = isset($opts['h']) ? intval($opts['h']) : 0; if ($src == '') { return; } if ($w == 0 && $h == 0) { return; } if ($dest == '') $dest = $src; // resize in place // open the image$extVar = explode('.',$src);$ext = strtolower(array_pop($extVar)); switch ($ext) { case 'jpg': case 'jpeg': $i = imagecreatefromjpeg($src); break; case 'gif': $i = imagecreatefromgif($src); break; case 'png': $i = imagecreatefrompng($src); break; default: return; } $new_w = imagesx($i); $new_h = imagesy($i); if (($w != 0 && $new_w <= $w && $h == 0) || ($w == 0 && $h != 0 && $new_h <= $h) || ($w != 0 && $new_w <= $w && $h != 0 && $new_h <= $h)) { // image is small enough if ($dest != $src) copy($src, $dest); return; } // determine new size if ($w != 0 && $new_w > $w) { $new_h = ($w / $new_w) * $new_h; $new_w = $w; } if ($h != 0 && $new_h > $h) { $new_w = ($h / $new_h) * $new_w; $new_h = $h; } // resize $new = imagecreatetruecolor($new_w, $new_h); if ($ext == 'png' || $ext == 'gif') { $trnprt_indx = imagecolortransparent($i); // If we have a specific transparent color if ($trnprt_indx >= 0) { // Get the original image's transparent color's RGB values $trnprt_color = imagecolorsforindex($i, $trnprt_indx); // Allocate the same color in the new image resource $trnprt_indx = imagecolorallocate($new, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']); // Completely fill the background of the new image with allocated color. imagefill($new, 0, 0, $trnprt_indx); // Set the background color for new image to transparent imagecolortransparent($new, $trnprt_indx); } // Always make a transparent background color for PNGs that don't have one allocated already elseif ($ext == 'png') { // Turn off transparency blending (temporarily) imagealphablending($new, false); // Create a new transparent color for image $color = imagecolorallocatealpha($new, 0, 0, 0, 127); // Completely fill the background of the new image with allocated color. imagefill($new, 0, 0, $color); // Restore transparency blending imagesavealpha($new, true); } } imagecopyresampled($new, $i, 0, 0, 0, 0, $new_w, $new_h, imagesx($i), imagesy($i)); imagedestroy($i); // save the image switch ($ext) { case 'jpg': case 'jpeg': imagejpeg($new, $dest); break; case 'gif': imagegif($new, $dest); break; case 'png': imagepng($new, $dest); break; } imagedestroy($new);} This script is working well on other sites. In fact it has been generally employed and it is not written by me... This is the first time I encounter an issue with it. Can you see any issue. I cannot see what would be wrong with this piece of code... Son Link to comment Share on other sites More sharing options...
Ingolme Posted September 3, 2013 Share Posted September 3, 2013 The problem isn't with upload_max_filesize or post_max_size. The system doesn't seem to be allocating enough memory for PHP to process the image. I guess you should try increasing the memory_limit directive, the default is 128M and you only have 90M. Link to comment Share on other sites More sharing options...
son Posted September 5, 2013 Author Share Posted September 5, 2013 Thanks Ingolme. Unfortunately, it is a hosted site with no access to php.ini or is there another way to implement this (locally in script not possible, is it?)... Son Link to comment Share on other sites More sharing options...
thescientist Posted September 5, 2013 Share Posted September 5, 2013 (edited) is there another way to implement this (locally in script not possible, is it?)... no, changing php.ini settings at run time (via PHP script) won't work for this. (i believe) Edited September 5, 2013 by thescientist Link to comment Share on other sites More sharing options...
justsomeguy Posted September 5, 2013 Share Posted September 5, 2013 You can change the memory limit at runtime, but you can't make it higher than what is specified in php.ini. You can also specify the memory limit in a .htaccess file. Link to comment Share on other sites More sharing options...
son Posted September 10, 2013 Author Share Posted September 10, 2013 Thanks for info. Very helpful:-) Son Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now