私はこのトピックに関して多くの質問があることを知っていますが、私の問題は本当に奇妙です。だから投稿することにしました。 /var/logs/Apache/error.log
にこのエラーがあります
[Tue Mar 01 07:26:51.435312 2016] [:error] [pid 8837] [client 127.0.0.1:37843] PHP Fatal error: Uncaught exception 'UnexpectedValueException' with message 'The stream or file "/var/www/personale/librarie-cor/storage/logs/laravel.log" could not be opened:
failed to open stream: Permission denied' in /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:87\nStack trace:
\n#0 /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(37): Monolog\\Handler\\StreamHandler->write(Array)
\n#1 /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Logger.php(289): Monolog\\Handler\\AbstractProcessingHandler->handle(Array)
\n#2 /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Logger.php(565): Monolog\\Logger->addRecord(400, Object(Symfony\\Component\\Debug\\Exception\\FatalErrorException), Array)
\n#3 /var/www/personale/librarie-cor/vendor/laravel/framework/src/Illuminate/Log/Writer.php(202): Monolog\\Logger->error(Object(Symfony\\Component\\Debug\\Exception\\FatalErrorException), Array)
\n#4 /var/www/personale/librarie-cor in /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 87
問題は、すでにchmod -R 777 storage/
を実行したことです。スクリーンショットは次のとおりです。
エラーを取り除くにはどうすればよいですか?
最終的に解決策を見つけました。PSR-4とクラスの自動インポートに問題があったようです。
だから、この問題を抱えている他の人のためのソリューションがあります:
php artisan clear-compiled
composer dump-autoload
php artisan optimize
php artisan cache:clear
TLDR;
端末で次のコマンドを実行します
# Clear Laravel cache and the compiled classes
php artisan cache:clear
php artisan clear-compiled
# Change the storage and cache directories permission
Sudo chmod -R 777 storage
Sudo chmod -R 777 bootstrap/cache
# Regenerate the composer autoload file
composer dump-autoload
詳細な説明
これは通常、Webサーバーがstorage
およびbootstrap/cache
ディレクトリへの書き込みアクセスを必要とするために発生します。
まず、ウェブサーバープロセスが、制限された権限を持つアカウントで実行されていることを確認してください。 NginxとApacheは通常、権限の少ないwww-data
ユーザーとグループを自動的に作成して使用します。いつでもps
コマンドを使用して、実行中のサービスで使用されているユーザーを確認できます。
ps aux | grep nginx
次に、Laravelプロジェクトディレクトリが、Webサーバープロセスを実行する同じユーザーとグループによって所有されていることを確認します。Webサーバーがwww-data
によって実行され、プロジェクトディレクトリが/var/www/laravel
にあり、次のように所有権を設定できます。
Sudo chown -R www-data:www-data /var/www/laravel
storage
およびcache
ディレクトリへの書き込みアクセス権を付与しますこれは重要なステップです。必ずstorage
とbootstrap/cache
ディレクトリの両方に書き込み許可を与えてください。
Sudo chmod -R 775 /var/www/laravel/storage
Sudo chmod -R 775 /var/www/laravel/bootstrap/cache
上記の手順がまだ機能しない場合は、シェルで次のコマンドを実行してみてください。
# 1. Clear Laravel cache
php artisan cache:clear
# 2. Delete the compiled class
php artisan clear-compiled
# 3. Regenerate the composer autoload file
composer dump-autoload
最後のリソースについては、777
にアクセス許可を設定してみてください。これは、すべてのユーザーが特定のディレクトリに対して読み取りおよび書き込みを行えることを意味します。
Sudo chmod -R 777 /var/www/laravel/storage
Sudo chmod -R 777 /var/www/laravel/bootstrap/cache
この助けを願っています。
Centos7でも同じ問題が発生しました...すべてを試しました。最後に、stackoverflowでselinuxの可能性を示唆する投稿を見つけました。私はselinuxを無効にしましたが、うまくいきました!
Centosを使用している場合は、SELinux施行を無効にします
これを行うには、以下のコマンドを実行します。
setenforce 0
私の場合、このソリューションは非常にうまく機能しました。これが役立つことを願っています。
Uは次のようなものを試してください-
php artisan cache:clear
php artisan clear-compiled
Sudo chmod -R 777 storage/ -R
composer dump-autoload
Uは、この質問にアクセスして詳細を確認できます。
これを使って
chcon -R -t httpd_sys_rw_content_tストレージ