先日、php.ini の設定を行いました。そのときにエラーログの出力先を設定いたしました。
しかしながら、おかしいです。ヘンです。エラーログが書き込まれないどころか、ファイルすら作成されません。これを解決いたしましたのでメモします♪
ポイント
# PHP エラーログが出力されない場合は作って、ログファイルの所有者・グループを設定 touch /var/log/php_errors.log chown apache:apache /var/log/php_errors.log
なお、操作はすべて ssh でのコマンド操作となります。
具体的な設定手順と確認方法♪
まず、ログ確認用にわざとエラーを起こす php ファイルを作成します。/var/www/html/ がドキュメントルートとします。
echo "<?php test; ?>" > /var/www/html/test.php
ウェブブラウザから test.php へアクセスしてみますと、Notice レベルのエラーが表示されます。Apache のエラーログ、デフォルトでは /var/log/httpd/error_log、を見て次のようなエラーメッセージが表示されることを確認します。
[Mon Feb 11 10:25:30 2013] [error] [client 192.168.56.1] PHP Notice: Use of undefined constant test - assumed 'test' in /var/www/html/test.php on line 1
では、PHP の設定ファイルを見ていきます。
vim /etc/php.ini
エラーログを /var/log/php_errors.log に出すように設定します。ただ、このファイルは今のところ存在していないファイルです。
error_log = "/var/log/php_errors.log"
しかしこれだけでは上記のようにPHP のエラーログ出力先を設定しても、PHP エラーは /var/log/error_log に出てしまいます。おそらくですが、/var/log/ ディレクトリは root が所有者・グループなので、Apache の実行ユーザである apache では権限が足りなくて、このディレクトリにファイルの作成も、もちろん書き込みもできないということではないでしょうか?
そこで、PHP のエラーログ出力ファイルを、作って、所有者を Apache 実行ユーザに設定します。
touch /var/log/php_errors.log chown apache:apache /var/log/php_errors.log
これを行った直後から無事に /var/log/php_errors.log に次のような PHP エラーが書き込まれるようになりました。逆に、Apache ログには書き込まれなくなりました。
[11-Feb-2013 10:27:25 Asia/Tokyo] PHP Notice: Use of undefined constant test - assumed 'test' in /var/www/html/test.php on line 1
ちょっと気がついたのですが、Apache に出力されるログと内容が若干異なるのですね。
- 日付フォーマットが異なります。
- Apache ログには接続元(IP アドレス)が書き込まれています。
- ですがエラーの内容自体は同じです。
面白いですね。
疑問!課題?
もしかして、php_errors.log はどんどん肥大していく一方なのではないでしょうか?
Apache のログなどはインストールした時点でログはローテートされるよう設定されていて、ある程度時間がたったらバックアップ&古いものは削除、が自動でなされます。
ですが PHP のエラーログについてはわたくし自身で出力ディレクトリ、ファイルを指定しましたので自動でローテートしていただけるとは思えません!
わたくし、気になります!
ログローテートのやり方を勉強する必要がありそうです!
※追記 PHP のエラーログを自動的にローテートしていただけるような設定方法は次の投稿で解説いたしました。
おわりに
次のページが参考になりました。ありがとうございます!
- tomimemo – php.ini関連
ログファイルを作らないと書き込まれない、という発想に至ることが出来ました。ありがとうございます。 - PHP: 実行時設定 – Manual
PHP 公式マニュアルです。やっぱり便利♪次の説明が大変助けになりました。ファイルはウェブサーバーユーザーで書き込めなければなりません。
- PHPの設定 – そ、そんなことないんだから!
PHP エラーログのローテートについて書かれていらっしゃいます。これを読みまして、ローテートの設定が必要なことに気が付きました。また参考にさせていただきたいと思います。
以上です。
「php.ini で設定しても出力されないエラーログをちゃんと出すポイント!」への6件の返信
[…] php.ini で設定しても出力されないエラーログをちゃんと出すポイント! | oki2a24 […]
[…] php.ini で設定しても出力されないエラーログをちゃんと出すポイント! | oki2a24 […]
[…] php.ini で設定しても出力されないエラーログをちゃんと出すポイント! | oki2a24 […]
[…] php.ini で設定しても出力されないエラーログをちゃんと出すポイント! | oki2a24 […]
[…] る方法です。 何かあったときはログから調査できるので。 https://oki2a24.com/2013/02/13/set-php-error-log/ […]
[…] r/log/error_log に出てしまいます。. => 今すぐ読む […]