Composer需要耗尽内存。 PHP致命错误:允许的内存大小为1610612736字节耗尽

时间:2018-03-10 18:19:14

标签: php symfony composer-php

我正在尝试通过运行以下命令将HWIOAuthBundle添加到我的项目中。

composer require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

HWIOAuthBundle github:https://github.com/hwi/HWIOAuthBundle

当我尝试运行composer时,我遇到内存不足错误。

  

将版本^0.6.0@dev用于hwi / oauth-bundle使用版本^1.2@dev   对于php-http / guzzle6-adapter使用版本^ 1.10@dev   php-http / httplug-bundle ./composer.json已更新Loading   具有包信息的composer存储库更新依赖项   (包括require-dev)

     

PHP致命错误:允许的内存大小为1610612736字节   (试图分配67108864字节)   第220行的phar:///usr/local/Cellar/composer/1.4.2/libexec/composer.phar/src/Composer/DependencyResolver/Solver.php

     

致命错误:允许的内存大小为1610612736字节耗尽(尝试过   在中分配67108864个字节)   第220行的phar:///usr/local/Cellar/composer/1.4.2/libexec/composer.phar/src/Composer/DependencyResolver/Solver.php

我尝试在我的php.ini文件中将memory_limit设置为2G但是没有用。我通过运行php -i | grep php.ini

找到了我的php.ini

33 个答案:

答案 0 :(得分:30)

要获取当前的memory_limit值,请运行:

php -r "echo ini_get('memory_limit').PHP_EOL;"

尝试增加php.ini文件中的限制(例如,/etc/php5/cli/php.ini用于类似Debian的系统):

; Use -1 for unlimited or define an explicit value like 2G
memory_limit = -1

或者,您可以使用命令行参数增加限制:

php -d memory_limit=-1 composer.phar require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

要加载php.ini文件位置,请尝试:

php --ini

答案 1 :(得分:28)

由于先前的答案均未包含set,因此我花了点时间弄清楚如何在Windows中完成此操作而不更改php.ini,但这对我有用:

set COMPOSER_MEMORY_LIMIT=-1
composer require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

答案 2 :(得分:19)

同样的问题,与“ memory_limit”有关的任何东西都没有起作用,但是..

composer self-update --2

..解决了我的问题。 (升级:1.1​​0.17-> 2.0.4)

答案 3 :(得分:17)

以防万一您遇到作曲家错误:

无法打开输入文件:作曲家

运行:

php -d memory_limit=-1 /usr/local/bin/composer require ...

答案 4 :(得分:15)

要跳过内存限制和版本错误,请使用以下代码:

COMPOSER_MEMORY_LIMIT=-1 composer require <package-name> --ignore-platform-reqs

答案 5 :(得分:13)

对于macOS Catalina和macOS Big Sur中的此错误,请使用以下行:

php -d memory_limit=-1 /usr/local/bin/composer update --no-plugins

我使用这一行在Symfony 5上进行更新。此命令也适用于laravel 7。

答案 6 :(得分:12)

我在Homestead Laravel(无用)虚拟机中绕过了问题,该虚拟机运行以COMPOSER_MEMORY_LIMIT=-1开头的composer命令:

示例

要更新Composer:

COMPOSER_MEMORY_LIMIT=-1 composer update

要安装软件包:

COMPOSER_MEMORY_LIMIT=-1 composer require spatie/laravel-translatable

答案 7 :(得分:11)

有时问题出在作曲家的内存限制中。就我而言,我尝试增加php内存限制,但仍然收到错误。 您可以使用COMPOSER_MEMORY_LIMIT=-1来解决此问题。 将其用作前缀:

COMPOSER_MEMORY_LIMIT=-1 composer require the/library

您将来必须再次添加前缀。

希望这会有所帮助。

答案 8 :(得分:9)

关于Windows?

我使用Windows 10,并且此命令对我有用,

php -d memory_limit=-1 "C:\ProgramData\ComposerSetup\bin\composer.phar" update

答案 9 :(得分:8)

Composer 2.0预览现已可用:https://github.com/composer/composer/releases 已解决我的问题。您可以使用composer self-update --preview

设置预览

编辑:发布了具有内存调整功能的Composer 2

答案 10 :(得分:6)

只需设置memory_limit,以指定composer.phar文件的完整路径并使用以下命令进行更新:

php -d memory_limit=-1 C:/wamp64/composer.phar update

