Композитору требуется нехватка памяти. Неустранимая ошибка 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, я получаю сообщение об ошибке нехватки памяти.

Using version ^0.6.0@dev for hwi/oauth-bundle Using version ^1.2@dev for php-http/guzzle6-adapter Using version ^1.10@dev for php-http/httplug-bundle ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev)

PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 67108864 bytes) in phar:///usr/local/Cellar/composer/1.4.2/libexec/composer.phar/src/Composer/DependencyResolver/Solver.php on line 220

Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 67108864 bytes) in phar:///usr/local/Cellar/composer/1.4.2/libexec/composer.phar/src/Composer/DependencyResolver/Solver.php on line 220

Я попытался установить memory_limit на 2G в моем файле php.ini, но это не сработало. Я нашел свой php.ini, запустив php -i | grep php.ini

Вы в последнее время занимались самообновлением композитора? Не уверен, что 1.4.2 в вашем сообщении об ошибке указывает на версию 1.4.2, но последняя версия композитора - 1.6.2. А сколько у вас физической памяти? Это виртуальная машина или облачный сервер?

Cerad 10.03.2018 20:03

@Cerad Да, я делал самообновление композитора раньше, и моя версия композитора - 1.6.2

Brian Chen 10.03.2018 23:02

@Cerad, это на моей локальной машине, и у меня определенно должно быть достаточно памяти

Brian Chen 10.03.2018 23:03

При возникновении этой проблемы в проектах, где ранее Composer работал нормально, я бы посоветовал запустить composer self-update --rollback. Я начал сталкиваться с нехваткой памяти с v.1.9.3, которая прекратилась при откате до 1.8.6.

karolus 15.11.2019 04:42

Никто другой не думает, что это безумие, что работающий composer require может использовать более 1,5 ГБ памяти? Когда я впервые увидел это, я подумал, что это ошибка в композиторе. Установка лимита памяти на -1 сработала для меня ... но как, черт возьми, 1.5G недостаточно? Неужели композитору столько нужно?

Daniel Howard 03.08.2020 12:55

См. Это ошибки ограничения памяти

Arash Younesi 20.10.2020 23:14
stackoverflow.com/questions/21815635/… следуйте этому, чтобы получить быстрое и быстрое решение.
pankaj kumar 29.10.2020 11:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
304
7
401 226
33
Перейти к ответу Данный вопрос помечен как решенный

Ответы 33

Ответ принят как подходящий

Чтобы получить текущее значение 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 у меня тоже работает обновление композитора.

Kishan Patel 07.06.2020 06:08

Спасибо за команду php --ini! в php 7.4 у вас есть другой файл php ini (php-cli.ini) для clid

Vincent Decaux 11.06.2020 12:27

использование php -d memory_limit=-1 composer.phar install сработало для меня. Спасибо!

Tomasz Kuter 21.06.2020 17:28

memory_limit = -1 хорошее решение? похоже, что он снимает ограничение на потребление памяти и может использовать всю ее.

kamote ulalo 23.06.2020 07:53

@kamoteulalo php -d влияет только на запущенную команду, btw memory_limit помогает предотвратить плохо написанные сценарии, которые съедают всю доступную память на сервере, поэтому, если ваш код хорошо написан, можно не бояться установить memory_limit на unlimited. но все же это не рекомендуется.

Adam 22.08.2020 22:52

В Windows используйте SET COMPOSER_MEMORY_LIMIT=-1

Vincent Decaux 06.10.2020 15:53

Спасибо за быстрое решение Адам и Винсент

drakogemini2 26.11.2020 20:05

Для меня внутри бродячей машины и при использовании composer как части другого скрипта он работает, добавляя COMPOSER_MEMORY_LIMIT=-1 к команде.

daco 08.02.2021 10:29

При использовании php и композитора внутри контейнера docker dev это то, что у меня сработало docker-compose exec -e COMPOSER_MEMORY_LIMIT=-1 <container_id> composer require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

Nacho Mezzadra 15.03.2021 16:04

Просто установите 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/…

mayid 25.01.2019 23:56

на ubuntu используйте этот php -d memory_limit=-1 /usr/bin/composer update

sneaky 12.06.2019 15:23

COMPOSER_MEMORY_LIMIT = -1 у меня тоже работает композитор .. @mayid Спасибо. : +1

Kishan Patel 07.06.2020 06:07

Вот еще один способ решить эту проблему под Windows, если вы используете Wampserver. Действительно, на уровне wampserver есть два файла php.ini: файл PHP, который можно найти в местоположении C: \ wamp64 \ bin \ php \ phpx.xx \ php.ini, и файл Apache, который можно найти в местоположении C: \ wamp64 \ bin \ apache \ apachex.xx \ bin \ php.ini. Оба эти файла имеют параметр memory_limit. Так что для уверенного решения этой проблемы лучше установить параметр memory_limit = -1 сразу в обоих файлах.

