Laravel 5.7 で php artisan を実行しようとしたら
UnexpectedValueException : The stream or file “/hogehoge/laravel/storage/logs/laravel-2018-11-28.log” could not be opened: failed to open stream: Permission denied
というエラーになってしまいました。
エラーの原因は?
laravel-2018-11-28.log というファイルの権限が 644 で所有者が Apache のため、artisan コマンドを打っているユーザに書き込み権限が無いのが原因です。
Webのアクセスも artisan コマンドも同じログファイルに出力しているようです。
それならせめてグループの書き込みができる 664 にしてくれよ、と思うのですが、なぜか644 になってしまっています。
エラーへの対処
Apache が作るログファイルは 644 になってしまうようなので、artisan が作るログファイルの名前を変えるようにしました。
config/logging.php ファイルの中の daily のパスを生成している部分を以下のように変更します。
1 2 3 4 5 6 |
'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel-'.php_sapi_name().'.log'), 'level' => 'debug', 'days' => 14, ], |
ファイル名生成の間に php_sapi_name() を噛ませます。
php_sapi_name() はコマンドラインで実行されているときは ‘cli’ を返しますので、artisan が出力するログファイルは laravel-cli-2018-11-28.log のようになります。
cliのファイルは 664 になっている謎。もしかしたら Apache の設定か何かで権限の指定ができるのかも。。。
細かい追求は後日するとして、無事に artisan コマンドが動くようになりました。