[英]ini_set(“memory_limit”) in PHP 5.3.3 is not working at all
我以前有这个工作:
echo ini_get("memory_limit")."\n";
ini_set("memory_limit","256M");
echo ini_get("memory_limit")."\n";
那将输入:
32M
256M
在命令行执行的php脚本上。 我从5.2更新到5.3,从现在开始,此指令完全不起作用:这给了我:
32M
32M
然后让我的脚本因致命错误而失败...
我检查了php文档,并对其进行了谷歌搜索,没有发现“ memory_limit”已被弃用的任何地方。
有没有人有办法解决吗?
如果启用了suhosin扩展名,它可以防止脚本将内存限制设置为超出其开头或某些定义的上限。
http://www.hardened-php.net/suhosin/configuration.html#suhosin.memory_limit
最有可能是您的sushosin已更新,从而将suhosin.memory_limit的默认值从Disabled更改为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保护的实现方式
以下是值得检查的事项列表:
是否安装了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/zh/ini.core.php#ini.memory-limit
设置指定指令的值。 这不能在.htaccess文件中使用。 .htaccess或ini_set()不能覆盖任何用php_admin_value设置的指令类型。 要清除先前设置的值,请不使用任何值。
对我有效,与PHP 5.3无关。 与许多此类选项一样,启用safe_mode时不能通过ini_set()
覆盖它。 检查您更新的php.ini
(更好的是:也在那里更改memory_limit)。
Ubuntu 10.04仅随附Suhosin补丁,该补丁不提供配置选项。 但是您可以安装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');
让我们用两个示例进行测试:
<?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');
在文件的开头或至少在回声之前 。
对于我来说, suhosin并不是解决方案,因为它甚至都没有出现在我的phpinfo()中,但是这样做有效:
<?php
ini_set('memory_limit','2048M'); // set at the top of the file
(...)
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.