使用PHP立即捕获PHP中的错误并发送用于电子邮件通知的实现代码

其实都知道,PHP开发的朋友,关于一些异常或错误,最担心的是程序,这些条件如果输出到用户的屏幕,用户会害怕,甚至失去工作,如果输出到屏幕会登录,但似乎不是每个人都能看到错误日志的习惯,为了解决这个尴尬的问题,所以我写了这个代码,目的是当我们写一个PHP程序来捕获错误,发送到我们的电子邮件。

首先看看效果:

复制代码代码如下所示:
定义('sys_debug,假);
如果(sys_debug){
ini_set('display_errors ',在');
error_reporting(e_all); / /设置使用error_reporting线(e_error e_warning e_parse | |);
其他{ }
ini_set('display_errors,开);
(0)error_reporting;
}

错误/捕获
register_shutdown_function('fun::错误);

类有趣{


一般的错误处理
参数:
要输出的内容是什么以及是否终止执行程序
解释:
当有传递值时,该函数可用于输出自定义错误内容。
此外,你还可以自动抓取与register_shutdown_function错误的内容,并把捕获的错误内容的电子邮件
对register_shutdown_function机制来调用一个函数时,程序完成后,或如果它是错的。
如果调用一个自动抓取错误时,将获得最后一个错误的内容,如果没有错误内容,它将跳出。
返回:
内容将直接输出到屏幕或电子邮件中。
使用:
乐趣::错误('erroneous内容);
乐趣::('erroneous错误内容,错误);
**
公共静态函数错误($ = '',$ = TRUE){
errtpl美元={ }$ M;

美元=修剪(百万美元);
如果($ =!){手动调用
$ M = 'note:$ M;
Echo Strtr(errtpl美元,阵列({ }= >美元美元M M));unset($ errtpl);
如果($ = TRUE =){模(});}
返回;
}当程序自动执行以获取错误时,调用其他程序。
($ M = error_get_last); / /得到最终的错误
如果(!is_array($m)或数(百万元)<4){ unset($m);返回;}
如果(!file_exists($m {文件' })){ unset($m);返回;}

5 行错误密钥代码,如果没有,则没有错误文件。
e = array_slice(文件($m {文件' })、($m {行} - 4),5);
如果(!is_array(e)){ unset($m,e);返回;}

$ { }};
($ i = 0;$ i < 5;$ + +){
$ E { $我} = isset($ E {我})$ E { $我}:;
$ { }=;
$ { } =($ i = 3)。(($ M {行} - 3)+($我+ 1))。:(($ M {行} - 3)+($我+ 1));
$ E {是}。= ':'。Htmlspecialchars($ E {我},ent_quotes,'utf-8);
}
$ = $ e { } };

$ M = 'automatically捕获错误!错误描述:' $ M {文件}。'线'。$ M { }行。类型。$ M {类型}。错误:。$m {消息}。关键代码:'。$ E。自::现在('y-m-d)(H:我:S,时间);

M = strtr美元(美元errtpl,阵列({ }= >美元美元M M));unset($ errtpl);

$ G =软::getg('sys ','config);
如果(!自::邮件($ G {一},警告:' $ G { } 'tit。看来PHP程序错误!,$m)和sys_debug = = = true){
抛出异常('warning:' $ G { 'tit},有PHP程序错误!(百万美元);
}
如果(sys_debug){ echo $ M;}
unset($,$ M,$ G);
(死亡);
}
}

发送电子邮件
参数:
收件人,邮件标题(不换行),邮件的内容(线与线之间必须相隔每行不超过70个字符)
解释:
调用PHP内置函数邮件发送电子邮件
返回:
返回布尔值
使用:
美元=乐趣::被发送邮件(邮件美元美元美元,针锋相对,味精);
**
公共静态功能的邮件(美元美元美元,针锋相对,MSG){
如果(filter_var($,filter_validate_email){ = =)
抛出异常('email'地址错误!);
}

乳头== utf-8b美元。base64_encode($山雀)。';
$味精= str_replace(。

返回邮件(美元美元美元,针锋相对,味精,说:'软::getg('config /系统/误)。。'content-type:文本/ HTML字符集= UTF-8);
}
}