カテゴリー
コンピューター

php.ini で設定しても出力されないエラーログをちゃんと出すポイント!

スクリーンショット 2013-02-11 13.02.29.png

先日、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件の返信

コメントを残す