PHP 5.3.3中的ini_set(“memory_limit”)根本不起作用
我之前有这个工作:
echo ini_get("memory_limit")."\n"; ini_set("memory_limit","256M"); echo ini_get("memory_limit")."\n";
这将input这个:
32M 256M
在命令行执行的PHP脚本。 我从5.2更新到5.3,从现在开始,这个指令根本不起作用:这给了我:
32M 32M
然后让我的脚本失败,一个致命的错误…
我检查了php文档,并将其search到,并且我没有发现任何“memory_limit”已被废弃的地方。
有没有人有办法解决吗?
最有可能的是你的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上findSushosin的更新日志,其中说:;
改变了memory_limit保护的实现方式
如果启用了suhosin扩展,则可以防止脚本将内存限制设置为超出其启动的范围或某个已定义的上限。
http://www.hardened-php.net/suhosin/configuration.html#suhosin.memory_limit
以下是一些值得检查的事项:
Suhosin是否安装?
- 如何检查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
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
当使用整数时,该值以字节为单位进行测量。 如本常见问题中所述,速记符号也可以使用。
http://php.net/manual/en/ini.core.php#ini.memory-limit
- 在.htaccess或虚拟主机文件中是否使用了php_admin_value?
设置指定指令的值。 这不能在.htaccess文件中使用。 任何使用php_admin_value设置的指令types都不能被.htaccess或ini_set()覆盖。 要清除之前设置的值,请使用none作为值。
适用于我,与PHP 5.3无关。 就像许多这样的选项,当启用safe_mode时,不能通过ini_set()
覆盖。 检查你的更新php.ini
(还有更好的:也改变memory_limit)。
Ubuntu 10.04只附带了Suhosin补丁程序,不提供configuration选项。 但是你可以安装php5-suhosin来解决这个问题:
apt-get update apt-get install php5-suhosin
现在你可以编辑/etc/php5/conf.d/suhosin.ini并设置:
suhosin.memory_limit = 1G
然后使用ini_set将在脚本中工作:
ini_set('memory_limit', '256M');
我们用两个例子做一个testing:
<?php $memory = (int)ini_get("memory_limit"); // Display your current value in php.ini (for example: 64M) echo "original memory: ".$memory."<br>"; ini_set('memory_limit','128M'); // Try to override the memory limit for this script echo "new memory:".$memory; } // Will display: // original memory: 64 // new memory: 64 ?>
上面的例子不能覆盖memory_limit的值。 但是这将工作:
<?php $memory = (int)ini_get("memory_limit"); // get the current value ini_set('memory_limit','128'); // override the value echo "original memory: ".$memory."<br>"; // echo the original value $new_memory = (int)ini_get("memory_limit"); // get the new value echo "new memory: ".$new_memory; // echo the new value // Will display: // original memory: 64 // new memory: 128 ?>
你必须放置ini_set('memory_limit','128M');
在文件的顶部或至less在任何回声之前 。
至于我, suhosin不是解决scheme,因为它甚至不出现在我的phpinfo(),但是这工作:
<?php ini_set('memory_limit','2048M'); // set at the top of the file (...) ?>