]> andersk Git - sql-web.git/blob - 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
1 <?php
2 /*
3         (c) 2005 Joe Presbrey
4 */
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";
40         if (DEVEL) {
41                 echo '<table width="100%" bgcolor="white"><tr><td><pre>'.$error_msg.'</pre></td></tr></table>';
42         } else {
43                 $error_msg .= print_r(get_included_files(),1)."\n";
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 ?>
This page took 0.037095 seconds and 5 git commands to generate.