Changeset 21384


Ignore:
Timestamp:
2012/01/02 02:02:25 (12 years ago)
Author:
Seasoft
Message:

#1589 (パフォーマンス改善 handle_error の無駄を省く)
#1588 (PHP の WARNING の扱いが曖昧)

Location:
branches/version-2_11-dev
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_11-dev/data/class/SC_Initial.php

    r21310 r21384  
    113113     */ 
    114114    function phpconfigInit() { 
    115         // E_DEPRECATED 定数 (for PHP < 5.3) 
    116         // TODO バージョン互換処理に統合したい。 
    117         $this->defineIfNotDefined('E_DEPRECATED', 8192); 
    118  
    119         // エラーレベル設定 
    120         // 開発時は E_ALL を推奨 
    121         error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED); 
    122  
    123115        ini_set('display_errors', '1'); 
    124116        ini_set('html_errors', '1'); 
  • branches/version-2_11-dev/html/handle_error.php

    r21264 r21384  
    2424ob_start('_fatal_error_handler'); 
    2525 
     26// E_DEPRECATED 定数 (for PHP < 5.3) 
     27// TODO バージョン互換処理に統合したい。 
     28if (!defined('E_DEPRECATED')) { 
     29    define('E_DEPRECATED', 8192); 
     30} 
     31 
     32// エラーレベル設定 
     33// 開発時は E_ALL を推奨 
     34error_reporting(E_ALL & ~E_NOTICE & ~E_USER_NOTICE & ~E_DEPRECATED); 
     35 
    2636// E_USER_ERROR を捕捉した場合にエラー画面を表示させるためのエラーハンドラ 
    27 set_error_handler('handle_error'); 
     37set_error_handler('handle_error', error_reporting()); 
    2838 
    2939/** 
     
    6373 * trigger_error にて E_USER_ERROR が生成されると, エラーログを出力した後, 
    6474 * エラー画面を表示させる. 
    65  * 
    66  * E_USER_ERROR 以外のエラーが生成された場合, この関数は true を返す. 
     75 * E_WARNING, E_USER_WARNING が発生した場合、ログを記録して、true を返す。 
     76 * (エラー画面・エラー文言は表示させない。) 
    6777 * 
    6878 * @param integer $errno エラーコード 
     
    7181 * @param integer $errline エラーが発生した行番号 
    7282 * @return void|boolean E_USER_ERROR が発生した場合は, エラーページへリダイレクト; 
    73  *                      E_USER_ERROR 以外の場合は true 
     83 *                      E_WARNING, E_USER_WARNING が発生した場合、true を返す 
    7484 */ 
    7585function handle_error($errno, $errstr, $errfile, $errline) { 
     86 
     87    // error_reporting 設定に含まれていないエラーコードは処理しない 
     88    if (!(error_reporting() & $errno)) { 
     89        return; 
     90    } 
     91 
    7692    $now = date("Y/m/d H:i:s"); 
    7793    switch ($errno) { 
    78     case E_USER_ERROR: 
    79         error_log($now . " [$errfile] FATAL Error($errno) $errfile:$errline $errstr from ". $_SERVER['REMOTE_ADDR'] . "\n", 3, realpath(dirname(__FILE__) . "/" . HTML2DATA_DIR . "logs/site.log")); 
     94        case E_USER_ERROR: 
     95            error_log($now . " [$errfile] FATAL Error($errno) $errfile:$errline $errstr from ". $_SERVER['REMOTE_ADDR'] . "\n", 3, realpath(dirname(__FILE__) . "/" . HTML2DATA_DIR . "logs/site.log")); 
    8096 
    81         displaySystemError($errstr); 
    82         exit(1); 
    83         break; 
     97            displaySystemError($errstr); 
     98            exit(1); 
     99            break; 
    84100 
    85     case E_USER_WARNING: 
    86     case E_USER_NOTICE: 
    87     default: 
     101        case E_WARNING: 
     102        case E_USER_WARNING: 
     103            error_log($now . " [$errfile] WARNING($errno) $errfile:$errline $errstr from ". $_SERVER['REMOTE_ADDR'] . "\n", 3, realpath(dirname(__FILE__) . "/" . HTML2DATA_DIR . "logs/site.log")); 
     104            return true; 
     105            break; 
     106 
     107        default: 
    88108    } 
    89     return true; 
    90109} 
    91110 
Note: See TracChangeset for help on using the changeset viewer.