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
更多【干货分享】,请关注我的个人订阅号。
