[PHP-users 11810] set_error_handler を用いたエラー処理について

Togi Masaaki php-users@php.gr.jp
Tue, 26 Nov 2002 20:51:08 +0900


土岐と申します。


青マンモス本(PHP4徹底攻略 実戦編)のエラー処理を参考にset_error_handlerを用い 
てエラーを捕捉してログに書き出すプログラムを作成しました。下のようになりま 
す。全てのエラーを捕捉してログに書き出すようにしたいのですが、どうも捕捉でき 
るエラーと出来ないエラーがあるみたいです。

例えば、 $a = 1 / 0; とか fopenで存在しないファイルを指定したときは、ちゃ 
んとログに書き出されるのですが、わざと、 $a = ""(セミコロンを書かない)  と 
いうことをやってみたり、require_onceで存在しないファイルを指定してみたりして 
もログには書き出されずエラーが画面に表示されます。

ちなみにset_error_handlerを使うと標準のエラー処理をバイパスすると書いてあった 
のでphp.iniは変更していません。


これは何か設定が悪いのでしょうか?

何かご教授頂ければ幸いです。



ちなみにphp.iniのエラー関係の設定はこのようになっております。
------------------------------------
display_errors               on
display_startup_errors    off
error_append_string       no value
error_log                      no value
error_prepend_string      no value
error_reporting             on
html_errors                  on
log_errors                    off
track_errors	off            off
xmlrpc_error_number     0
xmlrpc_errors              off
---------------------------------
---------------------
PHP 4.2.1
Apache 1.3.26
Ret Hat Linux 7.2
---------------------
---------------------------------------------------
<?

	//エラーハンドラ関数
	function userErrorHandler($errno,$errmsg,$filename,$linenum){

		//エラー発生時間
		$time = date("Y-m-d H:i:s");

		//ログ出力用エラーを生成
		$err = "\"";
		$err .= $time . "\",\"";
		$err .= $errno . "\",\"";
		$err .= $errmsg . "\",\"";
		$err .= $filename . "\",\"";
		$err .= $linenum . "\"";
		$err .= "\n";

		//ログに保存
		error_log($err,3,"/log/error.log");

	}

	// エラーハンドラ関数を設定
	set_error_handler("userErrorHandler");
?>
--------------------------------------------------

よろしくお願いします。


----------------------------
 土岐 正明 (Togi, Masaaki)
   E-mail: matogi@rmail.plala.or.jp
----------------------------