conocode
このコード
トラブルシューティング

Laravel でログファイルの権限が原因で php artisan が失敗する

Laravel で php artisan コマンド打つと、ログファイルの出力で failed to open stream: Permission denied が出て失敗するんですけど
Webでアクセスしたときに、一般ユーザの権限で書き込めないログファイルができてしまっているのが原因だね

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 のパスを生成している部分を以下のように変更します。

ファイル名生成の間に php_sapi_name() を噛ませます。

php_sapi_name() はコマンドラインで実行されているときは ‘cli’ を返しますので、artisan が出力するログファイルは laravel-cli-2018-11-28.log のようになります。

cliのファイルは 664 になっている謎。もしかしたら Apache の設定か何かで権限の指定ができるのかも。。。

細かい追求は後日するとして、無事に artisan コマンドが動くようになりました。