簡體   English   中英

作曲家:file_put_contents(./composer.json):無法打開 stream:權限被拒絕

[英]Composer: file_put_contents(./composer.json): failed to open stream: Permission denied

我正在嘗試將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

知道我該如何解決這個問題嗎?

我在安裝 laravel/lumen 時遇到了這個問題。

可以通過以下命令解決:

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

要解決此問題,您應該打開一個終端窗口並鍵入以下命令:

sudo chown -R user ~/.composeruser是你的當前用戶,在你的情況下, kramer65

運行此命令后,您應該有權運行 composer global require 命令。

您可能還需要從當前目錄中刪除 .composer 文件,為此打開一個終端窗口並鍵入以下命令:

sudo rm -rf .composer

對我來說,在 Ubuntu 18.04 中。 我需要在~/.config/composer/里面 chown

例如

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

然后全局命令起作用。

就我而言,我對~/.composer沒有問題。
因此,在 Laravel 應用程序根文件夾中,我執行了sudo chown -R $USER composer.lock ,這很有幫助。

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

被警告! 如果您不確定自己在做什么,則不想使用該命令。

我也遇到了這個問題,但就我而言,我在錯誤的目錄中。 檢查您正在工作的目錄

這可能是極端情況,但如果您使用 Travis CI 並利用緩存,您可能希望清除所有緩存並重試。

修復了我從 sudo 構建到非 sudo 構建時的問題。

我遇到了同樣的異常,但在我的情況下,我使用 PowerShell 來運行命令,因此,我使用首先取消阻止多個文件的指令修復了此問題。 PS C:\\> dir C:\\executable_file_Path\\*PowerShell* | Unblock-File 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更改了文件夾權限,然后它工作正常。

在 WSL Windows 10 中使用它時我遇到了同樣的錯誤。我使用以下命令來解決它:-

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

我在已安裝的 Windows 版本的 Composer 中遇到了同樣的問題

C:\\作曲家

當我嘗試這個命令時

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

然后我進入了composer安裝的文件夾並再試一次

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

安裝包很快。

在我的情況下,所有權限在其他答案中提到的所有位置都是正確的,但我仍然收到此錯誤。

原來有一些供應商目錄是由 root 擁有的。 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帆,其IMO處理文件的所有權和權限以一種合理的方式,分離root從應用程序用戶sail

當我在/var/www/html中運行composer require時,我遇到了同樣的問題,這是 apache web 服務器的默認根文件夾,我能夠通過使當前用戶成為這個 html 目錄的所有者來解決它

sudo chown -R $USER /var/www/html

但是你肯定要設置權限

chmod 755 -R /var/www/html

有 2 個組件需要考慮。

Composer 希望您以登錄用戶身份運行它。 但是,您的網絡服務器想要對您的應用程序擁有權限。

解決方案是將您的用戶添加到 webserver 組,然后更新您的應用程序的權限。

對於運行 Apache 網絡服務器的 Ubuntu,使用以下命令將自己添加到 Apache 組,將<username>替換為您的用戶名

    sudo usermod -a -G www-data <username>

現在您需要更新您對應用程序的權限。 導航到應用程序的根文件夾並使用以下命令

    sudo chown -R $USER:www-data .

Composer 現在有必要的權限來拉入你需要的包,Apache 有必要的權限來交付你的應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM