2

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

4

2 回答 2

2

的内存大小8388608是 8 MB,而不是 80。您可能需要检查是否仍然可以在某处增加该值。

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

image width x image height x 3 

用于加载或创建图像的内存字节。(红色一个字节,绿色一个字节,蓝色一个字节,可能还有一个用于 alpha 透明度)

根据该规则,一个 640 x 480 像素的图像将需要至少 9.2 兆字节的空间——不包括脚本本身占用的开销和空间。

无法确定 JPG 文件大小的限制(以字节为单位),因为 JPG 是一种具有可变压缩率的压缩格式。您将需要通过图像分辨率来设置限制。

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

于 2010-08-01T13:00:29.083 回答
0

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

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

于 2012-05-03T14:36:06.437 回答