kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

TOOL更新_ToDoリスト「23.エラーをハンドリングしたい。」、「24.ログを出したい。」を作った

ToDoリスト「http://d.hatena.ne.jp/kazpgm/20090403」の「23.エラーをハンドリングしたい。」、「24.ログを出したい。」のプログラムを作った。

1.「23.エラーをハンドリング」に対応した。23番は完了とする。
2.「24.ログを出したい。」の対応としてエラーログを出すようにした。24番はデバック用のログ出力のみ未完になった。エラーログはDBエラーを出していたlogと同じファイルに出力する。
3.方法。「common.php」(すべてのPGMがrequire_onceしている)に「set_error_handle」した。具体的には以下を追加した。

// エラーハンドリング
function userErrorHandler ($errno, $errmsg, $filename, $linenum, $vars) {
	global $db;

    // エラー文字列の連想を定義
    // 実際に考慮するエントリは 2,8,256,512,1024のみ
    $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"
                );

	echo 'The error occurred. ' . ' Errno: ' . $errno . ' Errortype: ' . 
	$errortype[$errno] . "<br />\n";
	$fp = fopen(DIR_LOG . date('Ymd') . '_log.txt', 'a');
	flock($fp, LOCK_EX);
	fwrite($fp, 'Date: ' . date('Y/m/d H:i:s') . "\n");
	fwrite($fp, 'Errno: ' . $errno . "\n");
	fwrite($fp, 'Errortype: ' . $errortype[$errno] . "\n");
	fwrite($fp, 'Message: ' . $errmsg . "\n");
	fwrite($fp, 'Filename: ' . $filename . "\n");
	fwrite($fp, 'Linenum: ' . $linenum . "\n");
	fwrite($fp, "----------\n");
	flock($fp, LOCK_UN);
	fclose($fp);

	if (!empty($db)) {
		$sql = "rollback";
		$db->query($sql);
	}

	exit;
}

// 独自のエラー処理(E_NOTICE以外)を行う
error_reporting(E_ALL ^ E_NOTICE);
$old_error_handler = set_error_handler("userErrorHandler", E_ALL ^ E_NOTICE);

4.エラーlogはこんな感じで出している。

Date: 2009/07/03 00:52:50
Errno: 2
Errortype: Warning
Message: mkdir() [<a href='function.mkdir'>function.mkdir</a>]: No such file or directory
Filename: C:\Tools\XAMPP\xampplite\htdocs\.kazphp\functions.php
Linenum: 516
                  • -
Date: 2009/07/03 02:03:15 Errno: 2 Errortype: Warning Message: mb_send_mail() [<a href='function.mb-send-mail'>function.mb-send-mail</a>]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() Filename: C:\Tools\XAMPP\xampplite\htdocs\.kazphp\functions.php Linenum: 270
                  • -

5.エラー画面にはこんな感じ。

The error occurred. Errno: 2 Errortype: Warning

21:00-03:00

■サイト:http://kazpgm.ddo.jp/