PHP:内存不足错误,该怎么办?

时间:2010-11-11 20:28:44

标签: php memory-limit suhosin

我在尝试裁剪图片时收到此错误,我刚上传。我上传的图片大约是3MB。

这是错误

<br />
<b>Fatal error</b>:  Out of memory (allocated 45088768) (tried to allocate 15552 bytes) <br />

当我试图使用这个函数时它正在发生:imagecreatefromjpeg($ src);

我有顶:

ini_set('memory_limit', '256M'); 

那怎么会内存不足,我该如何解决?我的图片上传标准限制为6MB。 (虽然它上传到服务器很好,但是当我使用裁剪时,我在使用imagecreatefromjpeg()函数和“内存不足”这一行时出错了。)

3 个答案:

答案 0 :(得分:2)

执行image processing with GD时,始终使用imagedestroy释放已用过的内存,并尽早完成。因此,无论何时您不再需要图像资源,请立即使用imagedestroy将其销毁。

答案 1 :(得分:1)

PHP通常允许您在运行时更改memory_limit设置。但是有一些扩展,如Suhosin,将禁用此行为。检查您的PHP设置是否使用phpinfo()加载了Suhosin扩展。如果是,请检查* suhosin.memory_limit *设置是否设置为0.如果是这样,这将解释此行为(不更新memory_limit),您将必须联系sysadmin以获得该限制。

另见http://www.hardened-php.net/suhosin/configuration.html#suhosin.memory_limit

答案 2 :(得分:0)

安全解决方案是应用一些过滤器,当进程需要的内存超过允许的限制时,它会阻止图像处理(或至少发出一些警告)。 imgcreatefromjpeg上的PHP手册具有一些用户功能(检查注释),可以计算处理图像所需的内存。根据计算,您可以限制上传图像的最大大小,以防止用户触发内存限制错误。

注意:不要忘记在计算上多加几MB。

但如果您坚持不限制图像尺寸,请尝试让您的主机增加内存限制或使用Google Images Python Api等第三方服务。