00001 <?php
00027 class OB_ErrorHandler
00028 {
00029 public static $errorMode = 'html';
00030
00041 public static function errorHandler ($errNo, $errMsg, $fileName, $lineNum, $vars)
00042 {
00043
00044
00045 if (error_reporting() == 0)
00046 return;
00047 if ($errNo == E_NOTICE || $errNo == E_STRICT)
00048 return;
00049
00050 $debug_array = debug_backtrace();
00051 $back_trace = self::_errorBacktrace($debug_array);
00052 $err = self::_getOutputErrorMsg($errNo, $errMsg, $fileName, $lineNum, $back_trace);
00053
00054 BizSystem::logError ($errNo, "ErrorHandler", $errMsg, null, $back_trace);
00055 if ((defined('CLI') && CLI) || self::$errorMode == 'text')
00056 echo $err;
00057 else
00058 BizSystem::clientProxy()->showErrorMessage($err, true);
00059
00060 if ($errNo == E_USER_ERROR || $errNo == E_ERROR)
00061 exit();
00062 }
00063
00070 public static function exceptionHandler($exc)
00071 {
00072 $errno = $exc->getCode();
00073 $errmsg = $exc->getMessage();
00074 $filename = $exc->getFile();
00075 $linenum = $exc->getLine();
00076 $debug_array = $exc->getTrace();
00077 $back_trace = self::_errorBacktrace($debug_array);
00078 $err = self::_getOutputErrorMsg($errno, $errmsg, $filename, $linenum, $back_trace);
00079
00080 BizSystem::logError ($errno, "ExceptionHandler", $errmsg, null, $back_trace);
00081 if ((defined('CLI') && CLI) || self::$errorMode == 'text')
00082 echo $err;
00083 else
00084 BizSystem::clientProxy()->showErrorMessage($err, true);
00085 exit();
00086 }
00087
00098 private static function _getOutputErrorMsg ($errno, $errmsg, $filename, $linenum, $back_trace)
00099 {
00100
00101 date_default_timezone_set('GMT');
00102 $dt = date("Y-m-d H:i:s (T)");
00103
00104 $err = "<div style='font-size: 12px; color: blue; font-family:Arial; font-weight:bold;'>\n";
00105 $err .= "[$dt] An exception occurred while executing this script:<br>\n";
00106 $err .= "Error message: <font color=maroon> #$errno, $errmsg</font><br>\n";
00107 $err .= "Script name and line number of error: <font color=maroon>$filename:$linenum</font><br>\n";
00108 $err .= "<div style='font-weight:normal;'>".$back_trace."</div>\n";
00109
00110 $err .= "<hr>";
00111 $err .= "Please ask system administrator for help...</div>\n";
00112 if ((defined('CLI') && CLI) || self::$errorMode == 'text')
00113 $err = strip_tags($err);
00114 return $err;
00115 }
00116
00123 private static function _errorBacktrace ($debug_array = NULL)
00124 {
00125 if ($debug_array == NULL)
00126 $debug_array = debug_backtrace();
00127 $counter = count($debug_array);
00128 $msg = "";
00129 for ($tmp_counter = 0; $tmp_counter != $counter; ++ $tmp_counter)
00130 {
00131 $msg .= "<br><b>function:</b> ";
00132 $msg .= $debug_array[$tmp_counter]["function"] . " ( ";
00133
00134 $args_counter = count($debug_array[$tmp_counter]["args"]);
00135
00136 for ($tmp_args_counter = 0; $tmp_args_counter != $args_counter; ++ $tmp_args_counter)
00137 {
00138 $a = $debug_array[$tmp_counter]["args"][$tmp_args_counter];
00139 switch (gettype($a))
00140 {
00141 case 'integer':
00142 case 'double':
00143 $msg .= $a;
00144 break;
00145 case 'string':
00146 $a = htmlspecialchars(substr($a, 0, 64)).((strlen($a) > 64) ? '...' : '');
00147 $msg .= "\"$a\"";
00148 break;
00149 case 'array':
00150 $msg .= 'Array('.count($a).')';
00151 break;
00152 case 'object':
00153 $msg .= 'Object('.get_class($a).')';
00154 break;
00155 case 'resource':
00156 $msg .= 'Resource('.strstr($a, '#').')';
00157 break;
00158 case 'boolean':
00159 $msg .= $a ? 'True' : 'False';
00160 break;
00161 case 'NULL':
00162 $msg .= 'Null';
00163 break;
00164 default:
00165 $msg .= 'Unknown';
00166 }
00167 if (($tmp_args_counter + 1) != $args_counter)
00168 $msg .= (", ");
00169 else
00170 $msg .= (" ");
00171 }
00172 $msg .= ") @ ";
00173 if(isset($debug_array[$tmp_counter]["file"]))
00174 {
00175 $msg .= ($debug_array[$tmp_counter]["file"] . " ");
00176 }
00177 if(isset($debug_array[$tmp_counter]["line"]))
00178 {
00179 $msg .= ($debug_array[$tmp_counter]["line"]);
00180 }
00181 if (($tmp_counter + 1) != $counter)
00182 $msg .= "\n";
00183 }
00184 return $msg;
00185 }
00186
00187 }
00188 ?>