Composer:file_put_contents(./ composer.json):无法打开流:权限被拒绝

kra*_*r65 65 php linux sudo laravel composer-php

我正在尝试将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>]...
Run Code Online (Sandbox Code Playgroud)

我以用户身份登录kramer65,因此我不知道为什么它无法写入我的主文件夹.我对a的正常反应permission denied是使用sudo,但作曲家总是说:

不要以root /超级用户身份运行Composer!有关详细信息,请参阅https://getcomposer.org/root

知道如何解决这个问题吗?

Sam*_*ins 174

我有这个问题来安装laravel/lumen.

我可以使用以下命令解决:

$ sudo chown -R $USER ~/.composer/
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的提示。但是,如果您已经创建了项目,请运行sudo chown -R $ USER my_project (3认同)
  • 这在 yii2 安装 Composer 全局资产插件时也对我有用,谢谢 samuel (2认同)
  • 使用$ USER代替'myuser'是更好的选择。 (2认同)
  • 它没有为我解决问题,很奇怪。还有其他提示吗? (2认同)
  • @mylord 确保 .composer 来自您的用户。尝试使用 `~/.composer` 运行 (2认同)

Ken*_*Ken 11

要解决此问题,您应该打开一个终端窗口并键入以下命令:

sudo chown -R user ~/.composer(user作为您当前的用户,在您的情况下,kramer65)

运行此命令后,您应该有权运行composer global require命令.

您可能还需要从当前目录中删除.composer文件,为此打开终端窗口并键入以下命令:

sudo rm -rf .composer


Jon*_*han 7

对我来说,在 Ubuntu 18.04 中。我需要在里面 chown~/.config/composer/

例如

sudo chown -R $USER ~/.config/composer
Run Code Online (Sandbox Code Playgroud)

然后全局命令起作用。


Yas*_*muş 5

我也遇到了这个问题,但就我而言,我位于错误的目录中。检查您正在工作的目录


Tar*_*ych 5

就我而言,我没有问题~/.composer
所以在 Laravel 应用程序根文件夹中,我做到了sudo chown -R $USER composer.lock,这很有帮助。


Jas*_*son 5

就我而言,此处其他答案中提到的所有位置的所有权限都是正确的,但我仍然收到此错误。

结果发现有一些供应商目录是 root 拥有的。Composer在进行更新或安装时会在各处composer.lock写入文件。

因此,解决我的案例 - 这是专门针对 laravel sail 容器的 - 所有所有权都已切换到sail项目中的用户:

sail以 root 身份进入容器:

vendor/bin/sail root-shell
Run Code Online (Sandbox Code Playgroud)

设置项目中所有文件的文件所有权:

chown -R sail:sail /var/www/html
Run Code Online (Sandbox Code Playgroud)

您可能只想将供应商目录作为第一次尝试:

chown -R sail:sail /var/www/html/vendor
Run Code Online (Sandbox Code Playgroud)

从手动设置切换docker-compose.yaml到 Laravel Sail 后,所有权是错误的,IMO 以合理的方式处理文件所有权和权限,root与应用程序用户分离sail