+<?php
+
+function ErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) {
+ $error_halt = true;
+ $error_type = 'Error';
+ $error_msg = " $errstr occured in $errfile on $errline at ".date("D M j G:i:s T Y");
+ $email_to = 'sql@mit.edu';
+ $email_from = 'sql@sql.mit.edu';
+ switch($errno) {
+ case E_USER_NOTICE:
+ case E_NOTICE:
+ $type = 'Notice';
+ $error_halt = false;
+ break;
+ case E_USER_WARNING:
+ case E_COMPILE_WARNING:
+ case E_CORE_WARNING:
+ case E_WARNING:
+ $type = 'Warning';
+ $error_halt = false;
+ break;
+ case E_USER_ERROR:
+ case E_COMPILE_ERROR:
+ case E_CORE_ERROR:
+ case E_ERROR:
+ $type = 'Fatal Error';
+ break;
+ case E_PARSE:
+ $type = 'Parse Error';
+ break;
+ default:
+ $type = 'Unknown Error';
+ break;
+ }
+ $error_bt = ErrorBacktrace(debug_backtrace());
+ $error_msg = $type . ':' . $error_msg . "\n" . $error_bt . "\n\n";
+ if (DEVEL && 0) {
+ echo nl2br($error_msg);
+ } else {
+ $error_msg .= print_r($errcontext,1);
+ error_log($error_msg, 1, $email_to);
+ if ($error_halt) {
+ while(ob_get_level()) { ob_end_clean(); }
+ require_once('security.lib.php');
+ redirect('error');
+ exit -1;
+ }
+ }
+}
+
+function ErrorBacktrace($debug_backtrace) {
+ array_shift($debug_backtrace);
+ $output = '';
+ foreach ($debug_backtrace as $bt) {
+ $args = '';
+ foreach ($bt['args'] as $a) {
+ if (!empty($args)) {
+ $args .= ', ';
+ }
+ switch (gettype($a)) {
+ case 'integer':
+ case 'double':
+ $args .= $a;
+ break;
+ case 'string':
+ $a = htmlspecialchars(substr($a, 0, 64)).((strlen($a) > 64) ? '...' : '');
+ $args .= "\"$a\"";
+ break;
+ case 'array':
+ //$args .= 'Array('.count($a).')';
+ $args .= print_r($a,1);
+ break;
+ case 'object':
+ $args .= 'Object('.get_class($a).')';
+ break;
+ case 'resource':
+ $args .= 'Resource('.strstr($a, '#').')';
+ break;
+ case 'boolean':
+ $args .= $a ? 'True' : 'False';
+ break;
+ case 'NULL':
+ $args .= 'Null';
+ break;
+ default:
+ $args .= 'Unknown';
+ }
+ }
+ empty($bt['class']) && $bt['class'] = '';
+ empty($bt['type']) && $bt['type'] = '';
+ empty($bt['function']) && $bt['function'] = '';
+ $output .= "\n";
+ $output .= "file: {$bt['line']} - {$bt['file']}\n";
+ $output .= "call: {$bt['class']}{$bt['type']}{$bt['function']}($args)\n";
+ }
+ return $output;
+}
+
+set_error_handler('ErrorHandler');
+
+?>