当 memory_limit 设置为 -1 时,PHP 为何会抛出“内存限制已耗尽”?

当 memory_limit 设置为 -1 时,PHP 为何会抛出“内存限制已耗尽”?

最近,我从命令行执行 PHP 脚本时收到一条错误消息:

PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted
(tried to allocate 40961 bytes) 

php -i | grep memory显示:

memory_limit => -1 => -1
suhosin.memory_limit => 0 => 0

哪一个应该根本不设限制?

服务器正在运行PHP 5.3.3-7+squeeze16 with Suhosin-Patch (v0.9.32.1) (cli)

怎么会这样?

答案1

让 PHP 完全没有限制并不是明智之举。当您的服务器有 32GB 内存时,最多可设 30GB 等等。尝试设置一个正值而不是-10

确保您瞄准正确版本的 PHP/php.ini,根据您运行脚本的模式,有:

/etc/php5/apache对于 Apache

/etc/php5/fpm对于 fastcgi 使用 mod_fpm

/etc/php5/cgi对于 CGI 脚本

/etc/php5/cli对于 php shell 客户端

为了使更改生效,您还需要重新启动:

/etc/init.d/apache

或者

/etc/init.d/php5-fpm

如果还没有任何帮助,请检查这个问题:无法删除 PHP 脚本的内存使用限制

答案2

好的,我找到了,问题不在于 PHP 配置,但在运行全局搜索后,我发现一个供应商脚本将内存限制设置为 32M :-/

相关内容