我最近遇到內存分配問題,所以我開始嘗試使用ini_set('memory_limit', value);
指令,我嘗試增量輸入值。現在,通過網絡搜索(和SO),我發現我可以把-1
作爲value
。所以,我做了,現在腳本完全運行到最後而沒有中斷(在我以前得到內存分配錯誤之前)。PHP memory_get_peak_usage和ini_set('memory_limit','-1')
我不明白,然而,就是在給腳本的文件的末尾兩行:
$mem = memory_get_peak_usage(true);
echo "Peak mem. usage: <b>" . round($mem/1024/10124, 2) . "</b> MB";
產生約10.8MB 和當我看進/var/log/messages
我可以看到這條線:
Nov 21 13:52:26 mail suhosin[1153]: ALERT-SIMULATION - script tried to increase
memory_limit to 4294967295 bytes which is above the allowed value (attacker
'xx.xxx.xxx.xxx', file '/var/www/html/file.php', line 5)
這意味着腳本試圖alocate 4096MB!
這怎麼可能?而且,我最感興趣的是爲什麼在這種情況下腳本執行沒有停止?是因爲ini_set('memory_limit', '-1');
?我的意思是,我確實讀過,因爲value
不是推薦的,我知道腳本中存在問題的位置(一次在內存中讀取大量數據),然後我將按順序讀取並修復它,但是我對這些數據差異感到困惑,所以如果有人能夠對此有所瞭解,我會感到非常滿意。
請參閱http://stackoverflow.com/a/20753388/2013738 –