I’m running into a problem where a particularly huge image is causing my VPS server to reboot because of memory issues. The configuration of this is out of my hands, it’s sort of like the host’s failsafe.
I have a VPS with 300M memory, which I believe is sufficient for my WordPress installation, at least with day-to-day operations.
The image I am uploading isn’t particularly big in file size (~380 kb) and is mostly black with white letters. However, its resolution is 4583 * 4583. When I upload it through WordPress, I get an HTTP error in the upload window, and when I go check the live site, it’s down for a couple of minutes.
I was wondering if it’s possible to detect an images resolution and prevent it from being uploaded. I’m clever enough to mess around a bit in an image processor, but some of my authors may not be savvy enough to process the image before they upload something as big as this.
It would be even better if the limitation could be based on the images bits-per-pixel, but I have no idea what my server’s limit is for this, so I guess an error message saying the image can’t be uploaded because it’s larger than, say, 2000 * 2000 is enough.
The problem isn’t so much the uploading itself, as that is a network connection between the client and the server. It’s not what’s eating the server’s memory.
When WordPress starts ‘cruncing’ the images, that is where PHP comes in and start resizing and cropping the uploaded images. It is before this moment you need to step in and perform a couple of checks before allowing PHP to eat up your memory.
Using the
wp_handle_upload_prefilter
filter, you can hook a function that performs any check you’d like on the image that is about to be crunched:For a plugin, try http://wordpress.org/plugins/imsanity/ and that will help with keeping other site users from uploading images that are too large.
It’s possible that your server has enough memory to do the task, but that the PHP memory limit setting is just too low for the job of converting very large images.
Try setting
memory_limit
in php.ini higher.*Note: This might not be an appropriate solution in some hosting environments.