memory_limit的= 80M。 imagecreateformjpeg()的最大图像大小是多少?

时间:2010-08-01 12:56:46

标签: image php phpinfo memory-limit

我有一个虚拟主机,最大memory_limit为80M(即ini_set(“memory_limit”,“80M”);)。 我正在使用使用imagecreatefromjpeg()函数的照片上传; 当我上传大图像时,它会给出错误 “致命错误:允许的内存大小耗尽83886080字节” 我可以限制用户的图像的最大大小(以字节为单位)? 或者memory_limit取决于其他因素?

2 个答案:

答案 0 :(得分:2)

8388608的内存大小为8兆字节,而不是80.您可能想检查是否仍然可以在某处增加值。

除此之外,图像处理的一般规则是至少需要

image width x image height x 3 

要加载或创建映像的内存字节数。 (一个字节表示红色,一个字节表示绿色,一个字节表示蓝色,可能还有一个字符表示透明度)

按照这个规则,640 x 480像素的图像将需要至少9.2兆字节的空间 - 不包括脚本本身占用的开销和空间。

无法确定JPG文件大小的字节数限制,因为JPG是一种压缩率可变的压缩格式。您需要通过图像分辨率并对其设置限制。

如果您没有那么多可用内存,您可能需要研究更有效的方法来做您想做的事情,例如:平铺(一次处理图像的一部分),或者,如果您的提供者允许,使用外部工具,如ImageMagick(也消耗内存,但超出PHP脚本的内存限制)。

答案 1 :(得分:0)

可能你的脚本使用的内存比图像本身多。尝试调试内存消耗。

一种快速而肮脏的方法是在代码中的某些点上使用memory_get_usage和memory_get_usage memory_get_peak_usage,尤其是在自定义error_handlershutdown_function中。这可以让您知道确切的操作会导致内存耗尽。

相关问题