エラーが出た時でもそのまま出力されがちな 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 = '[email protected]';
// 差出人
$from = '[email protected]';
// 件名
$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 の引数で、変数や配列の内容をすべて出力してくれる(その分ログは長くなるが・・・)
今回はメールで送信してるが、ログファイルなどに出力してもいいと思う