Composer:file_put_contents(./ composer.json):ストリームを開くことができませんでした:アクセスが拒否されました


98

PrestissimoをUbuntu16.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を実行しないでください!詳細については、https://getcomposer.org/rootを参照してください

どうすればこれを解決できるか考えていますか?


1
明白かもしれませんが、尋ねる必要があります...あなたの現在の許可は何composer.jsonですか?
TheGentleman 2016

@ GentlemanMax-~/.composer/composer.jsonファイルはまだありません。
kramer65 2016

では、~/.composer/フォルダのアクセス許可は何ですか?kramer65書く権利がないchmodようですが、役に立つかもしれません。
AnthonyB 2016

@ AnthonyB-はい、現在は~/.composer/が所有していることがわかりrootます。しかし、他のいくつかのシステムをチェックし、composerを新しいUbuntu 16.04 VMにインストールしたところ、常にが所有されていrootます。私はもちろんのことができますchmodまたはchownそれが、このデフォルトの動作を変更することをお勧めですか?
kramer65 2016

Ubuntu 16.04をチェックしたところ、実際、.composerはrootが所有しており、755モードがあります。したがって、所有者の変更はおそらく解決策ではありません。
AnthonyB 2016

回答:


259

laravel / lumenをインストールするときにこの問題が発生しました。

次のコマンドで解決できます。

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

1
これは、composerグローバルアセットプラグインのyii2インストールでも機能しました。ありがとうsamuel
Geoff

3
'myuser'の代わりに$ USERを使用することをお勧めします。
zennin 2017

2
奇妙なことに、それは私にとって問題を解決しませんでした。他のヒントはありますか?
mylord 2017年

2
@ mylord.composerがユーザーのものであることを確認してください。一緒に走ってみてください~/.composer
Samuel Martins

6
これは良いヒントです。ただし、プロジェクトを既に作成している場合は、sudo chown -R $ USER my_project
Daniel

17

これを解決するには、ターミナルウィンドウを開いて、次のコマンドを入力する必要があります。

sudo chown -R user ~/.composeruserあなたの場合、あなたの現在のユーザーであるとkramer65

このコマンドを実行した後、composer globalrequireコマンドを実行する権限が必要です。

また、現在のディレクトリから.composerファイルを削除する必要がある場合もあります。これを行うには、ターミナルウィンドウを開き、次のコマンドを入力します。

sudo rm -rf .composer


3

私の場合、.composerrootが所有していたので、そうし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を使用してフォルダーのアクセス許可を変更すると、正常に機能しました。


0

私にとっては、Ubuntu18.04で。私は中をchownする必要がありました~/.config/composer/

例えば

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

その後、グローバルコマンドが機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.