您好,欢迎访问一九零五行业门户网

PHP异常的捕获及处理

php异常的捕获及处理 ~
系统自带异常处理 120) {
        throw new exception('年龄不能大于120岁。', 1001);
    }
} catch (exception $e) {
    $err = [
        'code' => $e->getcode(),
        'msg'  => $e->getmessage(),
        'file'    => $e->getfile(),
        'line'   => $e->getline()
    ];
    echo json_encode($err);
}
输出:{code:1001,msg:\u5e74\u9f84\u4e0d\u80fd\u5927\u4e8e120\u5c81\u3002,file:\/data\/mi\/demo.php,line:11}自定义异常处理 $this->getcode(),
            'msg'  => $this->getmessage(),
            'file'    => $this->getfile(),
            'line'   => $this->getline()
        ];
        if ($type == 1) {
            return json_encode($err);
        }
        return $err;
    }
}
try
{
    //业务处理 错误时抛出异常。
    $age = 130;
    if ($age > 120) {
        throw new proexception('年龄不能大于120岁。', 1001);
    }
} catch (proexception $e) {
    $info = $e->geterrorinfo();
    var_dump($info);
}
输出:array(4) { [code]=> int(1001) [msg]=> string(27) 年龄不能大于120岁。 [file]=> string(17) /data/mi/demo.php [line]=> int(53) }捕捉多个异常 $this->getcode(),
            'msg'  => $this->getmessage(),
            'file'    => $this->getfile(),
            'line'   => $this->getline()
        ];
        if ($type == 1) {
            return json_encode($err);
        }
        return $err;
    }
}
try
{
    if ($_get['age'] > 100) {
        throw new proexception('自定义的异常处理', 1002);
    } else {
        throw new exception('系统的异常处理', 1002);
    }
} catch (proexception $e) {
    $info =  $e->geterrorinfo();
    var_dump($info);
} catch (exception $e) {
    echo $e->getmessage();
}
?age=110 输出:array(4) { [code]=> int(1002) [msg]=> string(24) 自定义的异常处理 [file]=> string(17) /data/mi/demo.php [line]=> int(64) }
?age=20 输出:系统的异常处理。日志记录//禁止错误输出
error_reporting(0);
//设置错误处理器
set_error_handler('errorhandler');
//在脚本结束时运行的函数
register_shutdown_function('fatalerrorhandler');
/**
 * 错误处理
 * @param int    $err_no      错误代码
 * @param string $err_msg  错误信息
 * @param string $err_file    错误文件
 * @param int    $err_line     错误行号
 * @return string
 */
function errorhandler($err_no = 0, $err_msg = '', $err_file = '', $err_line = 0)
{
    $log = [
        '['.date('y-m-d h-i-s').']',
        '|',
        $err_no,
        '|',
        $err_msg,
        '|',
        $err_file,
        '|',
        $err_line
    ];
    $log_path = '/data/mi/test.txt';
    error_log(implode(' ',$log).\r\n,3, $log_path);
    //echo implode(' ',$log).
;
}
/**
 * 捕捉致命错误
 * @return string
 */
function fatalerrorhandler() {
    $e = error_get_last();
    switch ($e['type']) {
        case 1:
            errorhandler($e['type'], $e['message'], $e['file'], $e['line']);
            break;
    }
}
class democlass_1
{
    public function index()
    {
        //这里发生一个警告错误,出发errorhandler
        echo $undefinedvarible;
    }
}
$demo_1 = new democlass_1();
//这里发生一个警告错误,被errorhandler 捕获
$demo_1->index();
//发生致命错误,脚本停止运行触发 fatalerrorhandler
$demo_2 = new democlass_2();
$demo_2->index();
打开echo后 输出:
[2016-08-07 09-01-34] | 8 | undefined variable: undefinedvarible | /data/mi/demo.php | 126
[2016-08-07 09-01-34] | 1 | class 'democlass_2' not found | /data/mi/demo.php | 134备注:
1. register_shutdown_function 也可以用于api调试中,记录每次请求值和返回值,方便调试。
2. 利用 “|” 分割的好处是,便于利用 awk 对日志进行分割处理。
来源:http://mp.weixin.qq.com/s?__biz=mjm5ndm4mdiwnw==&mid=2448834645&idx=1&sn=32c96f1344a270755a8e33a6f7ddc1e8#rd
更多【干货分享】,请关注我的个人订阅号。
其它类似信息

推荐信息