首页 文章

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

提问于
浏览
39

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

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

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

7 回答

  • 1
    ini_set('memory_limit', '128M');
    

    要么

    php.ini  =>  memory_limit = 128M
    

    要么

    php_value memory_limit 128M
    
  • 14

    必须在多个位置配置内存 .
    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
    

    重启服务:

    sudo service service php5-fpm restart
    sudo service service nginx restart
    

    要么

    sudo service apache2 restart
    

    最后它应该解决 memory_limit 的问题

  • 5
    1 check current limit:
    (in my os)php -i | grep limit  => memory_limit => 256M => 256M
    
    2  locate php.ini 
    php --ini =>   
    Configuration File (php.ini) Path: /etc
    Loaded Configuration File:         /etc/php.ini
    Scan for additional .ini files in: /etc/php.d
    Additional .ini files parsed:      /etc/php.d/curl.ini 
    ...
    
    3 change memory_limit in php.ini
    vi /etc/php.ini
    memory_limit = 512M
    
    4 restart nginx and (php-fpm if being used)
    service php-fpm restart
    service nginx restart
    
  • 3

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

    ini_set('memory_limit', '-1');
    

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

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

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

    ini_set('memory_limit', '512M');
    

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

  • 2

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

    • 主系统 php.ini (通常在/ etc某处)

    • 在Apache的配置中某处(httpd.conf或每站点.conf文件,通过 php_value

    • CLI和CGI可以有不同的 php.ini (使用命令 php -i | grep memory_limit 来检查CLI配置文件)

    • 本地.htaccess文件(也是 php_value

    • in-script(通过 ini_set()

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

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

  • 36

    如果您确定在配置php.ini后重新启动了Apache,那么您可能会查看错误的php.ini文件

  • 22

    如果通过增加内存限制,您已经摆脱了错误并且您的代码现在可以正常工作,那么您将需要采取措施来减少内存使用量 . 以下是一些可以减少它的方法:

    如果您正在阅读文件,请逐行阅读,而不是将整个文件读入内存 . 看看fgets和SplFileObject :: fgets . 如果您使用的是PHP 5.3,请升级到新版本的PHP . PHP 5.4和5.5使用更少的内存 .

    避免将大型数据集加载到数组中 . 相反,请处理较大数据集的较小子集,并在必要时将数据保存到数据库中以减少内存使用 .

    尝试使用第三方库的最新版本或次要版本(例如1.9.3与1.8.2相比),并使用更稳定的版本 . 有时,新版本的库会更有效地编写 .

    如果您有一个不常见或不稳定的PHP扩展,请尝试升级它 . 它可能有内存泄漏 .

    如果您正在处理大型文件而您无法逐行阅读,请尝试将文件分成许多较小的文件并单独处理 . 禁用您不需要的PHP扩展 .

    在问题区域中,取消设置包含大量数据的变量,以后的代码中不需要这些变量 .

    来自:https://www.airpair.com/php/fatal-error-allowed-memory-size

相关问题