LaravelのWebサーバーにリクエストした際、以下のようなエラーが出力され、期待した処理が行われない場合の原因と対策。
エラー出力
tail -f /var/log/httpd/error_log # WebサーバーがApacheの場合
PHP Fatal error: Uncaught UnexpectedValueException: The stream or file "/var/www/base_path/storage/logs/laravel-yyyy-mm-dd.log" could not be opened: failed to open stream: Permission denied
Laravelのエラーログには出力されず、*Apacheのエラーログに出力される。
*Webサーバーの種類は環境による
原因
Laravelのlogファイルにapacheユーザーが書き込み権限を持たないため、logに書き込めずに例外が発生している。[root@prod_sv /]# ls -latr /var/www/base_path/storage/logs/
合計 1819392
...
-rw-r--r-- 1 apache apache 597379535 4月 29 23:59 laravel-2017-04-29.log
-rw-r--r-- 1 apache apache 116592494 4月 30 23:59 laravel-2017-04-30.log
-rw-r--r-- 1 apache apache 54962096 5月 1 23:59 laravel-2017-05-01.log
-rw-r--r-- 1 root root 817338 5月 2 00:23 laravel-2017-05-02.log
drwxr-xr-x 2 apache apache 4096 5月 2 00:23 .
このように-rw-r--r-- root root などの権限だと、apacheユーザーが書き込めない。
対策
・logファイルを削除する(場所を変更・名前を変更でも可)
\# logファイルを削除する
\# rm -r /var/www/base_path/storage/logs/laravel-2017-05-02.log
・logファイルの権限を変更する(apacheユーザーに書き込み権限を付与)
\# logファイルの所有者・所属グループをapache:apacheに変更する。
\# chown apache:apache /var/www/base_path/storage/logs/laravel-2017-05-02.log
これで解決。