直接上代码
php" id="highlighter_500490">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
<?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' );
}
?>
|