尝试在创建拇指时分配内存的致命错误

时间:2012-09-04 12:05:40

标签: php fatal-error php-gd

我想在路上分享一些发生在我身上的事情。

我将图片上传到我的网站,然后我创建了一些拇指。那些大拇指从相对较大的文件(大约5mb的jpeg图像)自动裁剪,我做了很多次。突然,当上传一个大文件并从裁剪的图像(而不是原始图像)做拇指时,我发现了这个错误:

Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 22464 bytes)

我怎么能耗尽128Mb的内存?

2 个答案:

答案 0 :(得分:1)

主要问题是我使用的内存比可用内存多。当然,要检查的第一件事是,如果我上传的是正确的文件而不是太大的文件。好的,3Mb。那么,问题出在哪?

通常情况下,这种错误会带来完全消耗可用内存的确切行。就我而言,就在这个内部:

$orig = imagecreatefromjpeg($fullPathFilename);

因此,当将新图像分配到内存时,服务器崩溃了。然后,我想到了这一点:我没有释放任何以前的分配电话!如前所述,我偶然会从多个大小的图像中生成大量的拇指。愚蠢的我,我没有释放任何这些。因此,如果您在裁剪/调整/更改多个图像时碰巧看到此错误,请在代码中检查此调用:

imagedestroy($orig);

所以,总结一下。

如果您没有找到imagedestroy()功能,那么您可能已经找到了问题!

答案 1 :(得分:1)

我也遇到了这个问题

增加以下变量,以便您的页面执行不会停止:

max_input_time
memory_limit
max_execution_time

干杯