如何更改分配的内存容量?

时间:2010-01-04 16:01:00

标签: php image memory size byte

致命错误:在第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),但它没有用。

6 个答案:

答案 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)。