]>
Commit | Line | Data |
---|---|---|
9835a21d JP |
1 | <?php |
2 | ||
3 | function ErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) { | |
4 | $error_halt = true; | |
5 | $error_type = 'Error'; | |
6 | $error_msg = " $errstr occured in $errfile on $errline at ".date("D M j G:i:s T Y"); | |
ca43eea9 JP |
7 | $email_to = 'USER@localhost'; |
8 | $email_from = 'USER@localhost'; | |
9835a21d JP |
9 | switch($errno) { |
10 | case E_USER_NOTICE: | |
11 | case E_NOTICE: | |
12 | $type = 'Notice'; | |
13 | $error_halt = false; | |
14 | break; | |
15 | case E_USER_WARNING: | |
16 | case E_COMPILE_WARNING: | |
17 | case E_CORE_WARNING: | |
18 | case E_WARNING: | |
19 | $type = 'Warning'; | |
20 | $error_halt = false; | |
21 | break; | |
22 | case E_USER_ERROR: | |
23 | case E_COMPILE_ERROR: | |
24 | case E_CORE_ERROR: | |
25 | case E_ERROR: | |
26 | $type = 'Fatal Error'; | |
27 | break; | |
28 | case E_PARSE: | |
29 | $type = 'Parse Error'; | |
30 | break; | |
31 | default: | |
32 | $type = 'Unknown Error'; | |
33 | break; | |
34 | } | |
35 | $error_bt = ErrorBacktrace(debug_backtrace()); | |
36 | $error_msg = $type . ':' . $error_msg . "\n" . $error_bt . "\n\n"; | |
9835a21d JP |
37 | $error_msg .= print_r(get_included_files(),1)."\n"; |
38 | $error_msg .= print_r($errcontext,1); | |
39 | error_log($error_msg, 1, $email_to); | |
40 | if ($error_halt) { | |
41 | while(ob_get_level()) { ob_end_clean(); } | |
9835a21d JP |
42 | exit -1; |
43 | } | |
9835a21d JP |
44 | } |
45 | ||
46 | function ErrorBacktrace($debug_backtrace) { | |
47 | array_shift($debug_backtrace); | |
48 | $output = ''; | |
49 | foreach ($debug_backtrace as $bt) { | |
50 | $args = ''; | |
51 | foreach ($bt['args'] as $a) { | |
52 | if (!empty($args)) { | |
53 | $args .= ', '; | |
54 | } | |
55 | switch (gettype($a)) { | |
56 | case 'integer': | |
57 | case 'double': | |
58 | $args .= $a; | |
59 | break; | |
60 | case 'string': | |
61 | $a = htmlspecialchars(substr($a, 0, 64)).((strlen($a) > 64) ? '...' : ''); | |
62 | $args .= "\"$a\""; | |
63 | break; | |
64 | case 'array': | |
65 | //$args .= 'Array('.count($a).')'; | |
66 | $args .= print_r($a,1); | |
67 | break; | |
68 | case 'object': | |
69 | $args .= 'Object('.get_class($a).')'; | |
70 | break; | |
71 | case 'resource': | |
72 | $args .= 'Resource('.strstr($a, '#').')'; | |
73 | break; | |
74 | case 'boolean': | |
75 | $args .= $a ? 'True' : 'False'; | |
76 | break; | |
77 | case 'NULL': | |
78 | $args .= 'Null'; | |
79 | break; | |
80 | default: | |
81 | $args .= 'Unknown'; | |
82 | } | |
83 | } | |
84 | empty($bt['class']) && $bt['class'] = ''; | |
85 | empty($bt['type']) && $bt['type'] = ''; | |
86 | empty($bt['function']) && $bt['function'] = ''; | |
87 | $output .= "\n"; | |
88 | $output .= "file: {$bt['line']} - {$bt['file']}\n"; | |
89 | $output .= "call: {$bt['class']}{$bt['type']}{$bt['function']}($args)\n"; | |
90 | } | |
91 | return $output; | |
92 | } | |
93 | ||
94 | set_error_handler('ErrorHandler'); | |
95 | ||
96 | ?> |