Changeset 18816


Ignore:
Timestamp:
2010/09/21 09:29:26 (11 years ago)
Author:
Seasoft
Message:

#567(エラーハンドリングの修正及び抽象化)

  • デバックモード時のデバッグ情報の画面出力を回復
Location:
branches/version-2_5-dev
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/class/pages/error/LC_Page_Error.php

    r18701 r18816  
    6060     */ 
    6161    function init() { 
    62         parent::init(); 
    6362        $this->tpl_mainpage = 'error.tpl'; 
    6463        $this->tpl_column_num = 1; 
  • branches/version-2_5-dev/html/handle_error.php

    r18815 r18816  
    2424ob_start('_fatal_error_handler'); 
    2525 
    26 // エラー画面を表示させるためのエラーハンドラ 
     26// E_USER_ERROR を捕捉した場合にエラー画面を表示させるためのエラーハンドラ 
    2727set_error_handler('handle_error'); 
    2828 
     
    5555 
    5656/** 
    57  * エラー画面を表示させるための関数. 
     57 * E_USER_ERROR を捕捉した場合にエラー画面を表示させるエラーハンドラ関数. 
    5858 * 
    5959 * この関数は, set_error_handler() 関数に登録するための関数である. 
    60  * trigger_error にて E_USER_ERROR が生成されると, ob_end_clean() 関数によって 
    61  * 出力バッファリングが無効にされ, エラーログを出力した後, エラーページへ 
    62  * リダイレクトする. 
     60 * trigger_error にて E_USER_ERROR が生成されると, エラーログを出力した後, 
     61 * エラー画面を表示させる. 
    6362 * 
    6463 * E_USER_ERROR 以外のエラーが生成された場合, この関数は true を返す. 
     
    7473    switch ($errno) { 
    7574    case E_USER_ERROR: 
    76         ob_end_clean(); 
    7775        error_log("FATAL Error($errno) $errfile:$errline $errstr", 3, realpath(dirname(__FILE__) . "/" . HTML2DATA_DIR . "logs/site.log")); 
    7876 
    79         $admin = ""; 
    80         if (defined('ADMIN_FUNCTION') && ADMIN_FUNCTION) { 
    81             $admin = "?admin"; 
    82         } 
    83         header("Location: " . SITE_URL . "error.php" . $admin); 
     77        displaySystemError($errstr); 
    8478        exit(1); 
    8579        break; 
     
    9185    return true; 
    9286} 
     87 
     88/** 
     89 * エラー画面を表示する 
     90 * 
     91 * @param string|null $errstr エラーメッセージ 
     92 * @return void 
     93 */ 
     94function displaySystemError($errstr = null) { 
     95    if (SC_Utils_Ex::sfIsMobileSite()) { 
     96        ob_clean(); 
     97    } else { 
     98        // 最下層以外の出力用バッファをクリアし、出力のバッファリングを解除する 
     99        // FIXME #811(出力バッファリングの利用を見直し) 
     100        while (ob_get_level() >= 2) { 
     101            ob_end_clean(); 
     102        } 
     103 
     104        // 最下層の出力バッファをクリアする 
     105        ob_clean(); 
     106    } 
     107 
     108    require_once CLASS_EX_PATH . 'page_extends/error/LC_Page_Error_SystemError_Ex.php'; 
     109    $objPage = new LC_Page_Error_SystemError_Ex(); 
     110    register_shutdown_function(array($objPage, 'destroy')); 
     111    $objPage->init(); 
     112    if (isset($errstr)) { 
     113        $objPage->arrDebugMsg[] 
     114            = "▼▼▼ エラーメッセージ ▼▼▼\n" 
     115            . $errstr 
     116            . "▲▲▲ エラーメッセージ ▲▲▲\n" 
     117        ; 
     118    } 
     119    $objPage->process(); 
     120} 
    93121?> 
Note: See TracChangeset for help on using the changeset viewer.