分享一个php 的异常处理程序
程序员文章站
2023-11-30 20:43:40
直接上代码
直接上代码
<?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'); } ?>