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

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 = '[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 の引数で、変数や配列の内容をすべて出力してくれる(その分ログは長くなるが・・・)

今回はメールで送信してるが、ログファイルなどに出力してもいいと思う