]> andersk Git - sql-web.git/blob - lib/joe/errors.lib.php
6f760fc69da6b08d7996ba9593ca62cc02f4d339
[sql-web.git] / lib / joe / errors.lib.php
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 {
40                 $error_msg .= print_r(get_included_files(),1)."\n";
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 ?>
This page took 0.029608 seconds and 3 git commands to generate.