答案 11 :(得分:5)

在我的情况下,我尝试要求使用此package,而我却获得了PHP Fatal error: Allowed memory size of

我发现这样运行很容易,您不必更新PHP INI文件。

示例:COMPOSER_MEMORY_LIMIT=-1 composer require huddledigital/zendesk-laravel

希望这对某人有所帮助。

答案 12 :(得分:3)

只想分享我在这件事上的情况。

问题上下文:

  1. 在无业游民的盒子中运行作曲家。
  2. 在尝试运行作曲家后获得此消息需要“ laravel-doctrine / orm:〜1.4.13”:

致命错误:在第52行的phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php中,耗尽了1610612736字节(尝试分配4096字节)的允许内存大小 检查https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors,了解有关如何处理内存不足错误的更多信息。

  1. 尝试将php.ini内存限制设置为-1。 (仍然无法正常工作)。

解决方案:

  1. 显然我的composer.json和composer.lock有一些问题。 冉$作曲家验证,结果是: “锁定文件不是最新的composer.json更新,建议您运行composer update。”

  2. 所以我运行了$ composer更新,所有的依赖关系都解决了。恕我直言,当依赖项出现问题时,树的构建可能会不同步,从而导致内存不足的问题。

希望这可以帮助任何人。

答案 13 :(得分:3)

在Mac php 7.4上

运行

php --ini

Configuration File (php.ini) Path: /usr/local/etc/php/7.4
Loaded Configuration File:         /usr/local/etc/php/7.4/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.4/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.4/conf.d/ext-opcache.ini,
/usr/local/etc/php/7.4/conf.d/php-memory-limits.ini

如果解析了其他.ini文件: memory_limit需要更改

/usr/local/etc/php/7.4/conf.d/php-memory-limits.ini

Jose Seie撰写时,将内存设置为

memory_limit = -1 or memory_limit = 1G

答案 14 :(得分:3)

在xampp的Windows中,我刚更改过:

;memory_limit=512M 

在php.ini中为:

memory_limit =-1

然后通过xampp重新启动Apache

这是结果:

; Maximum amount of memory a script may consume
; http://php.net/memory-limit
memory_limit =-1
;memory_limit=512M

答案 15 :(得分:3)

Centos 7 使用:

COMPOSER_MEMORY_LIMIT=-1 composer require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

答案 16 :(得分:2)

Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52 Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.

memory_limit 设置为 -1 对我有用;)(vim /etc/php/7.2/cli/php.ini)

答案 17 :(得分:2)

要覆盖此问题并解决本地计算机上的问题,您可以在php.ini配置文件中进行以下更改。

  1. 要找到您的php.ini配置文件,可以使用以下命令:php --ini

运行此命令后,您应该看到如下输出:

Configuration File (php.ini) Path: /usr/local/etc/php/7.3
Loaded Configuration File:         /usr/local/etc/php/7.3/php.ini <---- note the path
Scan for additional .ini files in: /usr/local/etc/php/7.3/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.3/conf.d/ext-opcache.ini

我们要更改的文件是已加载的配置

  1. 打开并搜索memory_limit,可以设置memory_limit = -1为PHP进程提供无限量的内存,也可以设置512MB, 1G, 2G, 5G,....

    $ nano /usr/local/etc/php/7.3/php.ini

找到并设置:

$ memory_limit = -1 or memory_limit = 1G
  1. 保存文件后,您可以通过运行以下命令来验证PHP的更改,该命令将在php.ini文件中输出当前的内存设置:

    php -r“ echo ini_get('memory_limit')。PHP_EOL;”

注意: 保存后,新的内存将可用。您无需执行其他任何操作。

更多信息:https://support.acquia.com/hc/en-us/articles/360036102614-Overriding-memory-limits-during-local-development-with-Composer

答案 18 :(得分:2)

对于Macbook: 运行命令sudo nano ~/.bash_profile编辑bash_profile,然后在该文件中添加alias composer="COMPOSER_MEMORY_LIMIT=-1 composer",然后保存并退出。

希望这可以解决问题;编码愉快!

答案 19 :(得分:2)

最近发现,Composer在具有很多历史标签的软件包上消耗大量CPU +内存。参见composer/composer#7577

此问题的解决方法是使用symfony/flexhttps://github.com/rubenrua/symfony-clean-tags-composer-plugin

composer global require rubenrua/symfony-clean-tags-composer-plugin

