PHP
Apache
laravel

【Laravelでエラー対処】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の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

これで解決。