Changeset 21582 for branches/version-2_12-dev/data/class/util/GC_Utils.php
- Timestamp:
- 2012/03/04 04:20:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_12-dev/data/class/util/GC_Utils.php
r21579 r21582 25 25 * 各種ユーティリティクラス. 26 26 * 27 * このクラスはエラーハンドリング処理でも使用している。 28 * よって、このファイルで構文エラーが発生すると、EC-CUBE はエラーを捕捉できない。 27 29 * @package Util 28 30 * @author LOCKON CO.,LTD. … … 38 40 */ 39 41 function gfDebugLog($obj) { 40 if (DEBUG_MODE === true) { 41 GC_Utils_Ex::gfPrintLog( 42 "*** start Debug ***\n" . 43 print_r($obj, true) . 44 '*** end Debug ***' 45 ); 42 if (USE_VERBOSE_LOG === true) { 43 $msg = "DEBUG\n" 44 . print_r($obj, true); 45 GC_Utils_Ex::gfPrintLog($msg, DEBUG_LOG_REALFILE); 46 46 } 47 47 } … … 53 53 * @return string 呼び出し元クラス、関数名、行数の文字列表現 54 54 */ 55 function gfGetCallerInfo($forLogInfo =true) {55 function gfGetCallerInfo($forLogInfo = true) { 56 56 // バックトレースを取得する 57 57 $traces = debug_backtrace(false); … … 59 59 if ($forLogInfo === true) { 60 60 $bklv = 3; 61 if( ($traces[3]['class'] === 'LC_Page' 62 || $traces[3]['class'] === 'LC_Page_Admin') 63 && $traces[3]['function'] === 'log') 64 { 61 if (($traces[3]['class'] === 'LC_Page' || $traces[3]['class'] === 'LC_Page_Admin') 62 && $traces[3]['function'] === 'log' 63 ) { 65 64 $bklv = 4; 66 65 } 67 66 } 68 $str = $traces[$bklv]['class'] . '::' . $traces[$bklv]['function'] . '(' . $traces[$bklv -1]['line'] . ') ';67 $str = $traces[$bklv]['class'] . '::' . $traces[$bklv]['function'] . '(' . $traces[$bklv - 1]['line'] . ') '; 69 68 return $str; 70 69 } 71 70 72 71 /** 73 * ログメッセージに、呼び出し元関数名等の情報を付加して返します 74 * 75 * @param string $mess ログメッセージ 76 * @param string $log_level ログレベル('Info' or 'Debug') 77 * @return string ログメッセージに呼び出し元関数名等の情報を付加した文字列 78 */ 79 function gfGetLogStr($mess, $log_level='Info') { 72 * デバッグ情報として必要な範囲のバックトレースを取得する 73 * 74 * エラーハンドリングに関わる情報を切り捨てる。 75 */ 76 function getDebugBacktrace($arrBacktrace = null) { 77 if (is_null($arrBacktrace)) { 78 $arrBacktrace = debug_backtrace(false); 79 } 80 $arrReturn = array(); 81 foreach (array_reverse($arrBacktrace) as $arrLine) { 82 // 言語レベルの致命的エラー時。発生元の情報はトレースできない。(エラーハンドリング処理のみがトレースされる) 83 // 実質的に何も返さない(空配列を返す)意図。 84 if (strlen($arrLine['file']) === 0 85 && ($arrLine['class'] === 'SC_Helper_HandleError' || $arrLine['class'] === 'SC_Helper_HandleError_Ex') 86 && ($arrLine['function'] === 'handle_error' || $arrLine['function'] === 'handle_warning') 87 ) { 88 break 1; 89 } 90 91 $arrReturn[] = $arrLine; 92 93 // エラーハンドリング処理に引き渡した以降の情報は通常不要なので含めない。 94 if (!isset($arrLine['class']) && $arrLine['function'] === 'trigger_error') { 95 break 1; 96 } 97 if (($arrLine['class'] === 'SC_Helper_HandleError' || $arrLine['class'] === 'SC_Helper_HandleError_Ex') 98 && ($arrLine['function'] === 'handle_error' || $arrLine['function'] === 'handle_warning') 99 ) { 100 break 1; 101 } 102 if (($arrLine['class'] === 'SC_Utils' || $arrLine['class'] === 'SC_Utils_Ex') 103 && $arrLine['function'] === 'sfDispException' 104 ) { 105 break 1; 106 } 107 if (($arrLine['class'] === 'GC_Utils' || $arrLine['class'] === 'GC_Utils_Ex') 108 && $arrLine['function'] === 'gfDebugLog' 109 ) { 110 break 1; 111 } 112 } 113 return array_reverse($arrReturn); 114 } 115 116 /** 117 * 前方互換用 118 * 119 * @deprecated 2.12.0 120 */ 121 function gfGetLogStr($mess, $log_level = 'Info') { 122 trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING); 80 123 // メッセージの前に、ログ出力元関数名とログ出力関数呼び出し部分の行数を付与 81 124 $mess = GC_Utils::gfGetCallerInfo(true) . $mess; … … 90 133 91 134 /** 92 * 管理画面用ログ出力 93 * 94 * 管理画面用ログ出力を行ないます 95 * @param string $mess ログメッセージ 96 * @param string $log_level ログレベル('Info' or 'Debug') 97 * @return void 98 */ 99 function gfAdminLog($mess, $log_level='Info') { 135 * 前方互換用 136 * 137 * @deprecated 2.12.0 GC_Utils_Ex::gfPrintLog を使用すること 138 */ 139 function gfAdminLog($mess, $log_level = 'Info') { 140 trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING); 100 141 // ログレベル=Debugの場合は、DEBUG_MODEがtrueの場合のみログ出力する 101 if ($log_level === 'Debug' && DEBUG_MODE === false) {142 if ($log_level === 'Debug' && DEBUG_MODE === false) { 102 143 return; 103 144 } 104 145 105 // ログメッセージに、呼び出し元関数名等の情報を付加する106 $mess = GC_Utils::gfGetLogStr($mess, $log_level);107 108 146 // ログ出力 109 // ※現在は管理画面用・フロント用のログ出力とも、同じファイル(site.log)に出力します。 110 // 分けたい場合は、以下の関数呼び出しの第2引数にファイルパスを指定してください 111 GC_Utils_Ex::gfPrintLog($mess); 112 } 113 114 /** 115 * フロント用ログ出力 116 * 117 * フロント用ログ出力を行ないます 118 * @param string $mess ログメッセージ 119 * @param string $log_level ログレベル('Info' or 'Debug') 120 * @return void 121 */ 122 function gfFrontLog($mess, $log_level='Info') { 147 GC_Utils_Ex::gfPrintLog($mess, '', true); 148 } 149 150 /** 151 * 前方互換用 152 * 153 * @deprecated 2.12.0 GC_Utils_Ex::gfPrintLog を使用すること 154 */ 155 function gfFrontLog($mess, $log_level = 'Info') { 156 trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING); 123 157 // ログレベル=Debugの場合は、DEBUG_MODEがtrueの場合のみログ出力する 124 if ($log_level === 'Debug' && DEBUG_MODE === false) {158 if ($log_level === 'Debug' && DEBUG_MODE === false) { 125 159 return; 126 160 } 127 161 128 // ログメッセージに、呼び出し元関数名等の情報を付加する129 $mess = GC_Utils::gfGetLogStr($mess, $log_level);130 131 162 // ログ出力 132 // ※現在は管理画面用・フロント用のログ出力とも、同じファイル(site.log)に出力します。 133 // 分けたい場合は、以下の関数呼び出しの第2引数にファイルパスを指定してください 134 GC_Utils_Ex::gfPrintLog($mess); 135 } 136 137 /*---------------------------------------------------------------------- 138 * [名称] gfPrintLog 139 * [概要] ログファイルに日時、処理ファイル名、メッセージを出力 140 * [引数] 表示したいメッセージ 141 * [戻値] なし 142 * [依存] なし 143 * [注釈] - 144 *----------------------------------------------------------------------*/ 145 function gfPrintLog($mess, $path = '') { 163 GC_Utils_Ex::gfPrintLog($mess, '', true); 164 } 165 166 /** 167 * ログの出力を行う 168 * 169 * エラー・警告は trigger_error() を経由して利用すること。(補足の出力は例外。) 170 * @param string $msg 171 * @param string $path 172 * @param bool $verbose 冗長な出力を行うか 173 */ 174 function gfPrintLog($msg, $path = '', $verbose = USE_VERBOSE_LOG) { 146 175 // 日付の取得 147 176 $today = date('Y/m/d H:i:s'); 148 177 // 出力パスの作成 149 if ($path == '') { 150 $path = LOG_REALFILE; 151 } 152 153 // エスケープされている文字をもとに戻す 154 $trans_tbl = get_html_translation_table (HTML_ENTITIES); 155 $trans_tbl = array_flip ($trans_tbl); 156 $mess = strtr($mess, $trans_tbl); 157 158 $fp = fopen($path, 'a+'); 159 if ($fp) { 160 $string = "$today [{$_SERVER['PHP_SELF']}] $mess from {$_SERVER['REMOTE_ADDR']}\n"; 161 fwrite($fp, $string); 162 fclose($fp); 163 } 178 179 if (strlen($path) === 0) { 180 $path = GC_Utils_Ex::isAdminFunction() ? ADMIN_LOG_REALFILE : LOG_REALFILE; 181 } 182 183 $msg = "$today [{$_SERVER['PHP_SELF']}] $msg from {$_SERVER['REMOTE_ADDR']}\n"; 184 if ($verbose) { 185 if (GC_Utils_Ex::isFrontFunction()) { 186 $msg .= 'customer_id = ' . $_SESSION['customer']['customer_id'] . "\n"; 187 } 188 if (GC_Utils_Ex::isAdminFunction()) { 189 $msg .= 'login_id = ' . $_SESSION['login_id'] . '(' . $_SESSION['authority'] . ')' . '[' . session_id() . ']' . "\n"; 190 } 191 $msg .= GC_Utils_Ex::toStringBacktrace(GC_Utils_Ex::getDebugBacktrace()); 192 } 193 194 error_log($msg, 3, $path); 164 195 165 196 // ログテーション … … 253 284 return implode(', ', $mailaddrs); //複数アドレスはカンマ区切りにする 254 285 } 286 287 /** 288 * バックトレースをテキスト形式で出力する 289 * 290 * 現状スタックトレースの形で出力している。 291 * @param array $arrBacktrace バックトレース 292 * @return string テキストで表現したバックトレース 293 */ 294 function toStringBacktrace($arrBacktrace) { 295 $string = ''; 296 297 foreach (array_reverse($arrBacktrace) as $backtrace) { 298 if (strlen($backtrace['class']) >= 1) { 299 $func = $backtrace['class'] . $backtrace['type'] . $backtrace['function']; 300 } else { 301 $func = $backtrace['function']; 302 } 303 304 $string .= $backtrace['file'] . '(' . $backtrace['line'] . '): ' . $func . "\n"; 305 } 306 307 return $string; 308 } 309 310 /** 311 * エラー型から該当する定数名を取得する 312 * 313 * 該当する定数がない場合、$error_type を返す。 314 * @param integer $error_type エラー型 315 * @return string|integer エラー定数名 316 */ 317 function getErrorTypeName($error_type) { 318 $arrDefinedConstants = get_defined_constants(true); 319 320 // PHP の歴史対応 321 $arrDefinedCoreConstants = array(); 322 // PHP >= 5.3.1, PHP == 5.3.0 (not Windows) 323 if (isset($arrDefinedConstants['Core'])) { 324 $arrDefinedCoreConstants = $arrDefinedConstants['Core']; 325 } 326 // PHP < 5.3.0 327 elseif (isset($arrDefinedConstants['internal'])) { 328 $arrDefinedCoreConstants = $arrDefinedConstants['internal']; 329 } 330 // PHP == 5.3.0 (Windows) 331 elseif (isset($arrDefinedConstants['mhash'])) { 332 $arrDefinedCoreConstants = $arrDefinedConstants['mhash']; 333 } 334 335 foreach ($arrDefinedCoreConstants as $constant_name => $constant_value) { 336 if (substr($constant_name, 0, 2) === 'E_' && $constant_value == $error_type) { 337 return $constant_name; 338 } 339 } 340 return $error_type; 341 } 342 343 /** 344 * 現在の URL を取得する 345 * 346 * @return string 現在のURL 347 */ 348 function getUrl() { 349 $url = ''; 350 351 if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') { 352 $url = 'https://'; 353 } else { 354 $url = 'http://'; 355 } 356 357 $url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 358 if (strlen($_SERVER['QUERY_STRING']) >= 1) { 359 $url .= '?' . $_SERVER['QUERY_STRING']; 360 } 361 362 return $url; 363 } 364 365 /** 366 * 管理機能かを判定 367 * 368 * @return bool 管理機能か 369 */ 370 function isAdminFunction() { 371 return defined('ADMIN_FUNCTION') && ADMIN_FUNCTION === true; 372 } 373 374 /** 375 * フロント機能かを判定 376 * 377 * @return bool フロント機能か 378 */ 379 function isFrontFunction() { 380 return defined('FRONT_FUNCTION') && FRONT_FUNCTION === true; 381 } 382 383 /** 384 * インストール機能かを判定 385 * 386 * @return bool インストール機能か 387 */ 388 function isInstallFunction() { 389 return defined('INSTALL_FUNCTION') && INSTALL_FUNCTION === true; 390 } 255 391 }
Note: See TracChangeset
for help on using the changeset viewer.