Php/errorメール
提供: 初心者エンジニアの簡易メモ
2015年5月20日 (水) 03:10時点における127.0.0.1 (トーク)による版 (ページの作成:「==fatalエラーをキャッチしてメールで送信== *application/batch/testbatch.php require_once APPLICATION_PATH . '/models/ErrorMailModel.php'; register_shutdo...」)
fatalエラーをキャッチしてメールで送信
- application/batch/testbatch.php
require_once APPLICATION_PATH . '/models/ErrorMailModel.php'; register_shutdown_function(array('ErrorMailModel', 'fatalHandler')); set_error_handler(array('ErrorMailModel', "errorHandler")); $a = $b; testa();
- application/models/ErrorMailModel.php
/** * エラーメールハンドラクラス * @ex require_once APPLICATION_PATH . '/models/ErrorMailModel.php'; register_shutdown_function(array('ErrorMailModel', 'fatalHandler')); set_error_handler(array('ErrorMailModel', "errorHandler")); $a = $b; testa(); */ class ErrorMailModel { private static function _getErrorCodeByNo($errno) { $errcode = ""; switch ($errno){ case E_ERROR: // 1 // $errcode = 'E_ERROR'; break; case E_WARNING: // 2 // $errcode = 'E_WARNING'; break; case E_PARSE: // 4 // $errcode = 'E_PARSE'; break; case E_NOTICE: // 8 // $errcode = 'E_NOTICE'; break; case E_CORE_ERROR: // 16 // $errcode = 'E_CORE_ERROR'; break; case E_CORE_WARNING: // 32 // $errcode = 'E_CORE_WARNING'; break; case E_COMPILE_ERROR: // 64 // $errcode = 'E_COMPILE_ERROR'; break; case E_CORE_WARNING: // 128 // $errcode = 'E_COMPILE_WARNING'; break; case E_USER_ERROR: // 256 // $errcode = 'E_USER_ERROR'; break; case E_USER_WARNING: // 512 // $errcode = 'E_USER_WARNING'; break; case E_USER_NOTICE: // 1024 // $errcode = 'E_USER_NOTICE'; break; case E_STRICT: // 2048 // $errcode = 'E_STRICT'; break; case E_RECOVERABLE_ERROR: // 4096 // $errcode = 'E_RECOVERABLE_ERROR'; break; case E_DEPRECATED: // 8192 // $errcode = 'E_DEPRECATED'; break; case E_USER_DEPRECATED: // 16384 // $errcode = 'E_USER_DEPRECATED'; break; } return $errcode; } // fatalエラー検知 public static function fatalHandler() { $error = error_get_last(); $errcode = self::_getErrorCodeByNo($errno); if ($error['type'] === E_ERROR || $error['type'] === E_USER_ERROR || $error['type'] === E_USER_NOTICE) { $linemsg = sprintf("[ERROR:%s] [Msg:%s] [File:%s] [Line:%s]\n", $errcode, $error['message'], $error['file'], $error['line']); $str = ""; foreach ($_SERVER as $key => $value) { if ($key) { if (preg_match("/^(SCRIPT_NAME)$/", $key)) { $str .= sprintf("%s:%s\n", $key, $value); } } } $text = $linemsg. $str; // メール処理をここに入れる } } // warningなど検知 public static function errorHandler($errno, $errstr, $errfile, $errline) { $errcode = self::_getErrorCodeByNo($errno); $linemsg = sprintf("[%s] [Msg:%s] [File:%s] [Line:%s]\n", $errcode, $errstr, $errfile, $errline); $headerlog = ""; $backtraces = debug_backtrace(); foreach ($backtraces as $key => $trace) { if (array_key_exists('file', $trace) && array_key_exists('line', $trace) && array_key_exists('class', $trace)) { $headerlog .= sprintf("#%d %s(%d): %s::%s\n", $key, $trace['file'], $trace['line'], $trace['class'], $trace['function']); } } $text = $linemsg. $headerlog; // warningなどは無視 // メール処理をここに入れる } }
メール本文にはこのように表示される
[ERROR:] [Msg:Call to undefined function testa()] [File:/var/www/zend/example/application/batch/testbatch.php] [Line:8]
メール処理はzendを利用
php/zend_framework/zend_mail [ショートカット]