ChatGPT解决这个技术问题 Extra ChatGPT

Composer 要求内存不足。 PHP致命错误:允许的内存大小为1610612736字节已用尽

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

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

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

当我尝试运行 composer require 时,出现内存不足错误。

使用版本 ^0.6.0@dev 用于 hwi/oauth-bundle 使用版本 ^1.2@dev 用于 php-http/guzzle6-adapter 使用版本 ^1.10@dev 用于 php-http/httplug-bundle ./composer.json 已更新使用包信息加载作曲家存储库更新依赖项(包括 require-dev)PHP 致命错误:在 phar:///usr/local/Cellar/composer/1.4.2/ 中耗尽允许的内存大小为 1610612736 字节(尝试分配 67108864 字节)第 220 行的 libexec/composer.phar/src/Composer/DependencyResolver/Solver.php 致命错误:phar:///usr/local/Cellar/composer/1.4 中允许的内存大小为 1610612736 字节已用尽(尝试分配 67108864 字节) .2/libexec/composer.phar/src/Composer/DependencyResolver/Solver.php 在第 220 行

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

你最近做过作曲家自我更新吗?不确定您的错误消息中的 1.4.2 是否表示版本 1.4.2 但作曲家的最新版本是 1.6.2。你有多少物理内存?是虚拟机还是云服务器?
@Cerad 是的-我之前做过作曲家自我更新,我的作曲家版本是 1.6.2
@Cerad 这是在我的本地机器上,我绝对应该有足够的内存
在 Composer 以前运行良好的项目中遇到此问题时,我建议运行 composer self-update --rollback。我在使用 v.1.9.3 时开始遇到内存耗尽的问题,当我回滚到 1.8.6 时它停止了。
没有人认为运行 composer require 可以使用超过 1.5G 的内存是相当疯狂的吗?当我第一次看到这个时,我认为这一定是作曲家的一个错误。将内存限制设置为 -1 确实对我有用……但是 1.5G 到底怎么不够?作曲家真的需要这么多吗?

D
Diego Ricardo Valdivia Arreola

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

COMPOSER_MEMORY_LIMIT=-1 作曲家更新也适用于我。
感谢您的命令 php --ini !在 php 7.4 中,您有一个不同的 php ini 文件 (php-cli.ini) 用于 clid
使用 php -d memory_limit=-1 composer.phar install 对我有用。谢谢!
memory_limit= -1 是一个好的解决方案吗?似乎它消除了任何内存消耗限制并且可以用完所有内存。
在 Windows 上,使用 SET COMPOSER_MEMORY_LIMIT=-1
o
odubah

就我而言,当我遇到此错误时,我试图要求 this package

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

COMPOSER_MEMORY_LIMIT=-1 composer require huddledigital/zendesk-laravel

也有帮助。我的 PHP 限制是 128MB,但错误消息说 PHP 作曲家限制是 1.5GB(这意味着它是针对这种特殊情况在其他地方配置的)。所以修改 php.ini 没有帮助,但这个答案有。
2021 年,这个解决方案仍然有效。谢谢!
谢谢,将常量 COMPOSER_MEMORY_LIMIT=-1 放在 composer require xyz 之前使其工作(接受的答案没有)。
你拯救了我的一天,就我而言,我正在安装 COMPOSER_MEMORY_LIMIT=-1 composer require guzzlehttp/guzzle
T
Thomas Vangelooven

manual 的另一个解决方案:

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

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

或者在我的情况下

export COMPOSER_MEMORY_LIMIT=-1
composer <...>

在 Mac 上,我编辑了 ~/.bash_profile 以添加 alias composer="COMPOSER_MEMORY_LIMIT=-1 composer" 并为我解决了这个问题。请务必在更改后获取文件或重新启动终端
完美解决方案(无需更改任何 php 配置)
M
Milla Sense

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

composer self-update --2

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


对于那些 composer self-update --2 - 没有工作并且发生了错误。 composer self-update --stable 完成了工作 :)
其他解决方案不起作用,希望你写了你的......你让我很开心谢谢你
谢谢!,你救了我的工作。
composer self-update --stable 简单快捷的方法,thanx!
composer self-update --stable 然后 composer update 工作。
T
TIGER

在 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" %*

问题解决了 ;)


对我来说最好的,几乎所有的都不适合我。
我还必须更新没有 .bat 扩展名的作曲家文件(添加相同的 -d memory_limit=-1)到最后一行。
在 Windows 中,composer.bat 的位置不必总是 C:\ProgramData\ComposerSetup\bin,但我猜这是默认位置。但是,如果有人想找到 composer.bat 的位置,只需运行 where 命令:如 where composer。这将显示确切的位置。
A
Arno van Oordt

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

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

这是 Windows 环境的最佳答案。谢谢 :)
D
Davide Casiraghi

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

例子

更新作曲家:

COMPOSER_MEMORY_LIMIT=-1 composer update

要安装软件包:

COMPOSER_MEMORY_LIMIT=-1 composer require spatie/laravel-translatable

多谢,伙计!它是全局更新还是仅针对该特定命令?
只是该特定命令的临时解决方案。
谢谢朋友!这是win10的最佳解决方案
我正在使用 laravel 8,我必须在命令之前将 env 添加到类似 env COMPOSER_MEMORY_LIMIT=-1 composer update
j
juanitourquiza

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

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

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


它对我有用! php -d memory_limit=-1 composer.phar 需要 laravel-frontend-presets/tailwindcss --dev
如何永久修复此问题?每次创建新项目时我都需要重做。有什么建议吗?
A
Acapulco

只需设置 memory_limit 指定 composer.phar 文件的完整路径并更新,在我的例子中使用命令:

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

COMPOSER_MEMORY_LIMIT=-1 composer.phar update 也有效。请参阅:getcomposer.org/doc/articles/…
在 ubuntu 上使用这个 php -d memory_limit=-1 /usr/bin/composer update
COMPOSER_MEMORY_LIMIT=-1 作曲家也为我工作.. @mayid 谢谢。 :+1
m
meow2x

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

COMPOSER_MEMORY_LIMIT=-1 composer require the/library

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

希望这可以帮助。


如果您使用的是 Windows CLI,那么这就是您的正确答案。
R
Ruben Gonzalez

最近发现 Composer 在具有大量历史标签的包上消耗高 CPU + 内存。请参阅composer/composer#7577

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

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

只需要全局安装插件?还有什么可做的吗?你能解释一下这个插件实际上是做什么的吗?在这种情况下是否会减少作曲家的内存使用量?
M
Marcus Christiansen

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

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

跑:

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

A
Abduhafiz

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

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

M
Mohamed Hany

窗户呢?

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

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

A
Anatoly Sokolov

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

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


R
Roubi

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

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

在您的计算机某处安装 64 位 php 版本(假设在 C:/php64 中)

在作曲家(在我的例子中使用 cygwin),运行:

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


这个建议对我有用!谢谢。请注意,您还需要更新系统环境变量以全局使用新的 64 位版本。
s
saber tabatabaee yazdi

在 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

这工作的人谢谢你在 2021Jan15
K
Kalle Karlsson

在 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

S
Steven Yip

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

问题背景:

在流浪者的盒子里运行作曲家。尝试运行 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 以获取有关如何处理内存不足错误的更多信息。

已尝试将 php.ini 内存限制设置为 -1。 (还是行不通)。

解决方案:

显然我的 composer.json 和 composer.lock 有一些问题。跑$composer validate,结果是:“锁文件没有更新composer.json最新的变化,建议你运行composer update。”所以我运行了 $ composer update,所有的依赖都解决了。恕我直言,当依赖项出现问题时,可能是树构建不同步,因此出现内存不足的问题。

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


J
Jose Seie

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

要找到您的 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

我们要更改的文件是 Loaded Configuration。

打开并搜索 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

保存文件后,您可以通过运行以下命令来验证 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


i
igniel

对于 Centos 7 使用:

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

T
Ted Mosby
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)


我不明白为什么有人会故意让任何东西占用这么多内存。内存使用是个问题。 Composer 应该能够以 4GB 运行,即便如此,这也是可悲的资源占用。如果您在自动缩放托管环境中,当您的每月账单进来时,您会遇到一些令人讨厌的惊喜......
P
Prosanta Chaki

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

希望这能解决问题;快乐编码!


e
emjayess

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


F
Faisal Ahmed

我使用这个命令 COMPOSER_MEMORY_LIMIT=-1 解决了这个问题

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


A
Adie RT

对我来说,这适用于共享主机。

COMPOSER_MEMORY_LIMIT=-1 composer update

T
TarangP

在我的情况下,我尝试在我的 Windows 系统中安装 Laravel framework 而不说明 xampp 服务器 (或 apache 服务器),但出现以下错误

致命错误:允许的内存大小为 1610612736 字节已用尽

一旦我启动 xampp 服务器(或 apache 服务器),它就开始安装 laravel 框架并且错误消失了。

所以实际上有时你必须检查这个,否则它会比平时花费更长的时间并消耗更多的内存,结果大小会被耗尽。


S
Saud Alfadhli

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

检查您之前是否做过composer install。您可能只是将存储库克隆到您的机器上。因此,您必须在需要新软件包之前安装旧软件包。或者您可能希望将此选项 --profile 包含在您的 composer 命令中以查看时间和内存使用信息。


V
Vadim Izmalkov

就我而言:

Windows 10 和 Docker Desktop 的工作原理:

docker-compose -f .docker/docker-compose.yml exec php env COMPOSER_MEMORY_LIMIT=-1 composer require fideloper/proxy


V
Vignesh PS

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

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

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

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

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

php --ini

这看起来像其他答案的副本。你有什么新的想添加的吗?
我想,发布我的问题的解决方案可能对某人有所帮助。而不是我找不到任何替代的新解决方案。

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