Установка memory_limit для веб-сервера не повлияет на запуск Composer. Кроме того, глобальное использование memory_limit = -1 должно быть самым последним вариантом, поскольку при этом все запущенные процессы PHP открываются до нехватки памяти. Лучше установите его Только, когда он вам нужен, напрямую привязанный к процессу запуска

Nico Haase 17.12.2019 16:41

Недавно было обнаружено, что Composer потребляет много ресурсов ЦП и памяти для пакетов с большим количеством исторических тегов. См. композитор / композитор # 7577

Чтобы решить эту проблему, используйте symfony/flex или https://github.com/rubenrua/symfony-clean-tags-composer-plugin.

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

Просто нужно установить плагин глобально? Больше ничего не поделаешь? Не могли бы вы объяснить, что на самом деле делает этот плагин? Уменьшает ли использование памяти композитором в таких случаях?

rineez 17.09.2020 20:50

Еще одно решение от руководство по эксплуатации:

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", и это решило проблему для меня. Обязательно укажите источник файла после изменения или перезапустите терминал.

nicholas.alipaz 24.09.2019 01:43

идеальное решение (не нужно менять конфигурацию php)

scibuff 26.02.2021 16:58

В моем случае я пытался потребовать этот упаковка, и я получал PHP Fatal error: Allowed memory size of.

Мне показалось, что так легко работать, и вам не нужно обновлять INI-файл PHP.

пример: COMPOSER_MEMORY_LIMIT=-1 composer require huddledigital/zendesk-laravel

Надеюсь, это кому-то поможет.

Тоже помогло. Мой лимит PHP был 128 МБ, но в сообщении об ошибке говорилось, что ограничение PHP composer составляет 1,5 ГБ (что означает, что он настроен в другом месте для этого конкретного случая). Так что модификация php.ini не помогла, но этот ответ помог.

Tom 25.07.2020 10:12

You can use a specific php Version when running Composer

Если, как и я, по какой-то причине вы используете PHP 32 бита, даже если ваш компьютер 64-битный, это всегда будет ограничивать объем памяти, выделяемой Composer. Я решил свою проблему так:

  • Установите 64-битную версию php где-нибудь на вашем компьютере (скажем, в C: / php64)
  • В композиторе (используя cygwin в моем случае) запустите:

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

Это предложение сработало для меня! Спасибо. Обратите внимание, что вам также необходимо обновить переменную системной среды, чтобы использовать новую 64-битную версию во всем мире.

Ojchris 13.05.2020 10:14

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

Задача решена ;)

лучший для меня, почти все у меня не работали.

krachleur 27.05.2020 21:23

Мне также пришлось обновить файл композитор без расширения .bat (добавив тот же -d memory_limit = -1) в последнюю строку.

Maulik 19.06.2020 00:17

В Windows местоположение composer.bat не обязательно всегда должно быть C:\ProgramData\ComposerSetup\bin, но я предполагаю, что это местоположение по умолчанию. Однако, если кто-то хочет найти местоположение composer.bat, просто нужно запустить команду where: например, where composer. Это покажет точное местоположение.

rineez 17.09.2020 20:47

перейдите и найдите php.ini внутри вашего каталога PHP, в случае xampp он будет внутри xampp / PHP и внутри файла php.ini обновите memory_limit: 512M до 2048M

Пожалуйста, добавьте еще несколько пояснений к своему ответу - OP заявляет, что он уже установил memory_limit на 2G

Nico Haase 17.12.2019 16:39

Убедитесь, что пакет не требуется, прежде чем убедиться, что папка поставщика существует.

Проверьте, делали ли вы composer install раньше. Возможно, вы просто клонировали репозиторий на свой компьютер. Итак, вам необходимо установить старые пакеты, прежде чем требовать новый. Или вы можете включить эту опцию --profile в свою команду композитора, чтобы увидеть информацию о времени и использовании памяти.

Просто хочу поделиться своей ситуацией по этому поводу.

Контекст проблемы:

  1. Бегущий композитор в бродячей коробке.
  2. Получал это сообщение после попытки запустить composer require "laravel-doctrine / orm: ~ 1.4.13":

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.

  1. Пробовали установить ограничение памяти php.ini на -1. (все еще не работает).

Решение:

  1. По-видимому, у моих composer.json и composer.lock есть некоторые проблемы. Запустил $ composer validate, и результат был: «Файл блокировки не обновлен с учетом последних изменений в composer.json, рекомендуется запустить composer update».

  2. Итак, я запустил обновление $ composer, и все зависимости разрешены. Imho, когда у зависимостей есть некоторые проблемы, возможно, построение дерева не синхронизировано, отсюда проблема нехватки памяти.

Надеюсь, это поможет кому-нибудь.

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)

Поскольку ни один из предыдущих ответов не включал set, мне потребовалось немного времени, чтобы понять, как это сделать в Windows, не изменяя php.ini, но вот что сработало для меня:

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

Это лучший ответ для среды Windows. Спасибо :)

sykez 22.09.2020 19:46

