(Fatal) error<\/b>: +(.+) in (.+)<\/b> on line (\d+)<\/b>
/i', $buffer, $matches)) { $now = date("Y/m/d H:i:s"); // 本来 realpath() で正規化したいところだが、NULL を返すケースがあるため避けている (#1618) $log_file_path = DATA_REALDIR . 'logs/site.log'; $message = $now . " [$matches[3]:$matches[4]] FATAL Error: $matches[2] from ". $_SERVER['REMOTE_ADDR'] . "\n"; error_log($message, 3, $log_file_path); if (DEBUG_MODE !== true) { $url = HTTP_URL . "error.php"; if (defined('ADMIN_FUNCTION') && ADMIN_FUNCTION) { $url .= "?admin"; } header("Location: $url"); exit; } } return $buffer; } /** * エラー捕捉時のエラーハンドラ関数 (for PHP >= 5.2.0) * * この関数は, register_shutdown_function() 関数に登録するための関数である。 * PHP 5.1 対応処理との互換運用ため E_USER_ERROR は handle_warning で捕捉する。 * * @return void */ static function handle_error() { // 最後のエラーを確実に捉えるため、先頭で呼び出す。 $arrError = error_get_last(); $is_error = false; if (isset($arrError)) { switch ($arrError['type']) { case E_ERROR: case E_PARSE: case E_CORE_ERROR: case E_COMPILE_ERROR: $is_error = true; break; } } if (!$is_error) { return; } $errstr = "[{$arrError[file]}:{$arrError[line]}] FATAL Error({$arrError[type]}) {$arrError[message]}"; // ログの書き出し $now = date("Y/m/d H:i:s"); // 本来 realpath() で正規化したいところだが、NULL を返すケースがあるため避けている (#1618) $log_file_path = DATA_REALDIR . 'logs/site.log'; error_log($now . " $errstr from ". $_SERVER['REMOTE_ADDR'] . "\n", 3, $log_file_path); // エラー画面を表示する self::displaySystemError($errstr); } /** * エラー画面を表示する * * @param string|null $errstr エラーメッセージ * @return void */ static function displaySystemError($errstr = null) { ob_clean(); // 絵文字変換・除去フィルターが有効か評価する。 $loaded_ob_emoji = false; $arrObs = ob_get_status(true); foreach ($arrObs as $arrOb) { if ($arrOb['name'] === 'SC_MobileEmoji::handler') { $loaded_ob_emoji = true; break; } } // 絵文字変換・除去フィルターが無効で、利用できる場合、有効にする。 if (!$loaded_ob_emoji && class_exists('SC_MobileEmoji')) { ob_start(array('SC_MobileEmoji', 'handler')); } require_once CLASS_EX_REALDIR . 'page_extends/error/LC_Page_Error_SystemError_Ex.php'; $objPage = new LC_Page_Error_SystemError_Ex(); register_shutdown_function(array($objPage, 'destroy')); $objPage->init(); if (isset($errstr)) { $objPage->arrDebugMsg[] = "▼▼▼ エラーメッセージ ▼▼▼\n" . $errstr . "\n" . "▲▲▲ エラーメッセージ ▲▲▲\n" ; } $objPage->process(); } }