欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-08-17 12:22:05
直接上代码

直接上代码

<?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');
}
?>