显示比较详细的错误信息

解决您在不同平台环境下遇到的安装和升级问题
回复
头像
ghostry
帖子: 7
注册时间: 2012年 12月 4日 09:55
联系:

显示比较详细的错误信息

帖子 ghostry »

今天在sae上升级0.9总是500.也看不到错误信息。放狗搜了半天也没什么有用的。
干脆搜起来源代码了。
于是我找到了以下办法查看错误信息。
在/var/typecho/common.php里边有个error函数。
详细的错误在这里被覆盖了。我加上了一个判断

代码: 全选

    /**
     * 输出错误页面
     *
     * @access public
     * @param mixed $exception 错误信息
     * @return void
     */
    public static function error($exception) {
   $isException = is_object($exception);

   if ($isException) {
       $code = $exception->getCode();
       $message = $exception->getMessage();
   } else {
       $code = $exception;
   }

   require_once 'Typecho/Response.php';
   $charset = self::$charset;

   if ($isException && $exception instanceof Typecho_Db_Exception) {
       $code = 500;
       @error_log($message);

       //覆盖原始错误信息
       $message = __Typecho_debug__ ? $message : 'Database Server Error';

       if ($exception instanceof Typecho_Db_Adapter_Exception) {
      $code = 503;
      $message = __Typecho_debug__ ? $message : 'Error establishing a database connection';
       } else if ($exception instanceof Typecho_Db_Query_Exception) {
      $message = __Typecho_debug__ ? $message : 'Database Query Error';
       }
   } else {
       switch ($code) {
      case 500:
          $message = __Typecho_debug__ ? $message : 'Server Error';
          break;

      case 404:
          $message = __Typecho_debug__ ? $message : 'Page Not Found';
          break;

      default:
          $code = 'Error';
          break;
       }
   }


   /** 设置http code */
   if (is_numeric($code) && $code > 200) {
       require_once 'Typecho/Response.php';
       Typecho_Response::setStatus($code);
   }

   $message = nl2br($message);

   if (defined('__TYPECHO_EXCEPTION_FILE__')) {
       require_once __TYPECHO_EXCEPTION_FILE__;
   } else {
       echo
       <<<EOF
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="{$charset}">
        <title>{$code}</title>
        <style>
            html {
                padding: 50px 10px;
                font-size: 20px;
                line-height: 1.4;
                color: #666;
                background: #F6F6F3;
                -webkit-text-size-adjust: 100%;
                -ms-text-size-adjust: 100%;
            }

            html,
            input { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; }
            body {
                max-width: 500px;
                _width: 500px;
                padding: 30px 20px 50px;
                margin: 0 auto;
                background: #FFF;
            }
            h1 {
                font-size: 50px;
                text-align: center;
            }
            h1 span { color: #bbb; }
            ul {
                padding: 0 0 0 40px;
            }
            .container {
                max-width: 380px;
                _width: 380px;
                margin: 0 auto;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <h1>{$code}</h1>
            {$message}
        </div>
    </body>
</html>
EOF;
   }

   exit;
    }

以上是修改后的。然后在config文件里添加

代码: 全选

define('__Typecho_debug__', 1);
这样就实现了配置文件控制错误信息的显示情况。
回复