ChatGPT解决这个技术问题 Extra ChatGPT

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

我正在尝试将 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 的兼容性可能需要您可能不想在生产中处理的更新。

S
Samuel Martins

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

可以使用以下命令解决:

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

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

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

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

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

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

sudo rm -rf .composer


J
Jonathan

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

例如

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

然后全局命令起作用。


T
Tarasovych

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


N
Nabil Kadimi

在我的情况下,.composer 归 root 所有,所以我做了 sudo rm -fr .composer,然后我的全局要求工作了。

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


Y
Yasin Okumuş

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


J
Jason

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

原来有一些供应商目录归根用户所有。 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 分开。


M
Moak

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

修复了我从 sudo 到非 sudo 构建时的问题。


j
javierfmv

我遇到了同样的异常,但在我的情况下,我使用 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


w
wp student

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

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


B
Basant Mandal - Kitto

将它与 WSL Windows 10 一起使用时,我遇到了同样的错误。我使用以下命令来解决它:-

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

g
ganji

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

C:\作曲家

当我尝试这个命令时

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

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

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

包安装很快。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