]> andersk Git - sql-web.git/blame - lib/errorhandler.lib.php
git-svn-id: svn://presbrey.mit.edu/sql/web@112 a142d4bd-2cfb-0310-9673-cb33a7e74f58
[sql-web.git] / lib / errorhandler.lib.php
CommitLineData
6ba4f54c 1<?php
79ffa771
JP
2/*
3 (c) 2005 Joe Presbrey
4*/
6ba4f54c
JP
5
6function 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
55function 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
103set_error_handler('ErrorHandler');
104
105?>
This page took 0.065074 seconds and 5 git commands to generate.