error_log
デフォルトでは PHP のエラーログは Apache のエラーログ /var/log/httpd/error_log に出力される。
PHP の ini ファイルで error_log に値を指定するとそちらにエラーログが記録されることになっているが、CentOS のデフォルト状態ではそれだけでは出力されない。
php.ini
error_log = /var/log/php_error.log
よく見かける対策
「php.ini で設定しても出力されないエラーログをちゃんと出すポイント! – oki2a24」などで記載されている対策が、touch
コマンドでのファイルの作成と chown
コマンドでの所有権の変更だ。
ただし、CentOS のデフォルトの状態ではこれでも出力されない。
touch /var/log/php_error.log
chown apache:apache /var/log/php_error.log
もう一つ必要な対応
実はデフォルトで有効になっている SELinux のせいで出力されない。
以下のコマンドで /var/log/httpd/error_log と同等のコンテクストを設定する。
chcon -t httpd_log_t /var/log/php_error.log
これで無事エラーログが出力されるようになる。
error_log
で指定したログファイルにエラーログが出力されるようになると、Apache のログには出力されなくなる。
まとめ
以下のコマンドが必要。
touch /var/log/php_error.log
chcon -t httpd_log_t /var/log/php_error.log
chown apache. /var/log/php_error.log
chmod 600 /var/log/php_error.log
ログの例
Apache のエラーログと PHP のエラーログでは、メッセージ内容は同等だが日付等の表記が異なる。
Apache エラーログ
[Thu Jan 19 21:25:09.225123 2017] [:error] [pid 10594] [client 192.168.56.1:50552] PHP Notice: Undefined variable: undefinedVariables in /var/www/html/index.php on line 4
[Thu Jan 19 21:25:09.225182 2017] [:error] [pid 10594] [client 192.168.56.1:50552] PHP Deprecated: Function set_magic_quotes_runtime() is deprecated in /var/www/html/index.php on line 5
[Thu Jan 19 21:25:09.225194 2017] [:error] [pid 10594] [client 192.168.56.1:50552] PHP Warning: ini_set() expects exactly 2 parameters, 0 given in /var/www/html/index.php on line 6
[Thu Jan 19 21:25:09.225202 2017] [:error] [pid 10594] [client 192.168.56.1:50552] PHP Fatal error: Call to undefined function undefined() in /var/www/html/index.php on line 7
PHP エラーログ
[19-Jan-2017 21:51:14 Asia/Tokyo] PHP Notice: Undefined variable: undefinedVariables in /var/www/html/index.php on line 4
[19-Jan-2017 21:51:14 Asia/Tokyo] PHP Deprecated: Function set_magic_quotes_runtime() is deprecated in /var/www/html/index.php on line 5
[19-Jan-2017 21:51:14 Asia/Tokyo] PHP Warning: ini_set() expects exactly 2 parameters, 0 given in /var/www/html/index.php on line 6
[19-Jan-2017 21:51:14 Asia/Tokyo] PHP Fatal error: Call to undefined function undefined() in /var/www/html/index.php on line 7