Composer : file_put_contents (./ composer.json) : 스트림을 열지 못했습니다 : 권한이 거부되었습니다.


98

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>]...

user로 로그인 kramer65했기 때문에 홈 폴더에 쓸 수없는 이유를 모르겠습니다. a에 대한 나의 정상적인 반응 은를 permission denied사용하는 sudo것이지만 작곡가는 항상 다음과 같이 말합니다.

Composer를 루트 / 슈퍼 유저로 실행하지 마십시오! 자세한 내용은 https://getcomposer.org/root 를 참조하십시오.

이 문제를 어떻게 해결할 수 있는지 아십니까?


1
명확 할 수 있지만 질문을 받아야합니다. 현재 사용 권한은 무엇 composer.json입니까?
TheGentleman

@GentlemanMax- ~/.composer/composer.json아직 파일 이 없습니다 .
kramer65

그렇다면 ~/.composer/폴더에 대한 권한은 무엇 입니까? kramer65쓸 권리가없는 것 같습니다 chmod. 유용 할 수 있습니다.
AnthonyB

@AnthonyB - 예, 지금 참조 ~/.composer/가 소유하고 있습니다 root. 하지만 방금 다른 시스템을 확인하고 새로운 Ubuntu 16.04 VM에 composer를 설치했으며 항상 root. 나는 물론 수 chmod또는 chown그것을하지만이 기본 동작을 변경하는 것이 아이디어인가?
kramer65

방금 Ubuntu 16.04에서 확인했는데 실제로 .composer는 루트가 755모드로 소유하고 있습니다. 따라서 소유자 변경은 아마도 해결책이 아닐 것입니다.
AnthonyB

답변:


259

laravel / lumen을 설치하는 데이 문제가 발생했습니다.

다음 명령으로 해결할 수 있습니다.

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

1
이것은 또한 감사 사무엘 플러그인 작곡가 글로벌 자산 yii2 설치 나를 위해 일한
제프

3
'myuser'대신 $ USER를 사용하는 것이 더 나은 옵션입니다.
zennin

2
이상하게도 문제가 해결되지 않았습니다. 다른 팁이 있습니까?
mylord

2
@mylord .composer가 사용자의 것인지 확인하십시오. 실행 해보세요~/.composer
Samuel Martins

6
이것은 좋은 팁입니다. 이미 프로젝트 실행 sudo는 대한 Chown -R $ 사용자 my_project 만든 그러나 경우
다니엘

17

이 문제를 해결하려면 터미널 창을 열고 다음 명령을 입력해야합니다.

sudo chown -R user ~/.composer( user귀하의 경우 현재 사용자 인 경우 kramer65)

이 명령을 실행 한 후 composer global require 명령을 실행할 수있는 권한이 있어야합니다.

현재 디렉토리에서 .composer 파일을 제거해야 할 수도 있습니다. 이렇게하려면 터미널 창을 열고 다음 명령을 입력하십시오.

sudo rm -rf .composer


3

제 경우에는 .composer루트가 소유했기 때문에 그렇게 sudo rm -fr .composer한 다음 글로벌 요구 사항이 작동했습니다.

경고 받다! 수행중인 작업이 확실하지 않은 경우 해당 명령을 사용하고 싶지 않습니다.


3

나는이 문제에 직면했지만 내 경우에는 잘못된 디렉토리에있었습니다. 작업중인 디렉토리를 확인하십시오.


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폴더를 만들곤했습니다. 루트 사용자가 소유했으며 루트가 아닌 사용자를 사용하여 로그인했습니다.

그래서 명령을 사용하여 폴더 권한을 변경 sudo chown mynonrootuser:mynonrootuser projectFolder한 다음 제대로 작동했습니다.


0

나를 위해 Ubuntu 18.04에서. 나는 속을 질식해야했다~/.config/composer/

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

그런 다음 전역 명령이 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.