Composer: file_put_contents (./ composer.json): Stream konnte nicht geöffnet werden: Berechtigung verweigert


91

Ich versuche, Prestissimo auf einem Ubuntu 16.04-Server zu installieren , aber das führt zu einem Fehler:

$ 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>]...

Ich bin als Benutzer angemeldet kramer65, daher würde ich nicht wissen, warum es nicht in meinen Home-Ordner schreiben kann. Meine normale Reaktion auf a permission deniedist zu verwenden sudo, aber der Komponist sagt dann immer:

Führen Sie Composer nicht als Root / Superuser aus! Weitere Informationen finden Sie unter https://getcomposer.org/root

Irgendeine Idee, wie ich das lösen kann?


Mag offensichtlich sein, muss aber gefragt werden ... was sind die aktuellen Berechtigungen für Sie composer.json?
TheGentleman

@ GentlemanMax - Es ist noch keine ~/.composer/composer.jsonDatei vorhanden.
kramer65

Was sind die Berechtigungen für ~/.composer/Ordner? kramer65hat anscheinend kein schreibrecht, ein chmodkönnte nützlich sein.
AnthonyB

@AnthonyB - Ja, ich sehe jetzt ~/.composer/gehört root. Aber ich habe gerade einige andere Systeme überprüft und Composer auf einer neuen Ubuntu 16.04-VM installiert, die immer im Besitz von ist root. Ich kann natürlich chmododer chownso, aber ist es eine gute Idee, dieses Standardverhalten zu ändern?
kramer65

Ich habe gerade mein Ubuntu 16.04 überprüft, in der Tat .composer gehört root, mit 755Modus. Ein Eigentümerwechsel ist also wahrscheinlich nicht die Lösung.
AnthonyB

Antworten:


242

Ich hatte dieses Problem, Laravel / Lumen zu installieren.

Es kann mit dem folgenden Befehl gelöst werden:

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

1
Dies funktionierte auch für mich in der yii2-Installation des Composer Global Asset Plugins, danke Samuel
Geoff,

3
Die Verwendung von $ USER anstelle von 'myuser' ist die bessere Option.
Zennin

2
Es hat das Problem für mich nicht behoben, seltsam. Irgendwelche anderen Tipps?
Mylord

2
@mylord Stellen Sie sicher, dass der .composer von Ihrem Benutzer stammt. Versuchen Sie, mit~/.composer
Samuel Martins

6
Dies ist ein guter Tipp. Wenn Sie jedoch bereits Ihr Projekt erstellt haben, führen Sie sudo chown -R $ USER my_project
Daniel

16

Um dies zu beheben, sollten Sie ein Terminalfenster öffnen und den folgenden Befehl eingeben:

sudo chown -R user ~/.composer( userin Ihrem Fall als aktueller Benutzer kramer65)

Nachdem Sie diesen Befehl ausgeführt haben, sollten Sie über die Berechtigung verfügen, Ihren globalen Composer-Befehl require auszuführen.

Möglicherweise müssen Sie auch die .composer-Datei aus dem aktuellen Verzeichnis entfernen. Öffnen Sie dazu ein Terminalfenster und geben Sie den folgenden Befehl ein:

sudo rm -rf .composer


3

Ich war auch mit diesem Problem konfrontiert, aber in meinem Fall befand ich mich im falschen Verzeichnis. Überprüfen Sie das Verzeichnis, in dem Sie arbeiten


2

In meinem Fall .composergehörte root, also habe ich es getan sudo rm -fr .composerund dann hat mein globaler Bedarf funktioniert.

Sei gewarnt! Sie möchten diesen Befehl nicht verwenden, wenn Sie nicht sicher sind, was Sie tun.


2

In meinem Fall habe ich keine Probleme mit ~/.composer.
Als ich mich im Stammordner der Laravel-App befand, tat ich das sudo chown -R $USER composer.lockund es war hilfreich.


1

Dies ist möglicherweise ein Super-Edge-Fall. Wenn Sie jedoch Travis CI verwenden und das Caching nutzen, möchten Sie möglicherweise den gesamten Cache löschen und erneut versuchen.

Ich habe mein Problem behoben, als ich von Sudo zu Nicht-Sudo-Builds gewechselt bin.


0

Ich habe die gleiche Ausnahme erhalten, aber in meinem Fall verwende ich PowerShell zum Ausführen von Befehlen. Daher habe ich dies mit der Anweisung behoben, zuerst mehrere Dateien zu entsperren. PS C:\> dir C:\executable_file_Path\*PowerShell* | Unblock-File und verwenden Sie dann Folgendes, um das Paket zu laden & 'C:\path_to_executable\php.exe' "c:\path_to_composer_.phar_file\composer.phar "require desired/package


0

In meinem Fall habe ich sudo mkdir projectFoldereinen Ordner erstellt. Es gehörte dem Root-Benutzer und ich war mit einem Nicht-Root-Benutzer angemeldet.

Also habe ich die Ordnerberechtigung mit dem Befehl geändert sudo chown mynonrootuser:mynonrootuser projectFolderund dann hat es gut funktioniert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.