PHP 5.3.3中的ini_set("memory_limit")根本不起作用

Ant*_*Ant 44 php memory debian apache2

我之前有这个工作:

echo ini_get("memory_limit")."\n";
ini_set("memory_limit","256M");
echo ini_get("memory_limit")."\n";
Run Code Online (Sandbox Code Playgroud)

那会输入这个:

32M
256M
Run Code Online (Sandbox Code Playgroud)

在由命令行执行的php脚本上.我从5.2更新到5.3,从现在起,这个指令根本不起作用:这给了我:

32M
32M
Run Code Online (Sandbox Code Playgroud)

然后使我的脚本失败并发生致命错误...

我检查了php文档,然后用Google搜索,我没有找到"memory_limit"已被弃用的地方.

有没有人有办法解决吗?

Osc*_* M. 26

如果启用了suhosin扩展,则可以防止脚本将内存限制设置为超出其启动范围或某些已定义的上限.

http://www.hardened-php.net/suhosin/configuration.html#suhosin.memory_limit


小智 25

很可能你的sushosin已更新,它将suhosin.memory_limit的默认值从禁用更改为0(这将不允许对memory_limit进行任何更新).

在Debian上,更改/etc/php5/conf.d/suhosin.ini

; suhosin.memory_limit = 0

suhosin.memory_limit = 2G

或者你觉得舒适的价值.您可以在http://www.hardened-php.net/hphp/changelog.html找到Sushosin的更改日志,其中说:

改变了memory_limit保护的实现方式


Car*_*ton 12

以下是值得检查的事项列表:

是否安装了Suhosin?

的ini_set

  • 格式很重要 ini_set('memory_limit', '512'); // DIDN'T WORK ini_set('memory_limit', '512MB'); // DIDN'T WORK ini_set('memory_limit', '512M'); // OK - 512MB ini_set('memory_limit', 512000000); // OK - 512MB

使用整数时,该值以字节为单位进行测量.也可以使用本FAQ中描述的速记符号.

http://php.net/manual/en/ini.core.php#ini.memory-limit

  • php_admin_value是否已用于.htaccess或虚拟主机文件?

设置指定指令的值.这不能用于.htaccess文件.使用php_admin_value设置的任何指令类型都不能被.htaccess或ini_set()覆盖.要清除先前设置的值,请​​使用none作为值.

http://php.net/manual/en/configuration.changes.php

  • `ini_set('memory_limit', '512');` 确实有效,只是将内存限制设置为 512B (3认同)