]>
Commit | Line | Data |
---|---|---|
6ba4f54c 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"); | |
7 | $email_to = 'sql@mit.edu'; | |
8 | $email_from = 'sql@sql.mit.edu'; | |
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"; | |
37 | if (DEVEL && 0) { | |
38 | echo nl2br($error_msg); | |
39 | } else { | |
82ffc3b5 | 40 | $error_msg .= print_r(get_included_files(),1)."\n"; |
6ba4f54c JP |
41 | $error_msg .= print_r($errcontext,1); |
42 | error_log($error_msg, 1, $email_to); | |
43 | if ($error_halt) { | |
44 | while(ob_get_level()) { ob_end_clean(); } | |
45 | require_once('security.lib.php'); | |
46 | redirect('error'); | |
47 | exit -1; | |
48 | } | |
49 | } | |
50 | } | |
51 | ||
52 | function ErrorBacktrace($debug_backtrace) { | |
53 | array_shift($debug_backtrace); | |
54 | $output = ''; | |
55 | foreach ($debug_backtrace as $bt) { | |
56 | $args = ''; | |
57 | foreach ($bt['args'] as $a) { | |
58 | if (!empty($args)) { | |
59 | $args .= ', '; | |
60 | } | |
61 | switch (gettype($a)) { | |
62 | case 'integer': | |
63 | case 'double': | |
64 | $args .= $a; | |
65 | break; | |
66 | case 'string': | |
67 | $a = htmlspecialchars(substr($a, 0, 64)).((strlen($a) > 64) ? '...' : ''); | |
68 | $args .= "\"$a\""; | |
69 | break; | |
70 | case 'array': | |
71 | //$args .= 'Array('.count($a).')'; | |
72 | $args .= print_r($a,1); | |
73 | break; | |
74 | case 'object': | |
75 | $args .= 'Object('.get_class($a).')'; | |
76 | break; | |
77 | case 'resource': | |
78 | $args .= 'Resource('.strstr($a, '#').')'; | |
79 | break; | |
80 | case 'boolean': | |
81 | $args .= $a ? 'True' : 'False'; | |
82 | break; | |
83 | case 'NULL': | |
84 | $args .= 'Null'; | |
85 | break; | |
86 | default: | |
87 | $args .= 'Unknown'; | |
88 | } | |
89 | } | |
90 | empty($bt['class']) && $bt['class'] = ''; | |
91 | empty($bt['type']) && $bt['type'] = ''; | |
92 | empty($bt['function']) && $bt['function'] = ''; | |
93 | $output .= "\n"; | |
94 | $output .= "file: {$bt['line']} - {$bt['file']}\n"; | |
95 | $output .= "call: {$bt['class']}{$bt['type']}{$bt['function']}($args)\n"; | |
96 | } | |
97 | return $output; | |
98 | } | |
99 | ||
100 | set_error_handler('ErrorHandler'); | |
101 | ||
102 | ?> |