答案 20 :(得分:1)

我在这里将有用的和可接受的答案压缩或打包为可重用(zsh)别名/函数,以便更快,更容易记住:

# composer high-memory
composermem() {
  php -r "echo ini_get('memory_limit').PHP_EOL;"
}
alias composerbig='COMPOSER_MEMORY_LIMIT=-1 composer $1'

({php composer.phar在系统上已经别名为composer)。

答案 21 :(得分:1)

manual中的另一种解决方案:

Composer还遵守COMPOSER_MEMORY_LIMIT环境变量定义的内存限制:

COMPOSER_MEMORY_LIMIT=-1 composer.phar <...>

或者就我而言

export COMPOSER_MEMORY_LIMIT=-1
composer <...>

答案 22 :(得分:0)

在确保供应商文件夹存在之前,请确保不需要软件包。

检查您之前是否完成过composer install。您可能只是将存储库克隆到了计算机。因此,您必须先安装旧软件包,然后再安装新软件包。或者,您可能希望将此选项--profile包含在composer命令中,以查看时间和内存使用信息。

答案 23 :(得分:0)

在xampp的PHP目录中找到php.ini,以防出现在xampp / PHP中 并在php.ini文件中将memory_limit:512M更新为2048M

答案 24 :(得分:0)

我使用此命令COMPOSER_MEMORY_LIMIT = -1

解决了此问题

示例:COMPOSER_MEMORY_LIMIT = -1作曲家需要幼虫/ ui

答案 25 :(得分:0)

在Windows 10上;

转到C:\ ProgramData \ ComposerSetup \ bin

编辑:composer.bat

@echo OFF
:: in case DelayedExpansion is on and a path contains ! 
setlocal DISABLEDELAYEDEXPANSION
php -d memory_limit=-1 "%~dp0composer.phar" %*

问题解决了;)

答案 26 :(得分:0)

  

运行 Composer

时,您可以使用特定的php版本

如果像我一样,由于某种原因,即使您的计算机是64位,也使用的是 PHP 32位,这将始终限制分配给Composer的内存量。我这样解决了我的问题:

  • 在计算机上的某处安装64位php版本(假设在C:/ php64中)
  • 在作曲家中(在我的情况下使用cygwin),运行:

COMPOSER_MEMORY_LIMIT=-1 C:/php64/php.exe ../composer.phar update

答案 27 :(得分:0)

您只需要增加“php.ini”文件的内存限制即可解决问题

在 php.ini 文件中找到“memory_limit”。

只需将 memory_limit 值更改为 2G,如下所示

;http://php.net/memory-limit
memory_limit=2G

使用以下命令重新定位 php 文件。

php --ini

答案 28 :(得分:0)

就我而言,我缺少交换分区。更多信息:https://github.com/composer/composer/issues/7348#issuecomment-414178276

答案 29 :(得分:0)

如果使用Wampserver,这是在Windows下解决此问题的另一种方法。实际上,在wampserver级别,有两个 php.ini 文件,即PHP文件,可以在 C位置找到一个文件:\ wamp64 \ bin \ php \ phpx.xx \ php.ini 以及Apache的Apache,可以在以下位置找到 C:\ wamp64 \ bin \ apache \ apachex.xx \ bin \ php.ini 。这两个文件都具有memory_limit参数。因此,为确保解决此问题,最好一次在两个文件中都设置 memory_limit = -1 参数。

答案 30 :(得分:0)

实际上,如果您将内存限制设置为 -1(无限制),它应该可以工作。 例如:

php -d memory_limit=-1 /usr/local/bin/composer update
/usr/bin/php7.1 -d memory_limit=-1 /usr/local/bin/composer update

答案 31 :(得分:-1)

运行composer dump-autoload为我解决了这个问题。

答案 32 :(得分:-1)

我正在使用php7.2,并且大小默认情况下设置为memory_limit = 512M。 要增加大小,您需要找到php.ini

Wamp中,它位于C:\wamp64\bin\php\php7.2.23\php.ini中。请注意PHP版本,因为它是名称文件夹,在我的情况下,我有php7.2.23

Laragon中,它与我的情况一样位于C:\laragon\bin\php\php-7.2.23-Win32-VC15-x64\php.ini中。

如果您不想允许无限的空间,则可以设置任何方便的尺寸,在我的情况下,我做了memory_limit = 2G

如果要允许无限的空间,可以更改为memory_limit = -1