Php

php cli記憶體限制

  • May 7, 2019

我在 php cron 作業中遇到記憶體錯誤:

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 71 bytes) in /opt/matrix/core/lib/DAL/DAL.inc on line 830

crontab 的適用部分有:

$ sudo crontab -u www-data -l
MAILTO=root
# m h  dom mon dow   command
*/15 * * * * php /opt/matrix/core/cron/run.php /opt/matrix

我在 Debian Squeeze 上執行,完全更新。

顯而易見的解決方案是 cli 的記憶體限制較低(64MB)。但是,/etc/php5/cli/php.ini 說它是無限的。

$ cat /etc/php5/cli/php.ini | grep memory_limit
memory_limit = -1

我在某處讀到它對於不同的使用者可能會有所不同,並且由於該程序作為 www-data 執行,因此我執行:

$ sudo -u www-data -s
$ php -i | grep memory_limit
memory_limit => -1 => -1
suhosin.memory_limit => 0 => 0

甚至 apache/php.ini 的限制也比錯誤聲稱的要高:

$ sudo cat /etc/php5/apache2/php.ini | grep memory_limit
memory_limit = 128M

我錯過了什麼?這個記憶體限制在哪裡?

IIRC,CLI 不支持無限制的 memory_limit (我將嘗試為此查找源),但現在,嘗試將其傳遞給命令:

php -d memory_limit=128M my_script.php

更新

顯然,我夢想著 php cli 不支持無限的 memory_limit。無論如何,看起來ini中的值被忽略了。最簡單的解決方案應該是在呼叫腳本的 php 命令中專門設置它。

更新2

要回答記憶體限制來自何處的問題,很可能是使用“ini_set”在腳本本身中設置的。

引用自:https://serverfault.com/questions/295584