当前位置: 移动技术网 > IT编程>开发语言>PHP > 分享一个php 的异常处理程序

分享一个php 的异常处理程序

2019年03月22日  | 移动技术网IT编程  | 我要评论

直接上代码

<?php
//exceptionhandle.php xiecongwen 20140620
//define('debug',true);
/**
* display all errors when application_env is development.
*/
if (defined('debug')) {
error_reporting(e_all);
ini_set("display_errors", 1);
}
if(!defined('debug')){
/**
* 当发生重大错误时 写日志 并友好提示用户
* (ps:只所以将代码写在这里,是因为在其他地方注册时,出现问题无法调用配置函数.待完善...)
*/
function shutdownhandler()
{
/**
* 写日志 此处直接写在根目录下shutdownlog.txt
*/
$lasterror = error_get_last();
if($lasterror){
$error = strval(date("y-m-d h:i:s")).'=>'."[shutdown] lvl:" . $lasterror['type'] . " | msg:" . $lasterror['message'] . " | file:" . $lasterror['file'] . " | ln:" . $lasterror['line']."\n";
file_put_contents('./log/'.date("ymd").'shutdownlog.txt',$error,file_append);
//友好提示用户
ob_end_clean();
die('对不起,我出错了!');
}
}
register_shutdown_function('shutdownhandler');
}
if(!defined('debug')){
 
function errorhandler($errno, $errstr = '', $errfile = '', $errline = 0)
{
//写日志
$exception = new \errorexception($errstr, 0, $errno, $errfile, $errline);
$msg = strval(date("y-m-d h:i:s")).'=>'.'type:'.geterrtypename($errno).' '.getmsg($exception);
file_put_contents('./log/'.date("ymd").'error.txt',$msg,file_append);
switch ($errno)
{
case e_notice:return ;
case e_deprecated:return;
}
throw $exception;
}
function geterrtypename($errno)
{
switch ($errno)
{
case e_notice:return 'e_notice' ;
case e_deprecated:return 'e_deprecated';
default:return $errno;
}
}
function exceptionhandler($ex)
{
$msg = strval(date("y-m-d h:i:s")).'=>'.getmsg($ex);
file_put_contents('./log/'.date("ymd").'exception.txt',$msg,file_append);
}
function getmsg($exception)
{
//获取最准确的异常 
while($exception->getprevious())$exception = $exception->getprevious();
$msg = ' message: '.$exception->getmessage();
$msg .= ' file: '.$exception->getfile().':'.$exception->getline()."\n";
return $msg;
}
set_error_handler('errorhandler',e_all);
set_exception_handler('exceptionhandler');
}
?>

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网