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


96

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

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

知道我该如何解决吗?


1
可能很明显,但必须询问...您当前的权限是composer.json什么?
TheGentleman '16

@GentlemanMax-还没有~/.composer/composer.json文件。
kramer65 '16

那么~/.composer/文件夹的权限是什么?kramer65似乎没有写权,achmod可能会有用。
AnthonyB

@AnthonyB-是的,我现在看到~/.composer/的所有权归root。但是我只是检查了一些其他系统,并在全新的Ubuntu 16.04 VM上安装了composer,它始终由拥有root。我当然可以chmodchown它,但它是一个好主意,更改此默认行为?
kramer65 '16

我刚刚检查了Ubuntu 16.04,确实.composer是root拥有的,具有755模式。因此,更改所有者可能不是解决方案。
AnthonyB

Answers:


253

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

可以使用以下命令解决:

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

1
这也为我工作在yii2安装作曲家全球资产的插件感谢萨穆埃尔
杰夫·

3
使用$ USER代替'myuser'是更好的选择。
zennin

2
奇怪,这并没有解决我的问题。还有其他提示吗?
Mylord

2
@mylord确保.composer来自您的用户。尝试与~/.composer
塞缪尔·马丁斯

6
这是一个很好的提示。但是,如果您已经创建了项目,请运行sudo chown -R $ USER my_project
Daniel Daniel

16

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

sudo chown -R user ~/.composer(以user您当前的用户身份kramer65

运行此命令后,您应该具有运行作曲家全局require命令的权限。

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

sudo rm -rf .composer


3

就我而言,它.composer是由root拥有的,所以我这样做了sudo rm -fr .composer,然后我的全局需求起作用了。

被警告!如果您不确定自己在做什么,就不想使用该命令。



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,然后工作正常。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.