1. 本記事のポイント
- PHPでエラーをログファイルに出力する基本的な設定方法を解説
- 実務でのログ可視化のためのファイル出力とログレベル制御を紹介
- 開発環境と本番環境での運用上の注意点も含めて説明
2. PHPのエラーログとは?
PHPのエラーログとは、スクリプト実行中に発生したエラー・警告・注意情報などをログファイルとして記録する仕組みです。
ログは主に以下の用途で利用されます:
- 実行時の不具合やバグの原因追跡
- 本番運用時の障害検知
- セキュリティ上の異常挙動の検出
特に本番環境ではエラーを画面に表示することは避け、ログファイルへの出力とその可視化が推奨されます。
エラーログは php.ini
の設定に従い、システムログや指定ファイルに出力されますが、スクリプト内から一時的に上書きすることも可能です。
3. 詳細解説
エラーをログファイルに出力する基本設定(php.ini)
開発環境・本番環境いずれでも、まずは php.ini
の設定が重要です。
; エラー出力設定(画面には出さずログへ)
display_errors = Off
log_errors = On
error_log = "/var/log/php_errors.log"
error_reporting = E_ALL
この設定により、PHPはすべての種類のエラーを /var/log/php_errors.log
に出力します。
スクリプト内からエラーログを制御する(ini_set と error_log)
一時的にログ先や出力レベルを変更したい場合、スクリプト内で次のように設定します:
<?php
// ログファイルを一時的に変更
ini_set('log_errors', 'On');
ini_set('error_log', '/tmp/my_php_error.log');
error_reporting(E_ALL);
// テスト用エラー(未定義変数)
echo $undefinedVar;
?>
出力結果(/tmp/my_php_error.log の内容)例:
PHP Notice: Undefined variable: undefinedVar in /path/to/script.php on line 7
明示的にログを出力する:error_log関数
開発中に任意の情報をログ出力したい場合は、error_log()
関数を使用します。
<?php
$errorMessage = "処理中に想定外のデータが見つかりました";
error_log($errorMessage);
?>
この出力は php.ini
で指定したログファイルに書き込まれます。デバッグ用途やエラートラップ内での補足情報出力に便利です。
ファイル出力の権限と注意点
ログファイルに出力されない場合、多くはファイルの書き込み権限に問題があります。
- ログファイル自身または親ディレクトリに
www-data
(Apache/PHP実行ユーザ)からの書き込み権限が必要 - ディレクトリ存在チェック、SELinux、open_basedir などの制限も確認が必要
4. よくあるミス・誤解・落とし穴
display_errors を Off にしない
開発中に便利な display_errors = On
を本番でそのままにしておくと、内部情報が外部に漏洩するリスクがあります。
error_log の出力先が存在しない
指定したログファイルのパスが存在しない、あるいは書き込み権限がないとログが記録されません。ファイルの存在と chmod
/chown
を確認してください。
error_reporting の指定不足
error_reporting = E_ERROR
のように一部だけに限定すると、Notice や Warning が記録されず、原因究明が困難になることがあります。開発時は E_ALL
を推奨します。
5. まとめ
PHPのエラー出力は、開発効率と運用安定性の両面で重要な仕組みです。
php.ini
の log_errors
や error_log
設定に加え、error_log()
関数や ini_set()
を活用すれば柔軟なログ運用が可能です。
ログファイルの存在・権限・設定反映を事前に確認し、開発と本番での設定を明確に切り分けて使い分けましょう。