php cli 内存限制

php cli 内存限制

我在 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

我遗漏了什么?内存限制在哪里?

答案1

IIRC,CLI 不支持无限制的 memory_limit(我会尝试找到此来源)但是现在,尝试将其传递到命令中:

php -d memory_limit=128M my_script.php

更新

显然,我梦想着 php cli 不支持无限的 memory_limit。无论如何,看起来 ini 中的值被忽略了。那么最简单的解决方案应该是在调用脚本的 php 命令中专门设置它。

更新2

要回答内存限制来自何处的问题,最有可能的是使用“ini_set”在脚本本身中设置。

答案2

在测试 CLI php 版本时,5.5.9似乎在 cli 中默认情况下它具有无限制的内存限制,并且指定php -d memory_limit=4G my_script.php将对此设置限制。

答案3

如果你将 PHP 安装为 Apache 模块(检查中的‘服务器 API’ phpinfo()),你应该在 cron 作业中通过命令行 Web 浏览器(wget、curl、lynx 等)调用它,如下所示:

*/15 * * * * lynx -dump http://localhost/script.php >> /var/log/script.log 2>&1

相关内容