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