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

Bri*_*hen 32 php symfony composer-php

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

composer require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle
Run Code Online (Sandbox Code Playgroud)

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已更新使用包信息加载composer存储库更新依赖项(包括require-dev)

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

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

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

odu*_*bah 372

在我的情况下,我试图要求这个,我得到了PHP Fatal error: Allowed memory size of.

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

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

希望这有助于某人。


小智 67

同样的问题,与“memory_limit”相关的任何内容都不起作用,但是..

composer self-update --2
Run Code Online (Sandbox Code Playgroud)

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

  • 对于那些“作曲家自我更新--2” - 不起作用并且发生了错误。`composer self-update --stable` 完成了这项工作:) (11认同)

Ada*_*dam 60

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

php -r "echo ini_get('memory_limit').PHP_EOL;"
Run Code Online (Sandbox Code Playgroud)

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

; Use -1 for unlimited or define an explicit value like 2G
memory_limit = -1
Run Code Online (Sandbox Code Playgroud)

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

php -d memory_limit=-1 composer.phar require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle
Run Code Online (Sandbox Code Playgroud)

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

php --ini
Run Code Online (Sandbox Code Playgroud)

  • COMPOSER_MEMORY_LIMIT=-1 作曲家更新也适用于我。 (57认同)
  • 在 Windows 上,使用“SET COMPOSER_MEMORY_LIMIT=-1” (9认同)
  • 使用``php -d memory_limit=-1composer.phar install```对我有用。谢谢! (6认同)

Dig*_*man 57

在 Windows 10 上;

C:\ProgramData\ComposerSetup\bin

编辑:composer.bat并添加memory_limit=-1到最后一行,如下所示。

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

问题解决了 ;)

  • 对我来说最好的一个,几乎所有这些都不适合我。 (4认同)
  • 在 Windows 中,“composer.bat”的位置不必总是“C:\ProgramData\ComposerSetup\bin”,但我猜这是默认位置。但是,如果有人想找到“composer.bat”的位置,只需运行“where”命令:如“wherecomposer”。这将显示确切的位置。 (2认同)

Arn*_*rdt 41

由于以前的答案都没有包括在内,set因此我花了一些时间才弄清楚如何在不更改 php.ini 的情况下在 Windows 中执行此操作,但以下是对我有用的方法:

set COMPOSER_MEMORY_LIMIT=-1
composer require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle
Run Code Online (Sandbox Code Playgroud)

  • 这是Windows环境下的最佳答案。谢谢 :) (3认同)

Dav*_*ghi 35

我已经绕过了运行 Composer 命令的 Homestead Laravel (vagrant) 虚拟机中的问题,前面有COMPOSER_MEMORY_LIMIT=-1

例子

更新作曲家:

COMPOSER_MEMORY_LIMIT=-1 composer update
Run Code Online (Sandbox Code Playgroud)

要安装软件包:

COMPOSER_MEMORY_LIMIT=-1 composer require spatie/laravel-translatable
Run Code Online (Sandbox Code Playgroud)


jua*_*iza 27

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

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

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


meo*_*w2x 25

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

COMPOSER_MEMORY_LIMIT=-1 composer require the/library
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助。


Mar*_*sen 20

以防万一您遇到 Composer 错误:

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

跑:

php -d memory_limit=-1 /usr/local/bin/composer require ...
Run Code Online (Sandbox Code Playgroud)


Abd*_*fiz 19

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

COMPOSER_MEMORY_LIMIT=-1 composer require <package-name> --ignore-platform-reqs
Run Code Online (Sandbox Code Playgroud)


小智 13

窗户呢?

我使用 Windows 10,这个命令对我有用,

php -d memory_limit=-1 "C:\ProgramData\ComposerSetup\bin\composer.phar" update
Run Code Online (Sandbox Code Playgroud)


Ana*_*lov 13

Composer 2.0 预览版现已推出:https : //github.com/composer/composer/releases 为我解决了问题。您可以设置预览composer self-update --preview

编辑:发布内存调整的 Composer 2


小智 12

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

php -d memory_limit=-1 C:/wamp64/composer.phar update
Run Code Online (Sandbox Code Playgroud)

  • `COMPOSER_MEMORY_LIMIT=-1 composer.phar update` 也有效。请参阅:https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors (6认同)
  • 在 ubuntu 上使用这个 `php -d memory_limit=-1 /usr/bin/composer update` (5认同)

Tho*_*ven 9

手册中的另一种解决方案:

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

COMPOSER_MEMORY_LIMIT=-1 composer.phar <...>
Run Code Online (Sandbox Code Playgroud)

或者就我而言

export COMPOSER_MEMORY_LIMIT=-1
composer <...>
Run Code Online (Sandbox Code Playgroud)

  • 在Mac上,我编辑了〜/ .bash_profile以添加alias composer =“ COMPOSER_MEMORY_LIMIT = -1 composer”,这为我解决了这一问题。更改后请确保源文件或重新启动终端 (3认同)

小智 8

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

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

composer global require rubenrua/symfony-clean-tags-composer-plugin
Run Code Online (Sandbox Code Playgroud)

  • 只需要全局安装插件吗?还有什么可做的吗?您能解释一下这个插件的实际用途吗?在这种情况下,作曲家是否会减少内存使用量? (2认同)

Rou*_*ubi 7

您可以在运行Composer时使用特定的 php 版本

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

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

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


sab*_*zdi 7

在 xampp 的 windows 中,我刚刚更改了:

;memory_limit=512M 
Run Code Online (Sandbox Code Playgroud)

在 php.ini 中:

memory_limit =-1
Run Code Online (Sandbox Code Playgroud)

然后通过 xampp 重新启动 Apache

这是结果:

; Maximum amount of memory a script may consume
; http://php.net/memory-limit
memory_limit =-1
;memory_limit=512M
Run Code Online (Sandbox Code Playgroud)


小智 6

在 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
Run Code Online (Sandbox Code Playgroud)

如果解析了额外的 .ini 文件:memory_limit 需要在

/usr/local/etc/php/7.4/conf.d/php-memory-limits.ini
Run Code Online (Sandbox Code Playgroud)

正如 Jose Seie 所写,将内存设置为

memory_limit = -1 or memory_limit = 1G
Run Code Online (Sandbox Code Playgroud)


小智 5

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

问题上下文:

  1. 在流浪盒子中运行作曲家。
  2. 尝试运行 composer require "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 validate,结果是:“锁文件不是最新的composer.json的最新变化,建议运行composer update。”

  2. 所以我运行了 $ composer update,所有的依赖都解决了。恕我直言,当依赖项出现问题时,可能树构建不同步,因此出现内存不足问题。

希望这可以帮助那里的任何人。


Jos*_*eie 5

要覆盖此设置并修复本地计算机上的问题,您可以在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
Run Code Online (Sandbox Code Playgroud)

我们要更改的文件是Loaded Configuration

  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
Run Code Online (Sandbox Code Playgroud)
  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