作曲家需要内存不足.PHP 致命错误:允许的内存大小为 1610612736 字节已耗尽



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

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

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

当我尝试运行作曲家要求时,我收到内存不足错误。

使用

version ^0.6.0@dev for hwi/oauth-bundle 使用版本 ^1.2@dev 对于 php-http/guzzle6-adapter 使用版本 ^1.10@dev for php-http/httplug-bundle ./composer.json 已更新 正在加载 包含包信息的作曲家存储库 更新依赖项 (包括需求开发)

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

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

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

要获取当前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

另一个快速解决方案:

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

或者只是:

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

就我而言,当我收到此错误时,我试图要求这个包。

你可以像这样运行,你不必更新 PHP INI 文件:

COMPOSER_MEMORY_LIMIT=-1 composer require huddledigital/zendesk-laravel

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

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

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

或者就我而言

export COMPOSER_MEMORY_LIMIT=-1
composer <...>

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

composer self-update --2

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

在 Windows 10 上;

转到C:ProgramDataComposerSetupbin

编辑: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" %*

问题已解决;)

由于前面的答案都不包含set因此我花了一点时间来弄清楚如何在 Windows 中执行此操作而无需更改 php.ini,但以下是对我有用的:

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

我已经绕过了 Homestead Laravel(流浪者)虚拟机中的问题,该虚拟机运行前面有COMPOSER_MEMORY_LIMIT=-1的作曲家命令:

例子

要更新作曲家:

COMPOSER_MEMORY_LIMIT=-1 composer update

要安装软件包:

COMPOSER_MEMORY_LIMIT=-1 composer require spatie/laravel-translatable

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

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

我用这一行更新了Symfony 5。此命令也适用于 laravel 7。

只需设置指定 composer.phar 文件的完整路由的memory_limit并更新,在我的情况下使用以下命令:

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

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

COMPOSER_MEMORY_LIMIT=-1 composer require the/library

将来必须再次为其添加前缀。

希望这有帮助。

最近发现 Composer 在具有大量历史标签的软件包上消耗高 CPU + 内存。参见作曲家/作曲家#7577

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

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

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

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

跑:

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

Windows呢?

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

php -d memory_limit=-1 "C:ProgramDataComposerSetupbincomposer.phar" update

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

编辑:具有内存调整的作曲家2发布

在 Windows by Xampp 我刚刚更改:

;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

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

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

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

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

在 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

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

问题上下文:

  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. 所以我运行了$作曲家更新,所有依赖项都解决了。恕我直言,当依赖项存在一些问题时,可能是树构建不同步,因此内存不足问题。

希望这对那里的任何人都有帮助。

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

希望这将解决问题;祝您编码愉快!

我将这里有用且可接受的答案压缩或打包为可重用的 (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)。

就我而言,我的作曲家版本是 1.x,它是回溯的。 将版本升级到2.x后,它按预期工作。

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

检查您以前是否做过composer install。您可能只是将存储库克隆到您的计算机。因此,您必须先安装旧软件包,然后才能要求新软件包。或者,您可能希望在作曲家命令--profile包含此选项,以查看计时和内存使用情况信息。

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

Wamp,它位于C:wamp64binphpphp7.2.23php.ini。请注意PHP版本,因为它是名称文件夹,就我而言,我有php7.2.23

Laragon,它位于C:laragonbinphpphp-7.2.23-Win32-VC15-x64php.ini,就像我的情况一样。

如果您不想允许无限空间,您可以设置任何方便的大小,就我而言,我做了memory_limit = 2G

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

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

最新更新