PHPでエラーを非表示にした状態でエラーハンドリングする


エラーが出た時でもそのまま出力されがちなPHPのエラーを非表示にしつつうまくハンドリングしたい時のスニペット

今回はini_setでエラーを非表示にした上で「set_error_handler」を使ってエラーを受け取り、エラーがあれば指定アドレスにメールを飛ばすようにする


ini_set("display_errors", 0);
ini_set("display_startup_errors", 0);

set_error_handler(function($errCode, $errStr, $errFile, $errLine, $errContext) {
​
	$errContext = print_r($errContext, true);
	$message = <<<_TEXT
Error Reporting
errCode:\t{$errCode}
errStr:\t{$errStr}
errFile:\t{$errFile}
errLine:\t{$errLine}
errContext:\t{$errContext}
_TEXT;
	// 送信先
	$to = 'example@example.com';
	// 差出人
	$from = 'example@example.com';
	// 件名
	$subject = 'エラーが発生しました';
	// ヘッダー
	$header = "From: {$from}\r\n";
	// 本文
	$body = $message;
​
	//送信処理
	mb_send_mail($to, $subject, $body, $header);
​
}, E_WARNING);

「set_error_handler」の第2引数では、受け取りたいエラーのレベルを指定できる

例えばnoticeレベルのエラーが受け取りたいときは「E_WARNING」を「E_NOTICE」に変更すればいい。

一番便利なのは$errContextの引数で、変数や配列の内容をすべて出力してくれる(その分ログは長くなるが・・・)

今回はメールで送信してるが、ログファイルなどに出力してもいいので、好きなふうに作り変えてください。

コメントを残す

メールアドレスが公開されることはありません。