【问题标题】:Composer: file_put_contents(./composer.json): failed to open stream: Permission denied作曲家:file_put_contents(./composer.json):无法打开流:权限被拒绝
【发布时间】:2017-05-03 21:37:34
【问题描述】:

我正在尝试将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 登录,所以我不知道为什么它不能写入我的主文件夹。我对permission denied 的正常反应是使用sudo,但作曲家总是说:

不要以 root/超级用户身份运行 Composer!详情见https://getcomposer.org/root

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

【问题讨论】:

  • 可能很明显,但必须问...您的composer.json 的当前权限是什么?
  • @GentlemanMax - 还没有~/.composer/composer.json 文件。
  • 那么~/.composer/文件夹的权限是什么? kramer65 似乎无权写,chmod 可能有用。
  • @AnthonyB - 是的,我现在看到~/.composer/root 所有。但我刚刚检查了一些其他系统,并在一个全新的 Ubuntu 16.04 VM 上安装了 composer,它始终归 root 所有。我当然可以 chmodchown 它,但是更改此默认行为是个好主意吗?
  • 不完全相关,但我不会在生产服务器上安装 Prestissimo。它与较新版本的 Composer 的兼容性可能需要您可能不想在生产中处理的更新。

标签: php linux laravel composer-php sudo


【解决方案1】:

在我的例子中,.composer 由 root 拥有,所以我做了sudo rm -fr .composer,然后我的全局要求工作了。

请注意!如果您不确定自己在做什么,则不想使用该命令。

【讨论】:

    【解决方案2】:

    我在安装 laravel/lumen 时遇到了这个问题。

    可以通过以下命令解决:

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

    【讨论】:

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

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

    sudo chown -R user ~/.composeruser 是您的当前用户,在您的情况下,kramer65

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

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

    sudo rm -rf .composer

    【讨论】:

      【解决方案4】:

      这可能是超级边缘情况,但如果您使用 Travis CI 并利用缓存,您可能需要清除所有缓存并重试。

      解决了我从 sudo 转到非 sudo 构建时的问题。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

            我遇到了同样的异常,但在我的情况下,我使用 PowerShell 来运行命令 所以,我用一条指令解决了这个问题,首先解除对多个文件的阻止。 PS C:\&gt; dir C:\executable_file_Path\*PowerShell* | Unblock-File 然后使用以下内容加载包 &amp; 'C:\path_to_executable\php.exe' "c:\path_to_composer_.phar_file\composer.phar "require desired/package

            【讨论】:

              【解决方案8】:

              就我而言,我使用sudo mkdir projectFolder 创建文件夹。它归 root 用户所有,我使用非 root 用户登录。

              所以我使用命令sudo chown mynonrootuser:mynonrootuser projectFolder 更改了文件夹权限,然后它工作正常。

              【讨论】:

                【解决方案9】:

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

                例如

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

                然后全局命令起作用。

                【讨论】:

                  【解决方案10】:

                  在 WSL Windows 10 中使用它时遇到了同样的错误。我使用以下命令来解决它:-

                  sudo chown -R $USER  /home/<username>/.config/composer
                  

                  【讨论】:

                    【解决方案11】:

                    我在安装在 Windows 版本的作曲家中遇到了同样的问题

                    C:\作曲家

                    当我尝试这个命令时

                    C:\composer 需要 aws/aws-sdk-php

                    然后我就进入了 composer 安装的文件夹,然后再试一次

                    C:\composer>composer 需要 aws/aws-sdk-php

                    安装包很快。

                    【讨论】:

                      【解决方案12】:

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

                      原来有一些供应商目录归根用户所有。 Composer 在进行更新或安装时会在各处写入composer.lock 文件。

                      所以解决了我的问题 - 这是专门针对 laravel 帆容器的 - 在项目中所有所有权都已切换到用户 sail

                      以 root 身份输入 sail 容器:

                      vendor/bin/sail root-shell
                      

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

                      chown -R sail:sail /var/www/html
                      

                      您可能只想在第一次尝试时创建供应商目录:

                      chown -R sail:sail /var/www/html/vendor
                      

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

                      【讨论】:

                        猜你喜欢
                        • 2011-06-22
                        • 2014-11-29
                        • 1970-01-01
                        • 1970-01-01
                        • 2014-06-25
                        • 2018-04-25
                        • 2022-09-22
                        • 2016-09-21
                        相关资源
                        最近更新 更多