php.ini の error_log でエラーログを出力する先を指定する方法、パス指定の注意点

目次

ログファイルに記録するための php.ini の設定

// php.ini での設定
error_reporting = E_ALL           // すべてのエラーを報告
display_errors = Off              // ブラウザへのエラー表示をオフ
log_errors = On                   // エラーログの記録をオン
error_log = "/var/www/html/logs/php_error.log"  // ログファイルのパス
PHPエラー出力の制御設定 ; php.ini設定 display_errors = On|Off ; 画面表示のON/OFF log_errors = On|Off ; ログファイル記録のON/OFF エラー処理コントローラー 設定に基づいてエラーの行き先を決定 画面表示 (display_errors) Fatal error: Uncaught Error… ログファイル (log_errors) [13-Mar-2025 14:32:15] Fatal error: Uncaught… 開発環境では On 常に On 推奨

ちなみに /var/htmlディレクトリとは

/var はUNIX/Linux系システムにおける標準的なディレクトリです。

ウェブサーバー(Apache/Nginxなど)がファイルを提供する標準的な公開ディレクトリです HTMLやPHPファイルを配置すると、ブラウザからアクセス可能になります 。

varは「variable」の略です。可変的なデータという意味合いですね。

/var/www/html の役割 /var/www/html Web サーバー (Apache/Nginx) ブラウザ ウェブサイトの公開ディレクトリ HTMLやPHPファイルを配置する場所

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のパス解釈 絶対パス 相対パス • ルート(/)から始まる • システム全体が基準 • 常に同じ場所を指す /var/log/app.log 例: error_log, ini_set() • 現在の位置が基準 • コンテキストに依存 • 環境で解釈が変わる ./config/settings.php 例: include, require

そのためドキュメントルート基準でパスを指定します!

実行タイミングや誰が処理するかを考えればわかるかと思います。

設定変更後の反映方法

パス設定を変更した後は、必ず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'));

この記事を書いた人

目次