2010-11-11 66 views
1

当我尝试裁剪图像时,我刚收到此错误,我刚刚上传。我刚刚上传的图像大约3MB。PHP:内存不足错误,该怎么办?

这里的错误

<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()函数和“内存不足”错误)

+0

如果你做'ini_set('memory_limit',-1);'会发生什么?这应该禁用限制。另外,你使用的是什么版本的PHP和什么操作系统? – lonesomeday 2010-11-11 20:35:27

+0

即时通讯仍然有错误-1 – Johnson 2010-11-11 20:50:40

+0

任何机会你做循环? – ajreal 2010-11-11 20:55:36

回答

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

+0

鉴于上述评论的答案,这很可能是问题所在。 +1 – lonesomeday 2010-11-11 20:54:12

+0

我没有任何扩展 – Johnson 2010-11-11 21:11:13

+0

@Johnson你可能不知道你是 - 例如,Ubuntu默认启用它。你检查过phpinfo()吗? – lonesomeday 2010-11-11 21:14:28

2

在做image processing with GD,总是imagedestroy后来释放使用的内存,并尽可能早地做到这一点。所以,只要你不再需要图像资源,立即用imagedestroy销毁它。

+0

好的很好的功能,但我没有任何东西从裁剪之前的裁剪()有其他功能释放内存的东西,例如可能pathinfo();或exif_imagetype(); – Johnson 2010-11-11 21:30:14

0

A 安全解决方案是应用一些过滤器,防止图像处理(或至少发出一些警告),当进程将需要更多的内存比允许的限制。在imgcreatefromjpeg上的PHP手册有一些用户功能(检查评论),它们能够计算处理图像所需的内存。根据计算,您可以限制上传图像的最大尺寸,以防止用户触发内存限制错误。

note:不要忘记在计算上增加几MB。

但是,如果您坚持不限制图片大小,请尝试请求您的主持人增加您的内存限制或使用第三方服务,如Google Images Python Api