允许的X字节内存大小耗尽

Nat*_*han 39 php memory memory-management out-of-memory memory-limit

致命错误:允许的内存大小为67108864字节耗尽(尝试分配13965430字节)

PHPInfo显示我有一个128M的memory_limit,所以我很困惑为什么错误说我只有64M.phpinfo是否可能报错?或者为PHP使用两个单独的php.inis?

该错误是由我的一个同事在我不知情的情况下添加的一个主要php文件中的ini_set调用引起的.

Mar*_*c B 36

PHP的配置可以在多个地方设置:

  1. 主系统php.ini(通常在/ etc某处)
  2. 在Apache的配置中的某个地方(httpd.conf或每个站点的.conf文件,通过php_value)
  3. CLI和CGI可以有不同php.ini(使用命令php -i | grep memory_limit检查CLI conf)
  4. 本地.htaccess文件(也php_value)
  5. 脚本(通过ini_set())

在PHPinfo的输出中,"Master"值是已编译的默认值,"Local"值是实际生效的值.它可以与默认值保持不变,也可以在上述任何位置覆盖.

另请注意,PHP通常具有用于命令行和基于Web服务器的操作的不同.ini文件.phpinfo()从命令行进行检查将报告与在基于Web的脚本中运行它时不同的值.


小智 23

ini_set('memory_limit', '128M'); 
Run Code Online (Sandbox Code Playgroud)

要么

php.ini  =>  memory_limit = 128M
Run Code Online (Sandbox Code Playgroud)

要么

php_value memory_limit 128M
Run Code Online (Sandbox Code Playgroud)


Som*_*luk 15

我有同样的问题.我找到了答案:

ini_set('memory_limit', '-1');
Run Code Online (Sandbox Code Playgroud)

注意:服务器的内存使用量不受限制.

更新: 请谨慎使用,因为如果PHP脚本开始使用过多的内存,这可能会降低系统速度,从而导致大量的交换空间使用.你可以使用它,如果你知道程序不会占用太多内存,你也不知道现在设置多少.但是您最终会发现该程序需要多少内存.

您应该始终将内存限制视为@所回答的某个值?ark? dinle.

ini_set('memory_limit', '512M');
Run Code Online (Sandbox Code Playgroud)

提供无限的内存是不好的做法,而是我们应该给出一些我们可以承受的最大限制,然后优化我们的代码或添加一些RAM.

  • 工作正常,直到有什么东西击中你,你的服务器内存不足. (17认同)
  • `memory_limit`存在是有原因的,所以你的服务器不会因为过载而崩溃或承受任何物理损坏.给它无限的内存是不好的做法,而是我们应该给出一些我们可以承受的最大限制,然后优化我们的代码或添加一些RAM. (3认同)

ous*_*aka 5

必须在多个位置配置内存.
设置memory_limit为512M:

sudo vi /etc/php5/cgi/php.ini
sudo vi /etc/php5/cli/php.ini
sudo vi /etc/php5/apache2/php.ini Or /etc/php5/fpm/php.ini
Run Code Online (Sandbox Code Playgroud)

重启服务:

sudo service service php5-fpm restart
sudo service service nginx restart
Run Code Online (Sandbox Code Playgroud)

要么

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

最后它应该解决的问题 memory_limit