[PHP-users 10752] 独自定義エラーハンドラ関数にてERRORを拾わない

Noriyuki TAKEI php-users@php.gr.jp
Fri, 11 Oct 2002 19:57:42 +0900


武井です。

 エラーハンドラ関数についてご質問があります。独自に定義した
エラーハンドラ関数でNOTICE、WARNINGのレベルのエラーメッセージは
拾うのですが、ERRORレベルのエラーは拾ってくれません。
ERRORレベルのエラーが出た場合、ブラウザにエラー内容が
出力されるだけで、指定したログファイルに書き出しもしません。

 php.iniファイルにてerror_reportingもE_ALLにしていますし、
NOTICE、WARNINGのレベルのエラーは独自定義エラーハンドラ関数で
処理されていますので、原因については見当がつきません。

 この問題を解決策をご教示願います。宜しくお願いします。


当方の環境は以下のとおりです。

OS:Windows2000Pro
PHP:4.1.2

独自定義したエラーハンドラ関数は以下のとおりです。

----------------------------- ここから -----------------------------

function error_handler ($errno, $errmsg, $filename, $linenum, $vars) {
    // ● エラー発生時間
    $time = date("Y-m-d H:i:s");

    // ● エラーの種類を表す連想配列を定義
    $errortype = array (1=>"Error",2=>"Warning",4=>"Parsing Error",8=>"Notice",16=>"Core Error",32=>"Core Warning",64=>"Compile Error",128=>"Compile Warning",256=>"User Error",512=> "User Warning",1024=>"User Notice");

    $err = "[".$time."] PHP ".$errortype[$errno].":  ".$errmsg." in ".$filename." on line ".$linenum;

    // ● ユーザ定義エラーの場合は変数の値を記録
    if ($errno == E_USER_ERROR || $errno == E_USER_WARNING || $errno == E_USER_NOTICE) {
        $err .= " : value=" . serialize($vars);
    }

    $err .= "\n";

    // ● ログに保存
    error_log($err, 3, "D:\php\logs\error_log.txt");

    // ● 重大なエラーはメールで通知
    if ($errno == E_ERROR || $errno == E_USER_ERROR ){
        mb_send_mail("admin@phpserv.jp","エラー発生通知",$err);
        echo "申し訳ありません。システム上の不備によりサービスを停止中です。";
        die();
    }
}

// ● エラーハンドラ関数を設定
set_error_handler("error_handler");

----------------------------- ここまで -----------------------------


−−−−−−−−−−−−−−−−−−−−−−−−−−−
JALインフォテック
 ソリューション事業本部
  eネットワーク・ソリューション事業部CTIグループ

		武井 宜行(Noriyuki Takei)
		E-Mail:noriyuki.takei@jalinfotec.co.jp
		TEL:03-5445-7091
		FAX:03-5445-7079
−−−−−−−−−−−−−−−−−−−−−−−−−−−