Работаем на windows 10, спасибо

Radames E. Hernandez 24.03.2021 20:21

Я использую 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

Чтобы переопределить это и исправить проблему на локальном компьютере, вы можете внести следующие изменения в файл конфигурации 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

На всякий случай вы получите ошибку композитора:

Could not open input file: composer

запустить:

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

Я сжал или упаковал полезный и принятый ответ здесь в многоразовые (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 в системе).

Для Macbook: запустите команду sudo nano ~/.bash_profile, чтобы отредактировать bash_profile, затем добавьте alias composer = "COMPOSER_MEMORY_LIMIT=-1 composer" в этот файл, затем сохраните и выйдите.

Надеюсь, это решит проблему; Удачного кодирования!

Запуск composer dump-autoload решает эту проблему для меня.

Иногда проблема заключается в ограничении памяти композитора. В моем случае я попытался увеличить лимит памяти php, но все равно получил ошибку. Вы можете использовать COMPOSER_MEMORY_LIMIT=-1, чтобы обойти это. Используйте его как префикс:

COMPOSER_MEMORY_LIMIT=-1 composer require the/library

В будущем вам придется снова добавить префикс.

Надеюсь это поможет.

Если вы работаете с Windows CLI, это правильный ответ.

Hassan Tahir 08.05.2021 14:24

Для этой ошибки в 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

Pham Quang 15.04.2021 09:58

Чтобы пропустить ограничение памяти и ошибку версии, используйте следующий код:

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

На 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

Как пишет Хосе Сейе, установите память на

memory_limit = -1 or memory_limit = 1G

как насчет окон?

Я использую Windows 10, и эта команда у меня сработала,

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

в окнах от xampp я только что изменил:

;memory_limit=512M 

в php.ini в:

memory_limit =-1

затем перезапустите Apache с помощью xampp

вот результат:

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

Это работает, чувак, спасибо, чувак, 15 января 2021 года.

Mohamed Raza 15.01.2021 06:56

Я решил эту проблему с помощью этой команды COMPOSER_MEMORY_LIMIT = -1

Пример: COMPOSER_MEMORY_LIMIT = -1 композитору требуется larval / ui

Предварительная версия Composer 2.0 уже доступна: https://github.com/composer/composer/releases Исправленная проблема для меня. Вы можете настроить предварительный просмотр с composer self-update --preview

Обновлено: выпущен Composer 2 с настройкой памяти

Я обошел проблему в виртуальной машине Homestead Laravel (vagrant), на которой выполняются команды композитора, которым предшествует COMPOSER_MEMORY_LIMIT=-1:

Примеры

Чтобы обновить Composer:

COMPOSER_MEMORY_LIMIT=-1 composer update

Чтобы установить пакет:

COMPOSER_MEMORY_LIMIT=-1 composer require spatie/laravel-translatable

Спасибо чувак! Он обновляется глобально или только для этой конкретной команды?

andcl 11.10.2020 16:11

Просто временное решение для этой конкретной команды.

Davide Casiraghi 11.10.2020 16:58

Это работает для меня

Jonjie 09.03.2021 18:08

Спасибо, амиго! Лучшее решение для win10

Aleksandur Atanasov 25.03.2021 19:14

Я использую laravel 8, и мне пришлось добавить env перед командой к чему-то вроде этого env COMPOSER_MEMORY_LIMIT = -1 composer update

stanley mbote 27.04.2021 17:08

Та же проблема, ничего, связанное с "memory_limit", не работало, но ..

composer self-update --2

..решил мою проблему. (обновление: 1.10.17 -> 2.0.4)

Для тех composer self-update --2 - не работал и произошла ошибка. composer self-update --stable сделал свою работу :)

WebMan 29.11.2020 10:47

Спасибо, мужик, реши мою проблему

HadiNiazi 14.01.2021 19:32

другие решения не сработали, надеюсь, вы написали свое ... вы сделали мой день, спасибо

Mohamed Elleuch 01.02.2021 14:26

Мерси !, вы спасли мою работу.

Herman 04.03.2021 09:10

только это сработало для меня

Benjamin Ini 03.04.2021 04:32

В моем случае:

Windows 10 и Docker Desktop работают:

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

Вам просто нужно увеличить лимит памяти для файла "php.ini", чтобы решить проблему.

найдите "memory_limit" в файле php.ini.

просто измените значение memory_limit на 2G, как показано ниже

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

чтобы переместить файл php с помощью команды ниже.

php --ini

Это похоже на дубликат других ответов. Вы хотите добавить что-нибудь новое?

Nico Haase 13.04.2021 09:58

Я подумал, что публикация решения моей проблемы может кому-то помочь. вместо того, чтобы найти альтернативное новое решение.

Vignesh PS 13.04.2021 21:20

В моем случае мне не хватало раздела подкачки. Более подробная информация: https://github.com/composer/composer/issues/7348#issuecomment-414178276

для Centos 7 используйте:

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

Другие вопросы по теме