2010-08-25 68 views
3

我试图使用PHP脚本上传JPG图像,但图像是不断引起我的脚本超时和死亡给这个错误:上传图片用PHP和击球脚本内存限制

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

如果图像太大或者此错误正常失败,如何防止上传发生?

回答

3

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

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

祝你好运。

+0

+1正是我要写的。另外,请查看[昨天的这个问题](http://stackoverflow.com/questions/3554397/estimate-required-memory-for-libgd-operation) – 2010-08-25 08:10:40

1

可以限制图像尺寸或几种方式的任何其他文件上传大小,

通过php.ini中

,的upload_max_filesize = 10M

通过

这样的隐形标签(10k): <input type="hidden" name="MAX_FILE_SIZE" value="10000" />

我不建议增加内存限制,如果你不知道它会对你的服务器产生什么样的影响c onfiguration。

1

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

在图像处理脚本的开头:

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

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

0

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