Composer: file_put_content (./poser.json) : 未能打开流: 权限被拒绝

我正在尝试将 非常好安装到 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/super 用户身份运行 Composer! 请参阅 https://getcomposer.org/root了解详细信息

Any idea how I can solve this?

147438 次浏览

In my case, .composer was owned by root, so I did sudo rm -fr .composer and then my global require worked.

Be warned! You don't wanna use that command if you are not sure what you are doing.

我安装 Laravel/Lumen 的时候出了点问题。

它可以通过以下命令解决:

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

To resolve this, you should open up a terminal window and type this command:

sudo chown -R user ~/.composer(user是您的当前用户,在您的例子中是 kramer65)

After you have ran this command, you should have permission to run your composer global require command.

您可能还需要删除。打开一个终端窗口,输入以下命令:

sudo rm -rf .composer

这可能是一个超级极端的情况,但是如果您正在使用 Travis CI 并利用缓存,那么您可能需要清除所有缓存并重试。

Fixed my issue when I was going from sudo to non sudo builds.

我也面临这个问题,但在我的情况下,我是在错误的目录。检查您正在工作的目录

在我的情况下,我没有与 ~/.composer的问题。
因此,在 Laravel 应用程序根文件夹中,我做了 sudo chown -R $USER composer.lock,它是有帮助的。

我得到了同样的异常,但是在我的例子中,我使用 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

在我的例子中,我使用 sudo mkdir projectFolder来创建文件夹。它属于 root 用户,我是用非 root 用户登录的。

因此,我使用命令 sudo chown mynonrootuser:mynonrootuser projectFolder更改了文件夹权限,然后它工作得很好。

对于我来说,在 Ubuntu 18.04中,我需要在 ~/.config/composer/中吃东西

例如。

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

那么全球指令就可以工作了。

我在使用 WSLWindows10时也出现了同样的错误。我使用以下命令来解决这个问题:-

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

I had same issue in windows version of composer that has installed in

C: 作曲家

When I was trying this command

C: 作曲家需要 aws/aws-sdk-php

然后我进入作曲家安装的文件夹,再试一次

作曲家 > 作曲家需要 aws/aws-sdk-php

快速安装软件包。

在我的例子中,在这里的其他答案中提到的所有位置上的所有权限都是正确的,但是我仍然得到了这个错误。

原来有些供应商目录是 root 用户拥有的。编写器在进行更新或安装时编写 composer.lock文件 到处都是

So solving my case - and this is specifically for a laravel sail container - all ownerships were switched to user sail in the project:

Enter the sail container as root:

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分离。