Changeset 21582 for branches/version-2_12-dev/data/class/util
- Timestamp:
- 2012/03/04 04:20:00 (14 years ago)
- Location:
- branches/version-2_12-dev/data/class/util
- Files:
-
- 2 edited
-
GC_Utils.php (modified) (6 diffs)
-
SC_Utils.php (modified) (4 diffs)
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 } -
branches/version-2_12-dev/data/class/util/SC_Utils.php
r21564 r21582 161 161 162 162 /** 163 * 例外エラーページの表示 164 * 165 * @param string $debugMsg デバッグ用のメッセージ 166 * @return void 163 * 前方互換用 164 * 165 * @deprecated 2.12.0 trigger_error($debugMsg, E_USER_ERROR) を使用すること 167 166 */ 168 167 function sfDispException($debugMsg = null) { 169 require_once CLASS_EX_REALDIR . 'page_extends/error/LC_Page_Error_SystemError_Ex.php'; 170 171 $objPage = new LC_Page_Error_SystemError_Ex(); 172 register_shutdown_function(array($objPage, 'destroy')); 173 $objPage->init(); 174 if (!is_null($debugMsg)) { 175 $objPage->addDebugMsg($debugMsg); 176 } 177 if (function_exists('debug_backtrace')) { 178 $objPage->backtrace = debug_backtrace(); 179 } 180 GC_Utils_Ex::gfPrintLog($objPage->sfGetErrMsg()); 181 $objPage->process(); 182 183 exit(); 168 trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING); 169 trigger_error($debugMsg, E_USER_ERROR); 184 170 } 185 171 … … 1676 1662 1677 1663 /** 1678 * 現在の URL を取得する1679 * 1680 * @ return string 現在のURL1664 * 前方互換用 1665 * 1666 * @deprecated 2.12.0 GC_Utils_Ex::getUrl を使用すること 1681 1667 */ 1682 1668 function sfGetUrl() { 1683 $url = ''; 1684 1685 if (SC_Utils_Ex::sfIsHTTPS()) { 1686 $url = 'https://'; 1687 } else { 1688 $url = 'http://'; 1689 } 1690 1691 $url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . '?' . $_SERVER['QUERY_STRING']; 1692 1693 return $url; 1694 } 1695 1696 /** 1697 * バックトレースをテキスト形式で出力する 1698 * 1699 * @return string テキストで表現したバックトレース 1669 trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING); 1670 return GC_Utils_Ex::getUrl(); 1671 } 1672 1673 /** 1674 * 前方互換用 1675 * 1676 * @deprecated 2.12.0 GC_Utils_Ex::toStringBacktrace を使用すること 1700 1677 */ 1701 1678 function sfBacktraceToString($arrBacktrace) { 1702 $string = ''; 1703 1704 foreach (array_reverse($arrBacktrace) as $backtrace) { 1705 if (strlen($backtrace['class']) >= 1) { 1706 $func = $backtrace['class'] . $backtrace['type'] . $backtrace['function']; 1707 } else { 1708 $func = $backtrace['function']; 1709 } 1710 1711 $string .= $backtrace['file'] . ' ' . $backtrace['line'] . ':' . $func . "\n"; 1712 } 1713 1714 return $string; 1715 } 1716 1717 /** 1718 * 管理機能かを判定 1719 * 1720 * @return bool 管理機能か 1679 trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING); 1680 return GC_Utils_Ex::toStringBacktrace($arrBacktrace); 1681 } 1682 1683 /** 1684 * 前方互換用 1685 * 1686 * @deprecated 2.12.0 GC_Utils_Ex::isAdminFunction を使用すること 1721 1687 */ 1722 1688 function sfIsAdminFunction() { 1723 return defined('ADMIN_FUNCTION') && ADMIN_FUNCTION; 1724 } 1725 1726 /** 1727 * フロント機能かを判定 1728 * 1729 * @return bool フロント機能か 1689 trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING); 1690 return GC_Utils_Ex::isAdminFunction(); 1691 } 1692 1693 /** 1694 * 前方互換用 1695 * 1696 * @deprecated 2.12.0 GC_Utils_Ex::isFrontFunction を使用すること 1730 1697 */ 1731 1698 function sfIsFrontFunction() { 1732 return defined('FRONT_FUNCTION') && FRONT_FUNCTION; 1733 } 1734 1735 /** 1736 * インストール機能かを判定 1737 * 1738 * @return bool インストール機能か 1699 trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING); 1700 return GC_Utils_Ex::isFrontFunction(); 1701 } 1702 1703 /** 1704 * 前方互換用 1705 * 1706 * @deprecated 2.12.0 GC_Utils_Ex::isInstallFunction を使用すること 1739 1707 */ 1740 1708 function sfIsInstallFunction() { 1741 return defined('INSTALL_FUNCTION') && INSTALL_FUNCTION; 1709 trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING); 1710 return GC_Utils_Ex::isInstallFunction(); 1742 1711 } 1743 1712 … … 1856 1825 1857 1826 $xml = $pluginsXml->asXML(); 1858 if (strlen($xml) == 0) SC_Utils_Ex::sfDispException();1827 if (strlen($xml) == 0) trigger_error('', E_USER_ERROR); 1859 1828 1860 1829 $return = file_put_contents(PLUGIN_REALDIR . 'plugins.xml', $pluginsXml->asXML()); 1861 if ($return === false) SC_Utils_Ex::sfDispException();1830 if ($return === false) trigger_error('', E_USER_ERROR); 1862 1831 return $return; 1863 1832 } … … 1871 1840 * 1872 1841 * PHP4の上位互換用途。 1873 * FIXME PHP4でテストする。(現状全くテストしていない。)1874 1842 * @param SimpleXMLElement $pluginsXml プラグイン XML 1875 1843 * @return integer ファイルに書き込まれたバイト数を返します。
Note: See TracChangeset
for help on using the changeset viewer.
