Changeset 18282


Ignore:
Timestamp:
2009/09/07 23:42:32 (17 years ago)
Author:
Seasoft
Message:
  • システムエラーページの改訂
  • 例外の表示に対応
Location:
branches/comu-ver2/data/class
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/comu-ver2/data/class/SC_DbConn.php

    r18234 r18282  
    216216    } 
    217217 
    218     function send_err_mail($result, $sql){ 
    219         $url = ''; 
    220         $errmsg = ''; 
    221  
    222         if (SC_Utils_Ex::sfIsHTTPS()) { 
    223             $url = "https://"; 
    224         } else { 
    225             $url = "http://"; 
    226         } 
    227         $url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
    228  
    229         $errmsg = $url."\n\n"; 
    230         $errmsg.= "SERVER_ADDR:" . $_SERVER['SERVER_ADDR'] . "\n"; 
    231         $errmsg.= "REMOTE_ADDR:" . $_SERVER['REMOTE_ADDR'] . "\n"; 
    232         $errmsg.= "USER_AGENT:" . $_SERVER['HTTP_USER_AGENT'] . "\n\n"; 
    233         $errmsg.= $sql . "\n"; 
    234         $errmsg.= $result->message . "\n\n"; 
    235         $errmsg.= $result->userinfo . "\n\n"; 
    236  
    237         $arrRbacktrace = array_reverse($result->backtrace); 
    238  
    239         foreach($arrRbacktrace as $backtrace) { 
    240             if($backtrace['class'] != "") { 
    241                 $func = $backtrace['class'] . "->" . $backtrace['function']; 
    242             } else { 
    243                 $func = $backtrace['function']; 
    244             } 
    245  
    246             $errmsg.= $backtrace['file'] . " " . $backtrace['line'] . ":" . $func . "\n"; 
    247         } 
    248  
     218    function send_err_mail($pearResult, $sql){ 
    249219        require_once(CLASS_EX_PATH . "page_extends/error/LC_Page_Error_SystemError_Ex.php"); 
    250  
     220         
    251221        $objPage = new LC_Page_Error_SystemError_Ex(); 
    252222        register_shutdown_function(array($objPage, "destroy")); 
    253223        $objPage->init(); 
     224        $objPage->sourceCode = $sql; 
     225        $objPage->pearResult = $pearResult; 
     226        GC_Utils_Ex::gfPrintLog($objPage->sfGetErrMsg()); 
    254227        $objPage->process(); 
    255  
    256         if (DEBUG_MODE == true) { 
    257             print('<pre>'); 
    258             print_r(htmlspecialchars($errmsg, ENT_QUOTES, CHAR_CODE)); 
    259             print('</pre>'); 
    260         } 
    261  
    262         GC_Utils_Ex::gfPrintLog($errmsg); 
    263  
     228         
    264229        exit(); 
    265230    } 
  • branches/comu-ver2/data/class/pages/error/LC_Page_Error_SystemError.php

    r18234 r18282  
    2626 
    2727/** 
    28  * エラー表示のページクラス 
    29  * SC_DbConnでエラーが発生した場合の表示ページ 
     28 * システムエラー表示のページクラス 
     29 * システムエラーや例外が発生した場合の表示ページ 
    3030 * 
    3131 * @package Page 
     
    3434 */ 
    3535class LC_Page_Error_SystemError extends LC_Page_Error { 
     36     
     37    /** ソースコード */ 
     38    var $sourceCode; 
     39     
     40    /** PEAR_Error */ 
     41    var $pearResult; 
     42     
     43    /** PEAR_Error がセットされていない場合用のバックトレーススタック */ 
     44    var $backtrace; 
    3645 
    3746    // }}} 
     
    7887        $objView->assignobj($this); 
    7988        $objView->display($this->flame); 
     89         
     90        if (DEBUG_MODE) { 
     91            echo '<div class="debug">'; 
     92            echo '<div>▼▼▼ デバッグ情報ここから ▼▼▼</div>'; 
     93            echo '<pre>'; 
     94            print_r(htmlspecialchars($this->sfGetErrMsg(), ENT_QUOTES, CHAR_CODE)); 
     95            echo '</pre>'; 
     96            echo '<div>▲▲▲ デバッグ情報ここまで ▲▲▲</div>'; 
     97            echo '</div>'; 
     98        } 
    8099    } 
    81100 
     
    97116        return preg_match('|/admin/|', $_SERVER['PHP_SELF']); 
    98117    } 
     118     
     119    /** 
     120     * エラーメッセージを生成する 
     121     * 
     122     * @return string 
     123     */ 
     124    function sfGetErrMsg() { 
     125        $errmsg = ''; 
     126        $errmsg .= $this->lfGetErrMsgHead(); 
     127        $errmsg .= "\n"; 
     128         
     129        // エラーとなったソースコードが明示的に指定されている場合 
     130        if (!is_null($this->sourceCode)) { 
     131            $errmsg .= $this->sourceCode . "\n"; 
     132        } 
     133         
     134        // PEAR エラーを伴う場合 
     135        if (!is_null($this->pearResult)) { 
     136            $errmsg .= $this->pearResult->message . "\n\n"; 
     137            $errmsg .= $this->pearResult->userinfo . "\n\n"; 
     138            $errmsg .= SC_Utils_Ex::sfBacktraceToString($this->pearResult->backtrace); 
     139        } 
     140        // (上に該当せず)バックトレーススタックが指定されている場合 
     141        else if (is_array($this->backtrace)) { 
     142            $errmsg .= SC_Utils_Ex::sfBacktraceToString($this->backtrace); 
     143        } 
     144        // (上に該当せず)バックトレースを生成できる環境(一般的には PHP 4 >= 4.3.0, PHP 5)の場合 
     145        else if (function_exists("debug_backtrace")) { 
     146            $errmsg .= SC_Utils_Ex::sfBacktraceToString(array_slice(debug_backtrace(), 2)); 
     147        } 
     148         
     149        return $errmsg; 
     150    } 
     151     
     152    /** 
     153     * エラーメッセージの冒頭部を生成する 
     154     * 
     155     * @return string 
     156     */ 
     157    function lfGetErrMsgHead() { 
     158        $errmsg = ''; 
     159        $errmsg .= SC_Utils_Ex::sfGetUrl() . "\n"; 
     160        $errmsg .= "\n"; 
     161        $errmsg .= "SERVER_ADDR:" . $_SERVER['SERVER_ADDR'] . "\n"; 
     162        $errmsg .= "REMOTE_ADDR:" . $_SERVER['REMOTE_ADDR'] . "\n"; 
     163        $errmsg .= "USER_AGENT:" . $_SERVER['HTTP_USER_AGENT'] . "\n"; 
     164         
     165        return $errmsg; 
     166    } 
    99167} 
    100168?> 
  • branches/comu-ver2/data/class/util/SC_Utils.php

    r18276 r18282  
    132132    } 
    133133 
     134    /** 
     135     * 例外エラーページの表示 
     136     * 
     137     * @return void 
     138     */ 
     139    function sfDispException() { 
     140        require_once(CLASS_EX_PATH . "page_extends/error/LC_Page_Error_SystemError_Ex.php"); 
     141         
     142        $objPage = new LC_Page_Error_SystemError_Ex(); 
     143        register_shutdown_function(array($objPage, "destroy")); 
     144        $objPage->init(); 
     145        if (function_exists("debug_backtrace")) { 
     146            $objPage->backtrace = debug_backtrace(); 
     147        } 
     148        GC_Utils_Ex::gfPrintLog($objPage->sfGetErrMsg()); 
     149        $objPage->process(); 
     150         
     151        exit(); 
     152    } 
     153 
    134154    /* 認証の可否判定 */ 
    135155    function sfIsSuccess($objSess, $disp_error = true) { 
     
    20992119        return Text_Password::create($length); 
    21002120    } 
     2121     
     2122    /** 
     2123     * 現在の URL を取得する 
     2124     * 
     2125     * @return string 現在のURL 
     2126     */ 
     2127    function sfGetUrl() { 
     2128        $url = ''; 
     2129         
     2130        if (SC_Utils_Ex::sfIsHTTPS()) { 
     2131            $url = "https://"; 
     2132        } else { 
     2133            $url = "http://"; 
     2134        } 
     2135         
     2136        $url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . '?' . $_SERVER['QUERY_STRING']; 
     2137         
     2138        return $url; 
     2139    } 
     2140     
     2141    /** 
     2142     * バックトレースをテキスト形式で出力する 
     2143     * 
     2144     * @return string テキストで表現したバックトレース 
     2145     */ 
     2146    function sfBacktraceToString($arrBacktrace) { 
     2147        $string = ''; 
     2148         
     2149        foreach ($arrBacktrace as $backtrace) { 
     2150            if (strlen($backtrace['class']) >= 1) { 
     2151                $func = $backtrace['class'] . $backtrace['type'] . $backtrace['function']; 
     2152            } else { 
     2153                $func = $backtrace['function']; 
     2154            } 
     2155             
     2156            $string .= $backtrace['file'] . " " . $backtrace['line'] . ":" . $func . "\n"; 
     2157        } 
     2158         
     2159        return $string; 
     2160    } 
    21012161} 
    21022162?> 
Note: See TracChangeset for help on using the changeset viewer.