[php] file_put_contents (meta / services.json) : 스트림을 열지 못했습니다 : 권한이 거부되었습니다

나는 Laravel을 처음 사용합니다. 열려고 http://localhost/test/public/했는데

예외 처리기에서 오류가 발생했습니다.

나는 구글을 사용하여 스토리지 디렉토리의 권한을 변경 chmod -R 777 app/storage했지만 아무 소용이 없었다.

나는 변화 debug=>trueapp.php하고 페이지를 방문하고 예외 핸들러에서 오류가 발생했습니다 :

스트림 또는 파일 “/var/www/html/test/app/storage/logs/laravel.log”를 열 수 없습니다 : 스트림을 열지 못했습니다 : / var / www / html / test / bootstrap / compiled에서 권한이 거부되었습니다. php : 8423

그런 다음 명령을 사용하여 저장소 디렉토리의 권한을 변경하고 chmod -R 644 app/storage‘Exception in exception handler’오류가 사라지고 페이지가로드됩니다. 그러나 거기에 나는 이것을 얻고있다 :

file_put_contents (/var/www/html/laravel/app/storage/meta/services.json) : 스트림을 열지 못했습니다 : 권한이 거부되었습니다



답변

vsmoraes의 제안 이 나를 위해 일했습니다.

라 라벨> = 5.4

php artisan cache:clear
chmod -R 777 storage/
composer dump-autoload

라 라벨 <5.4

php artisan cache:clear
chmod -R 777 app/storage
composer dump-autoload

참고 : 원격 서버 (기기 또는 생산)에서이 작업을 수행하지 마십시오

이 질문을했을 때, 이것은 가상 머신에서 실행되는 로컬 호스트의 문제였습니다. 그래서 777을 설정하는 것이 안전하다고 생각했지만 사람들은 다른 해결책을 찾아야한다고 말할 때 적절합니다. 먼저 775를 시도하십시오


답변

Laravel 5에서이 문제에 직면 한 Google 직원에게 적합합니다.

이것은 다른 사용자 storage/logs가 다른 권한으로 폴더 내에서 동일한 로그 파일에 쓰려고 시도하는 경우 발생하는 권한 문제 입니다.

laravel 구성은 매일 오류를 기록하도록 설정되어 있으므로 웹 서버 (apache / nginx)는 환경에 따라 기본 사용자 아래 에이 파일을 만들 수 있습니다 _www.OSX 또는 www-data* NIX 시스템 과 같은 것일 수 있습니다. 일부 장인 명령을 실행하고 오류가 발생했을 때 제공되므로 터미널의 PHP는 실제로 다른 사용자가 로그인 사용자에 의해 실행되므로 장인은이 파일을 작성하지만 다른 사용자로 작성합니다.이 명령을 실행하여 확인할 수 있습니다 :

php -i | grep USER

로그인 사용자가 웹 서버에서 해당 로그 파일을 작성한 경우, laravel은 655기본적 으로 권한이있는 로그 파일 을 작성하여 소유자 만 작성할 수 있으므로 오류를 기록 할 수 없으며 그 반대도 마찬가지 입니다.

이 임시 문제를 해결하려면 664로그인 사용자와 웹 서버 사용자가 해당 로그 파일에 쓸 수 있도록 그룹 에 대한 권한 을이 파일 에 수동으로 부여해야 합니다.

이 문제를 영구적으로 피하기 위해 storage/logs디렉토리에서 권한을 상속하여 디렉토리 내에 새 파일을 만들 때 적절한 권한을 설정하려고 할 수 있습니다. https://unix.stackexchange.com/a/115632 는 디렉토리에서 권한을 상속하여 해결할 수 있습니다. 그.


답변

777 권한을 부여해서는 안됩니다. 보안 위험이 있습니다. Laravel 5의 우분투 사용자에게는 디렉토리 저장소의 소유자를 재귀 적으로 변경하는 것이 좋습니다.

다음을 시도하십시오.

sudo chown -R www-data:www-data storage

우분투 기반 시스템에서 www-data는 아파치 사용자입니다.


답변

Laravel 5, Homestead 및 Mac을 사용하는 모든 사람에게 다음을 시도하십시오.

mkdir storage/framework/views


답변

때때로 SELINUX가이 문제를 일으켰습니다. 이 명령으로 selinux를 비활성화 할 수 있습니다.

sudo setenforce 0


답변

문제 해결됨

php artisan cache:clear
sudo chmod -R 777 vendor storage

이것은 app, framework, logs에 대한 쓰기 권한을 활성화합니다.


답변

IT 퍼미션 777을 제공하지 마십시오!

터미널의 laravel 프로젝트 디렉토리로 이동하여 다음을 작성하십시오.

sudo chown -R your-user:www-data /path/to/your/laravel/project/
sudo find /same/path/ -type f -exec chmod 664 {} \;
sudo find /same/path/ -type d -exec chmod 775 {} \;
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

이렇게하면 사용자를 소유자로 만들고 권한을 부여합니다 :
1 실행, 2 쓰기, 4 읽기
1 + 2 + 4 = 7 평균 (rwx)
2 + 4 = 6 평균 (rw),
마지막으로 스토리지 액세스 + rwx는 사용자와 그룹에 7을 제공한다는 의미입니다.