当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-03-01 22:34:49 浏览: 评论:0 

给大家分享一个php的异常处理程序,功能很简单当发生重大错误时,写日志并友好提示用户,用处却很大,对不对,直接上代码:

  1. <?php 
  2. //exceptionHandle.php xiecongwen 20140620 
  3. //define('DEBUG',true); 
  4. /** 
  5. * Display all errors when APPLICATION_ENV is development. 
  6. */ 
  7. if (defined('DEBUG')) { 
  8. error_reporting(E_ALL); 
  9. ini_set("display_errors", 1); 
  10. } 
  11. if(!defined('DEBUG')){ 
  12. /** 
  13. * 当发生重大错误时 写日志 并友好提示用户 
  14. * (PS:只所以将代码写在这里,是因为在其他地方注册时,出现问题无法调用配置函数.待完善...) 
  15. */ 
  16. function shutdownHandler() 
  17. { 
  18. /** 
  19. * 写日志 此处直接写在根目录下shutdownlog.txt 
  20. */ 
  21. $lasterror = error_get_last(); 
  22. if($lasterror){ 
  23. $error = strval(date("Y-m-d h:i:s")).'=>'."[SHUTDOWN] lvl:" . $lasterror['type'] . " | msg:" . $lasterror['message'] . " | file:" . $lasterror['file'] . " | ln:" . $lasterror['line']."\n"; 
  24. file_put_contents('./log/'.date("Ymd").'shutdownlog.txt',$error,FILE_APPEND); 
  25. //友好提示用户 
  26. ob_end_clean(); 
  27. die('对不起,我出错了!'); 
  28. } 
  29. } 
  30. register_shutdown_function('shutdownHandler'); 
  31. } 
  32. if(!defined('DEBUG')){ 
  33.    
  34. function errorHandler($errno, $errstr = '', $errfile = '', $errline = 0) 
  35. { 
  36. //写日志 
  37. $exception = new \ErrorException($errstr, 0, $errno, $errfile, $errline); 
  38. $msg = strval(date("Y-m-d h:i:s")).'=>'.'Type:'.getErrTypeName($errno).' '.getMsg($exception); 
  39. file_put_contents('./log/'.date("Ymd").'error.txt',$msg,FILE_APPEND); 
  40. switch ($errno) 
  41. { 
  42. case E_NOTICE:return ; 
  43. case E_DEPRECATED:return; 
  44. } 
  45. throw $exception; 
  46. } 
  47. function getErrTypeName($errno) 
  48. { 
  49. switch ($errno) 
  50. { 
  51. case E_NOTICE:return 'E_NOTICE' ; 
  52. case E_DEPRECATED:return 'E_DEPRECATED'; 
  53. default:return $errno; 
  54. } 
  55. } 
  56. function exceptionHandler($ex) 
  57. { 
  58. $msg = strval(date("Y-m-d h:i:s")).'=>'.getMsg($ex); 
  59. file_put_contents('./log/'.date("Ymd").'exception.txt',$msg,FILE_APPEND); 
  60. } 
  61. function getMsg($exception) 
  62. { 
  63. //获取最准确的异常  
  64. while($exception->getPrevious())$exception = $exception->getPrevious(); 
  65. $msg = ' Message: '.$exception->getMessage(); 
  66. $msg .= ' File: '.$exception->getFile().':'.$exception->getLine()."\n"; 
  67. return $msg; 
  68. } 
  69. set_error_handler('errorHandler',E_ALL); 
  70. set_exception_handler('exceptionHandler'); 
  71. } 
  72. ?> 

Tags: php异常处理程序

分享到: