<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            php語言

            顯示效果不錯的PHP錯誤 異常處理類

            時間:2025-02-05 10:27:30 php語言 我要投稿
            • 相關推薦

            顯示效果不錯的PHP錯誤 異常處理類

              奮斗的雙腳在踏碎自己的溫床時,卻開拓了一條創造之路。以下是小編為大家搜索整理的顯示效果不錯的PHP錯誤 異常處理類,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!

            顯示效果不錯的PHP錯誤 異常處理類

              一、效果圖:

              二、實現代碼

              代碼如下:

              // 自定義異常函數

              set_exception_handler('handle_exception');

              // 自定義錯誤函數

              set_error_handler('handle_error');

              /**

              * 異常處理

              *

              * @param mixed $exception 異常對象

              * @author blog.snsgou.com

              */

              function handle_exception($exception) {

              Error::exceptionError($exception);

              }

              /**

              * 錯誤處理

              *

              * @param string $errNo 錯誤代碼

              * @param string $errStr 錯誤信息

              * @param string $errFile 出錯文件

              * @param string $errLine 出錯行

              * @author blog.snsgou.com

              */

              function handle_error($errNo, $errStr, $errFile, $errLine) {

              if ($errNo) {

              Error::systemError($errStr, false, true, false);

              }

              }

              /**

              * 系統錯誤處理

              *

              * @author blog.snsgou.com

              */

              class Error {

              public static function systemError($message, $show = true, $save = true, $halt = true) {

              list($showTrace, $logTrace) = self::debugBacktrace();

              if ($save) {

              $messageSave = '' . $message . '

              PHP:' . $logTrace;

              self::writeErrorLog($messageSave);

              }

              if ($show) {

              self::showError('system', "

              $message

              ", $showTrace, 0);

              }

              if ($halt) {

              exit();

              } else {

              return $message;

              }

              }

              /**

              * 代碼執行過程回溯信息

              *

              * @static

              * @access public

              */

              public static function debugBacktrace() {

              $skipFunc[] = 'Error->debugBacktrace';

              $show = $log = '';

              $debugBacktrace = debug_backtrace();

              ksort($debugBacktrace);

              foreach ($debugBacktrace as $k => $error) {

              if (!isset($error['file'])) {

              // 利用反射API來獲取方法/函數所在的文件和行數

              try {

              if (isset($error['class'])) {

              $reflection = new ReflectionMethod($error['class'], $error['function']);

              } else {

              $reflection = new ReflectionFunction($error['function']);

              }

              $error['file'] = $reflection->getFileName();

              $error['line'] = $reflection->getStartLine();

              } catch (Exception $e) {

              continue;

              }

              }

              $file = str_replace(SITE_PATH, '', $error['file']);

              $func = isset($error['class']) ? $error['class'] : '';

              $func .= isset($error['type']) ? $error['type'] : '';

              $func .= isset($error['function']) ? $error['function'] : '';

              if (in_array($func, $skipFunc)) {

              break;

              }

              $error['line'] = sprintf('%04d', $error['line']);

              $show .= '

              [Line: ' . $error['line'] . ']' . $file . '(' . $func . ')

              ';

              $log .= !empty($log) ? ' -> ' : '';

              $log .= $file . ':' . $error['line'];

              }

              return array($show, $log);

              }

              /**

              * 異常處理

              *

              * @static

              * @access public

              * @param mixed $exception

              */

              public static function exceptionError($exception) {

              if ($exception instanceof DbException) {

              $type = 'db';

              } else {

              $type = 'system';

              }

              if ($type == 'db') {

              $errorMsg = '(' . $exception->getCode() . ') ';

              $errorMsg .= self::sqlClear($exception->getMessage(), $exception->getDbConfig());

              if ($exception->getSql()) {

              $errorMsg .= '

              ';

              $errorMsg .= self::sqlClear($exception->getSql(), $exception->getDbConfig());

              $errorMsg .= '

              ';

              }

              } else {

              $errorMsg = $exception->getMessage();

              }

              $trace = $exception->getTrace();

              krsort($trace);

              $trace[] = array('file' => $exception->getFile(), 'line' => $exception->getLine(), 'function' => 'break');

              $phpMsg = array();

              foreach ($trace as $error) {

              if (!empty($error['function'])) {

              $fun = '';

              if (!empty($error['class'])) {

              $fun .= $error['class'] . $error['type'];

              }

              $fun .= $error['function'] . '(';

              if (!empty($error['args'])) {

              $mark = '';

              foreach ($error['args'] as $arg) {

              $fun .= $mark;

              if (is_array($arg)) {

              $fun .= 'Array';

              } elseif (is_bool($arg)) {

              $fun .= $arg ? 'true' : 'false';

              } elseif (is_int($arg)) {

              $fun .= (defined('SITE_DEBUG') && SITE_DEBUG) ? $arg : '%d';

              } elseif (is_float($arg)) {

              $fun .= (defined('SITE_DEBUG') && SITE_DEBUG) ? $arg : '%f';

              } else {

              $fun .= (defined('SITE_DEBUG') && SITE_DEBUG) ? ''' . htmlspecialchars(substr(self::clear($arg), 0, 10)) . (strlen($arg) > 10 ? ' ...' : '') . ''' : '%s';

              }

              $mark = ', ';

              }

              }

              $fun .= ')';

              $error['function'] = $fun;

              }

              if (!isset($error['line'])) {

              continue;

              }

              $phpMsg[] = array('file' => str_replace(array(SITE_PATH, ''), array('', '/'), $error['file']), 'line' => $error['line'], 'function' => $error['function']);

              }

              self::showError($type, $errorMsg, $phpMsg);

              exit();

              }

              /**

              * 記錄錯誤日志

              *

              * @static

              * @access public

              * @param string $message

              */

              public static function writeErrorLog($message) {

              return false; // 暫時不寫入

              $message = self::clear($message);

              $time = time();

              $file = LOG_PATH . '/' . date('Y.m.d') . '_errorlog.php';

              $hash = md5($message);

              $userId = 0;

              $ip = get_client_ip();

              $user = 'User: userId=' . intval($userId) . '; IP=' . $ip . '; RIP:' . $_SERVER['REMOTE_ADDR'];

              $uri = 'Request: ' . htmlspecialchars(self::clear($_SERVER['REQUEST_URI']));

              $message = "t{$time}t$messaget$hasht$user $urin";

              // 判斷該$message是否在時間間隔$maxtime內已記錄過,有,則不用再記錄了

              if (is_file($file)) {

              $fp = @fopen($file, 'rb');

              $lastlen = 50000; // 讀取最后的 $lastlen 長度字節內容

              $maxtime = 60 * 10; // 時間間隔:10分鐘

              $offset = filesize($file) - $lastlen;

              if ($offset > 0) {

              fseek($fp, $offset);

              }

              if ($data = fread($fp, $lastlen)) {

              $array = explode("n", $data);

              if (is_array($array))

              foreach ($array as $key => $val) {

              $row = explode("t", $val);

              if ($row[0] != '') {

              continue;

              }

              if ($row[3] == $hash && ($row[1] > $time - $maxtime)) {

              return;

              }

              }

              }

              }

              error_log($message, 3, $file);

              }

              /**

              * 清除文本部分字符

              *

              * @param string $message

              */

              public static function clear($message) {

              return str_replace(array("t", "r", "n"), " ", $message);

              }

              /**

              * sql語句字符清理

              *

              * @static

              * @access public

              * @param string $message

              * @param string $dbConfig

              */

              public static function sqlClear($message, $dbConfig) {

              $message = self::clear($message);

              if (!(defined('SITE_DEBUG') && SITE_DEBUG)) {

              $message = str_replace($dbConfig['database'], '***', $message);

              //$message = str_replace($dbConfig['prefix'], '***', $message);

              $message = str_replace(C('DB_PREFIX'), '***', $message);

              }

              $message = htmlspecialchars($message);

              return $message;

              }

              /**

              * 顯示錯誤

              *

              * @static

              * @access public

              * @param string $type 錯誤類型 db,system

              * @param string $errorMsg

              * @param string $phpMsg

              */

              public static function showError($type, $errorMsg, $phpMsg = '') {

              global $_G;

              $errorMsg = str_replace(SITE_PATH, '', $errorMsg);

              ob_end_clean();

              $host = $_SERVER['HTTP_HOST'];

              $title = $type == 'db' ? 'Database' : 'System';

              echo <<

              $title Error

              $errorMsg

              EOT;

              if (!empty($phpMsg)) {

              echo '

              ';

              echo '

              PHP Debug

              ';

            echo ' ';

             

              if (is_array($phpMsg)) {

              echo '

            ';

             

              foreach ($phpMsg as $k => $msg) {

              $k++;

              echo '

            ';

             

              echo '

            ';

             

              echo '

            ';

             

              echo '

            ';

             

              echo '

            ';

             

              echo '

            ';

             

              }

              } else {

              echo '

            ';

             

              }

              echo '

            No. File Line Code
            ' . $k . ' ' . $msg['file'] . ' ' . $msg['line'] . ' ' . $msg['function'] . '
              ' . $phpMsg . '

              ';

              }

              echo <<

              EOT;

              exit();

              }

              }

              /**

              * DB異常類

              *

              * @author blog.snsgou.com

              */

              class DbException extends Exception {

              protected $sql;

              protected $dbConfig; // 當前數據庫配置信息

              public function __construct($message, $code = 0, $sql = '', $dbConfig = array()) {

              $this->sql = $sql;

              $this->dbConfig = $dbConfig;

              parent::__construct($message, $code);

              }

              public function getSql() {

              return $this->sql;

              }

              public function getDbConfig() {

              return $this->dbConfig;

              }

              }

            【顯示效果不錯的PHP錯誤 異常處理類】相關文章:

            PHP異常處理辦法08-08

            如何處理PHP異常06-01

            PHP7的異常處理詳解05-10

            php中屏蔽與顯示錯誤消息06-24

            PHP7系列之異常處理08-15

            PHP5異常處理分析實例08-07

            PHP7系列中的異常處理08-11

            PHP7系列之-異常處理06-07

            PHP學習入門之PHP錯誤處理07-14

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院