使用PHP上传图像并达到脚本内存限制

时间:2010-08-25 04:13:06

标签: php image cakephp upload filesize

我正在尝试使用PHP脚本上传JPG图像,但是图像不断导致我的脚本超时并死于此错误:

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 
2136 bytes) in image.php on line 38

如果图片太大,或者此错误正常失败,如何阻止上传?

6 个答案:

答案 0 :(得分:3)

实际问题不是初始文件大小,而是图像本身的尺寸(高度宽度 colorDepth),因为在文件上传之前您无权访问此信息出于安全原因,您应该使用用Flash,Java或Silverlight编写的上传器,因为他们事先可以访问这些信息。

上传后,您可以使用getimagesize并使用返回的宽度,高度和位深度计算(未压缩)图像的尺寸来检查图像是否超出内存限制。

祝你好运。

答案 1 :(得分:2)

http://php.net/manual/en/features.file-upload.common-pitfalls.php说:

  

如果启用了内存限制,则可能需要更大的memory_limit。确保将memory_limit设置得足够大。

答案 2 :(得分:1)

您可以通过几种方式限制图像大小或任何其他文件上传大小,

通过php.ini,upload_max_filesize = 10M

通过隐形标签如此(10k): <input type="hidden" name="MAX_FILE_SIZE" value="10000" />

如果您不知道它可能对您的服务器配置产生什么样的影响,我建议不要增加内存限制。

答案 3 :(得分:1)

只需使用ini_set为该特定脚本设置更高的内存限制。

在图像处理脚本的开头:

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

此错误通常不是由图像文件大小引起的,而是由图像分辨率引起的。因此,您可以检查图像的大小。运行一些测试以查看当前内存限制下可接受的内容,如果分辨率更高,则终止该过程并向用户返回错误。

答案 4 :(得分:0)

$size=filesize($_FILES['image']['tmp_name']);

将为您提供全局$ _FILES数组中文件的大小。在此之后,只需将$ size与您想要的最大尺寸进行比较。

查看文件大小()api:http://php.net/manual/en/function.filesize.php

答案 5 :(得分:0)

无论文件大小如何,所有上传尝试都会发生这种情况吗?当出现脚本错误时,我只遇到过这种问题 - 通常是一个失控的循环。