目次
ログファイルに記録するための php.ini の設定
// php.ini での設定
error_reporting = E_ALL // すべてのエラーを報告
display_errors = Off // ブラウザへのエラー表示をオフ
log_errors = On // エラーログの記録をオン
error_log = "/var/www/html/logs/php_error.log" // ログファイルのパス
ちなみに /var/htmlディレクトリとは
/var
はUNIX/Linux系システムにおける標準的なディレクトリです。
ウェブサーバー(Apache/Nginxなど)がファイルを提供する標準的な公開ディレクトリです HTMLやPHPファイルを配置すると、ブラウザからアクセス可能になります 。
varは「variable」の略です。可変的なデータという意味合いですね。
PHPスクリプト内で直接設定する場合こともできます
<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', '/var/www/html/logs/php_error.log');
// エラーメッセージの記録
error_log("カスタムエラーメッセージ");
?>
error_log のパスはドキュメントルート基準でないから注意!
下記の通りで、ウェブサーバーのドキュメントルートを基準ではありません。
サーバーOS全体のファイルシステムを基準になります。なぜならエラーログはPHPエンジン自体の機能なのでOSレベルで動作するからです。
error_log = "/var/www/html/logs/php_error.log" // ログファイルのパス
逆にドキュメントルート基準で設定する項目もあります
例えばauto_prepend_file
の設定ドキュメントルートを基準にパスを解釈します
auto_prepend_file = "/include/config.php"
いつ処理される?と考えると → ウェブページがリクエストされたときに実行されるときで、 誰が処理する? → ウェブサーバー(Apache/Nginx)と連携したPHPとなります。
そのためドキュメントルート基準でパスを指定します!
実行タイミングや誰が処理するかを考えればわかるかと思います。
設定変更後の反映方法
パス設定を変更した後は、必ずPHPサービスを再起動して変更を反映させましょう:
# PHP-FPMの場合
systemctl restart php-fpm
# または
docker-compose restart php
# Apacheモジュールとして動作している場合
systemctl restart apache2
設定のテスト方法
パス設定が正しいか確認するには:
<?php
// パスの確認
echo ini_get('error_log'); // 現在の設定値を確認
// テストログの出力
error_log("テストメッセージ " . date('Y-m-d H:i:s'));