CodeIgniter3.0+フレームワークカスタム例外処理実装
5727 ワード
背景
ci3.0フレームワークのコアコードは自動的に異常を実現し、放出された対応するページと方法を実現し、いくつかの個性的な需要、特にインタフェースタイプの応用には不適切である.したがって、異常および404などの関連異常に対する処理を変更するために、コアコード(systemディレクトリ下のファイル)を改版しない必要がある.
メソッドの説明
ciフレーム3.0は2.0より比較的大きな変更があり,そのうちの1つは異常に対する処理である.以下、
以上の括弧内の方法はいずれも
コード実装
プロジェクトエントリファイル
延長は、ベースクラスにおいて を処理することができる.エラーレベル区分 エラー処理を他の場所に書きます.require_once入って
ci3.0フレームワークのコアコードは自動的に異常を実現し、放出された対応するページと方法を実現し、いくつかの個性的な需要、特にインタフェースタイプの応用には不適切である.したがって、異常および404などの関連異常に対する処理を変更するために、コアコード(systemディレクトリ下のファイル)を改版しない必要がある.
メソッドの説明
ciフレーム3.0は2.0より比較的大きな変更があり,そのうちの1つは異常に対する処理である.以下、
CodeIgniter-3.1.8\system\core\CodeIgniter.php
における異常処理の一部コード/*
* ------------------------------------------------------
* Define a custom error handler so we can log PHP errors
* ------------------------------------------------------
*/
set_error_handler('_error_handler');
set_exception_handler('_exception_handler');
register_shutdown_function('_shutdown_handler');
...
以上の括弧内の方法はいずれも
common.php
においてfunction_exists
を前提として宣言されている....
if ( ! function_exists('_exception_handler'))
{
...
コード実装
プロジェクトエントリファイル
index.php
に以下の方法を簡単に書き換える./**
* redis cc
* @time 2019/3/21 15:29
* @author tongbo
* @param $msg
* @param $error_type
* @param $error_code
* @return bool|int|string
*/
function redis_list_add($msg, $error_type, $error_code)
{
ini_set('default_socket_timeout', -1);
$v = explode(':', $_SERVER['SITE_REDIS_SERVER']);
if (is_array($v) && !empty($v)) {
try {
$redis = new redis();
$redis->pconnect($v[0], $v[1]);
$space = "
";
$trace = "";
if ($error_code) {
$trace .= " :" . $error_code . "
";
}
if ($error_type) {
$trace .= " :" . $error_type . "
";
}
$trace .= " IP : " . $_SERVER['REMOTE_ADDR'] . "
";
$trace .= " IP : " . $_SERVER['SERVER_NAME'] . "(" . $_SERVER['SERVER_ADDR'] . ")" . "
";
$trace .= " : " . (isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : "empty") . "
";
$trace .= " : =" . print_r($_REQUEST ? $_REQUEST : $_GET, true) . "
";
return $redis->LPUSH('CC_PHP_ERROR_WARNING', $space . $msg . $space . $trace);
} catch (Exception $e) {
return $e->getMessage();
}
}
}
/**
* common.php
*
* @time 2019/3/21 16:19
* @author tongbo
* @param $severity
* @param $message
* @param $filepath
* @param $line
*/
function _error_handler($severity, $message, $filepath, $line)
{
$is_error = (((E_ERROR | E_PARSE | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR | E_STRICT) & $severity) === $severity);
if ($is_error) {
$error_msg = $message . "
" . $filepath . "
" . $line;
$error_code = "501";
redis_list_add($error_msg, 'Error_Handler ', $error_code);
exit(json_encode(['success' => '-1', 'code' => $error_code, 'msg' => 'error']));
}
}
/**
* php , ,
* common.php
* ParseError,object(Error),TypeError,Error
* @time 2019/3/20 18:33
* @author tongbo
* @param $exception
*/
function _exception_handler($exception)
{
if (!empty($exception)) {
$error_type = get_class($exception);
$error_msg = "
: {$error_type};
: {$exception->getFile()};
: {$exception->getLine()};
: {$exception->getMessage()}; ";
$error_code = "502";
redis_list_add($error_msg, $error_type, $error_code);
exit(json_encode(['success' => '-1', 'code' => $error_code, 'msg' => 'exception']));
}
}
/**
* common.php
* require_once('no_exists.php')
* @time 2019/3/21 9:49
* @author tongbo
*/
function _shutdown_handler()
{
$last_error = error_get_last();
if (isset($last_error) &&
($last_error['type'] & (E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING))) {
$error_msg = "
: shutdown; >
: {$last_error['file']};
: {$last_error['line']};
: {$last_error['message']}; ";
$error_code = "503";
redis_list_add($error_msg, 'Shut_Down ', $error_code);
exit(json_encode(['success' => '-1', 'code' => $error_code, 'msg' => 'shutdown']));
}
}
/**
* common.php
* ci load 、config 、loader ,
* common.php
* @time 2019/3/20 18:46
* @author tongbo
* @param $message
* @param int $status_code
*/
function show_error($message)
{
$error_msg = " : {$message}; ";
$error_code = "504";
redis_list_add($error_msg, ' ', $error_code);
exit(json_encode(['success' => '-1', 'code' => $error_code, 'msg' => 'ci_exception_1']));
}
/**
* common.php
* @time 2019/3/21 15:34
* @author tongbo
* @param string $page
*/
function show_404($page = '')
{
$error_msg = " : URL: " . $page . " 404 not found";
$error_code = "404";
redis_list_add($error_msg, ' ', $error_code);
exit(json_encode(['success' => '-1', 'code' => $error_code, 'msg' => 'Not Found']));
}
延長