致命错误:在第62行的/ mounted-storage / home20a / sub001 / sc20063-GJYD / [...]中,允许的内存大小为33554432字节(试图分配40000字节)
看起来PHP脚本只允许我为内存分配32 MB?这是用example image来测试如果用户试图上传大图片会发生什么。
我的问题是:如何预测会发生这种情况,然后提醒用户图像太大而不是返回此错误?我测试了一段时间,但我想我尝试了try-catch和@,但是他们都失败了,因为这是一个致命的错误。示例图像的大小仅为1 kB,因此无法检查该值。
我认为我解决了自己的问题,我可以检查图像的$ width和$ height,然后通知用户图像是否太大,但我有另一个问题:如何更改允许的amout分配内存?我假设我的用户将尝试发布许多高分辨率图像。我试过了ini_set("memory_limit", $bignumber)
,但它没有用。
答案 0 :(得分:1)
要更改memory_limit
,您必须在php.ini文件中编辑memory_limit
指令 - 如果您不想修改,也可以在Apache的VirtualHost中完成对整个服务器有效,但仅适用于一个网站。
但你可能并不总是这样做 - 你需要成为服务器的管理员......
顺便说一句,你可以看看How to change configuration settings。
另一种可能是使用imagemagick及其convert可执行文件,使用Program execution Functions之一。这样,PHP无法完成图像的大小调整。
但是,在这里,这意味着你依赖外部程序......
答案 1 :(得分:1)
您也可以通过ini_set编辑允许的内存大小,但安全模式或suhoshin补丁可能block it。在memory_limit指令中设置php.ini中所需的内存大小。
答案 2 :(得分:1)
如果你想增加内存限制,这需要在解释器启动之前完成(即你需要在php.ini文件中更改它 - 不使用ini_set)。
“我想我解决了自己的问题,我可以查看图片的$ width和$ height”,
gd getimagesize将返回值,这些值将映射GD中位图的内存使用情况,但是您应该考虑在文件到达PHP之前限制上传大小和最大帖子大小
℃。
答案 3 :(得分:0)
您需要在php.ini
配置文件中执行此操作:memory_limit
。
答案 4 :(得分:0)
编辑PHP.ini中的设置,或者也可以使用.htaccess(如果不在Windows主机上),其中包含以下行:
php_value memory_limit 32M
如果您无法访问php.ini,或者您想在网站的特定区域更改此设置,.htaccess解决方案可以解决您的问题。在我的示例中,限制增加到32MB。请注意,某些主机不支持此功能,或者不支持超大值(特别是在共享托管环境中)。
答案 5 :(得分:0)
尝试
ini_set("memory_limit","50M");
也许您的$bignumber
未指定为兆字节(因此为M)。