[英]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.