• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List

E:/E/GEAMP/www/openbiz/openbiz/bin/ErrorHandler.php

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         // don't respond to the error if it
00044         // was suppressed with a '@'
00045         if (error_reporting() == 0)
00046             return;
00047         if ($errNo == E_NOTICE || $errNo == E_STRICT) // || $errno == E_WARNING)
00048             return; // ignore notice error
00049 
00050         $debug_array = debug_backtrace();
00051         $back_trace = self::_errorBacktrace($debug_array);
00052         $err = self::_getOutputErrorMsg($errNo, $errMsg, $fileName, $lineNum, $back_trace);
00053         //Send Error to Log Service;
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         // timestamp for the error entry
00101         date_default_timezone_set('GMT'); // to avoid error PHP 5.1
00102         $dt = date("Y-m-d H:i:s (T)");
00103         // TODO: use CSS class for style
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         //$err .= "Variable state when error occurred: $vars<br>";
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             //count how many args a there
00134             $args_counter = count($debug_array[$tmp_counter]["args"]);
00135             //print them
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 ?>

Generated on Thu Apr 19 2012 17:09:13 for openbiz by  doxygen 1.7.2