另外还可以配合 Register_shutdown_function 实现自动抓取错误内容,并将抓取的错误内容
发送到 Email
内
Register_shutdown_function
的机制是程序执行完毕或中途出错时调用函数
如果是自动抓取错误时被调用,则会取得最后一次出错的内容,如果发现没有错误内容则跳
出
返回:
内容会被直接输出至萤幕或 Email
内
用法:
Fun::Error('错误内容');
Fun::Error('错误内容',False);
/**/
Public Static Function Error(
$M
='',
$E
=True){
$ErrTpl
='<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-
8"></head><body><table cellspacing="0" cellpadding="0" border="0"><tr><td
style="padding:5px;background-color:#F57900;font-size:13px;border:1px solid
#444;color:#222;">{$M}</td></tr></table>';
$M
=Trim(
$M
);
IF(
$M
!='') {
//
手工调用
$M
=' <b>注意:</b> '.
$M
;
Echo
Strtr
(
$ErrTpl
,Array('{$M}'=>
$M
));unSet(
$ErrTpl
);
IF(
$E
===True) {Die();}
Return ;
}Else{
//
程式执行完毕自动抓取错误时调用
$M
=error_get_last();
//
取得最后产生的错误
IF(!
Is_array
(
$M
) Or
Count
(
$M
)<4) {Unset(
$M
);Return ;}
IF(!
File_Exists
(
$M
['file'])) {Unset(
$M
);Return ;}
//取得 5 行出错关键代码,如果取不到内容,
说明出错档桉不存在
$E
=
Array_slice
(File(
$M
['file']),(
$M
['line']-4),5);
IF(!
Is_array
(
$E
)) {Unset(
$M
,
$E
);Return ;}
$E
['M']='';
For(
$i
=0;
$i
<5;
$i
++) {
$E
[
$i
]=isSet(
$E
[
$i
]) ?
$E
[
$i
] : '';
$E
['M'].=' ';
$E
['M'].=(
$i
==3) ? '<b>'.((
$M
['line']-3)+(
$i
+1)).'</b>' : ((
$M
['line']-3)+(
$i
+1));
$E
['M'].=': '.Htmlspecialchars(
$E
[
$i
],ENT_QUOTES,'UTF-8').'<br>';
}