Композитор: file_put_contents (./ composer.json): не удалось открыть поток: отказано в разрешении


96

Я пытаюсь установить Prestissimo на сервер Ubuntu 16.04, но это приводит к ошибке:

$ composer global require "hirak/prestissimo:^0.3"
Changed current directory to /home/kramer65/.composer


  [ErrorException]
  file_put_contents(./composer.json): failed to open stream: Permission denied


require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--] [<packages>]...

Я вошел в систему как пользователь kramer65, поэтому я не знаю, почему он не может писать в мою домашнюю папку. Моя обычная реакция на a permission denied- использовать sudo, но тогда композитор всегда говорит:

Не запускайте Composer от имени root / суперпользователя! См https://getcomposer.org/root подробности

Есть идеи, как я могу это решить?


1
Может быть очевидно, но нужно спросить ... какие у вас сейчас разрешения composer.json?
TheGentleman

@GentlemanMax - Файла ~/.composer/composer.jsonеще нет.
kramer65

Итак, какие разрешения у ~/.composer/папки? kramer65не имеет права писать вроде chmodбы может пригодиться.
AnthonyB

@AnthonyB - Да, теперь я вижу, что ~/.composer/он принадлежит root. Но я только что проверил некоторые другие системы и установил composer на новую виртуальную машину Ubuntu 16.04, и она всегда принадлежит root. Я могу, конечно, chmodили chownнет, но стоит ли менять это поведение по умолчанию?
kramer65

Я только что проверил свой Ubuntu 16.04, действительно .composer принадлежит root, с 755режимом. Так что смена владельца, вероятно, не решение.
AnthonyB

Ответы:


253

У меня возникла проблема с установкой laravel / lumen.

Это можно решить с помощью следующей команды:

$ sudo chown -R $USER ~/.composer/

1
Это также сработало для меня при установке yii2 плагина глобальных ресурсов композитора, спасибо Samuel
Джефф

3
Лучше использовать $ USER вместо myuser.
zennin

2
Странно, это не решило проблему для меня. Есть еще советы?
mylord

2
@mylord Убедитесь, что файл .composer принадлежит вашему пользователю. Попробуйте бежать с~/.composer
Сэмюэл Мартинс

6
Это хороший совет. Однако, если вы уже создали свой проект, запустите sudo chown -R $ USER my_project
Daniel

16

Чтобы решить эту проблему, вы должны открыть окно терминала и ввести эту команду:

sudo chown -R user ~/.composer( userв вашем случае, будучи вашим текущим пользователем kramer65)

После того, как вы выполнили эту команду, у вас должно быть разрешение на запуск команды composer global require.

Вам также может потребоваться удалить файл .composer из текущего каталога, для этого откройте окно терминала и введите следующую команду:

sudo rm -rf .composer


3

В моем случае .composerвладельцем был root, поэтому я это сделал, sudo rm -fr .composerи тогда мои глобальные требования сработали.

Имейте в виду! Вы не хотите использовать эту команду, если не уверены, что делаете.


3

Я тоже столкнулся с этой проблемой, но в моем случае я был не в том каталоге. Проверьте каталог, в котором вы работаете


2

В моем случае проблем с ~/.composer.
Так что, находясь внутри корневой папки приложения Laravel, я это сделал, sudo chown -R $USER composer.lockи это было полезно.


1

Это может быть крайний случай, но если вы используете Travis CI и пользуетесь преимуществами кеширования, вы можете очистить весь кеш и повторить попытку.

Исправлена ​​моя проблема, когда я переходил от сборки sudo к сборке без sudo.


0

У меня было то же исключение, но в моем случае я использую PowerShell для выполнения команд. Итак, я исправил это с помощью инструкции, чтобы сначала разблокировать несколько файлов. PS C:\> dir C:\executable_file_Path\*PowerShell* | Unblock-File а затем используйте следующее для загрузки пакета & 'C:\path_to_executable\php.exe' "c:\path_to_composer_.phar_file\composer.phar "require desired/package


0

В моем случае я sudo mkdir projectFolderсоздавал папку. Он принадлежал пользователю root, и я вошел в систему под пользователем без полномочий root.

Поэтому я изменил разрешение папки с помощью команды, sudo chown mynonrootuser:mynonrootuser projectFolderи тогда все заработало.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.