[Svn-src-all:2683] [version-2_12-dev 21582] #1633 (エラーハンドリングの改善)
Seasoft
admin @ mail.ec-cube.net
2012年 3月 4日 (日) 04:20:00 JST
Subversion committed to /home/svn/open 21582
http://svn.ec-cube.net/open_trac/changeset/21582
┌────────────────────────────┐
│更新者 : Seasoft │
│更新日時: 2012-03-04 04:20:00 +0900 (日, 04 3月 2012)│
└────────────────────────────┘
Log:
--------------------------------------------------------
#1633 (エラーハンドリングの改善)
#1676 (ログファイルを分離する)
#1677 (デバッグログの出力設定と画面へのエラー出力設定とを分離する)
#1678 (SQL の実行ログを提供する)
#1613 (typo修正・ソース整形・ソースコメントの改善)
Changed: [U:修正,A:追加,D:削除]
--------------------------------------------------------
U branches/version-2_12-dev/data/class/SC_Customer.php
U branches/version-2_12-dev/data/class/SC_Query.php
U branches/version-2_12-dev/data/class/SC_Response.php
U branches/version-2_12-dev/data/class/helper/SC_Helper_DB.php
U branches/version-2_12-dev/data/class/helper/SC_Helper_HandleError.php
U branches/version-2_12-dev/data/class/helper/SC_Helper_Plugin.php
U branches/version-2_12-dev/data/class/pages/LC_Page.php
U branches/version-2_12-dev/data/class/pages/admin/LC_Page_Admin.php
U branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis.php
U branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_Delivery.php
U branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_DeliveryInput.php
U branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_Holiday.php
U branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_Kiyaku.php
U branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_Payment.php
U branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_ZipInstall.php
U branches/version-2_12-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php
U branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
U branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSV.php
U branches/version-2_12-dev/data/class/pages/admin/system/LC_Page_Admin_System_Bkup.php
U branches/version-2_12-dev/data/class/pages/error/LC_Page_Error_SystemError.php
U branches/version-2_12-dev/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php
U branches/version-2_12-dev/data/class/pages/shopping/LC_Page_Shopping_Deliv.php
U branches/version-2_12-dev/data/class/util/GC_Utils.php
U branches/version-2_12-dev/data/class/util/SC_Utils.php
U branches/version-2_12-dev/data/mtb_constants_init.php
U branches/version-2_12-dev/data/require_base.php
U branches/version-2_12-dev/html/install/sql/insert_data.sql
変更: branches/version-2_12-dev/data/class/SC_Customer.php
===================================================================
--- branches/version-2_12-dev/data/class/SC_Customer.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/SC_Customer.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -205,7 +205,7 @@
function startSession() {
$_SESSION['customer'] = $this->customer_data;
// セッション情報の保存
- GC_Utils_Ex::gfPrintLog('access : user='.$this->customer_data['customer_id'] ."\t"."ip=". $this->getRemoteHost(), CUSTOMER_LOG_REALFILE);
+ GC_Utils_Ex::gfPrintLog('access : user='.$this->customer_data['customer_id'] ."\t"."ip=". $this->getRemoteHost(), CUSTOMER_LOG_REALFILE, false);
}
// ログアウト $_SESSION['customer']を解放し、ログに書き込む
@@ -219,7 +219,7 @@
$objSiteSess = new SC_SiteSession_Ex();
$objSiteSess->unsetUniqId();
// ログに記録する
- GC_Utils_Ex::gfPrintLog('logout : user='.$this->customer_data['customer_id'] ."\t"."ip=". $this->getRemoteHost(), CUSTOMER_LOG_REALFILE);
+ GC_Utils_Ex::gfPrintLog('logout : user='.$this->customer_data['customer_id'] ."\t"."ip=". $this->getRemoteHost(), CUSTOMER_LOG_REALFILE, false);
}
// ログインに成功しているか判定する。
変更: branches/version-2_12-dev/data/class/SC_Query.php
===================================================================
--- branches/version-2_12-dev/data/class/SC_Query.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/SC_Query.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -923,11 +923,8 @@
function prepare($sql, $types = null, $result_types = MDB2_PREPARE_RESULT) {
$sth =& $this->conn->prepare($sql, $types, $result_types);
if (PEAR::isError($sth)) {
- if (!$this->force_run) {
- trigger_error($this->traceError($sth, $sql), E_USER_ERROR);
- } else {
- error_log($this->traceError($sth, $sql), 3, LOG_REALFILE);
- }
+ $msg = $this->traceError($sth, $sql);
+ $this->error($msg);
}
return $sth;
}
@@ -941,26 +938,15 @@
* @return MDB2_Result 結果セットのインスタンス
*/
function execute(&$sth, $arrVal = array()) {
- $timeStart = SC_Utils_Ex::sfMicrotimeFloat();
+
+ $arrStartInfo =& $this->lfStartDbTraceLog($sth, $arrVal);
$affected =& $sth->execute((array)$arrVal);
+ $this->lfEndDbTraceLog($arrStartInfo, $sth, $arrVal);
- // 一定以上時間かかったSQLの場合、ログ出力する。
- if (defined('SQL_QUERY_LOG_MODE') && SQL_QUERY_LOG_MODE == true) {
- $timeEnd = SC_Utils_Ex::sfMicrotimeFloat();;
- $timeExecTime = $timeEnd - $timeStart;
- if (defined('SQL_QUERY_LOG_MIN_EXEC_TIME') && $timeExecTime >= (float)SQL_QUERY_LOG_MIN_EXEC_TIME) {
- $logMsg = sprintf("SQL_LOG [%.2fsec]\n%s", $timeExecTime, $sth->query) . "\n";
- error_log($logMsg, 3, LOG_REALFILE);
- }
- }
-
if (PEAR::isError($affected)) {
$sql = isset($sth->query) ? $sth->query : '';
- if (!$this->force_run) {
- trigger_error($this->traceError($affected, $sql, $arrVal), E_USER_ERROR);
- } else {
- error_log($this->traceError($affected, $sql, $arrVal), 3, LOG_REALFILE);
- }
+ $msg = $this->traceError($affected, $sql, $arrVal);
+ $this->error($msg);
}
$this->conn->last_query = stripslashes($sth->query);
return $affected;
@@ -969,6 +955,8 @@
/**
* エラーの内容をトレースする.
*
+ * XXX trigger_error で処理する場合、1024文字以内に抑える必要がある。
+ * XXX 重要な情報を先頭に置き、冗長になりすぎないように留意する。
* @access private
* @param PEAR::Error $error PEAR::Error インスタンス
* @param string $sql エラーの発生した SQL 文
@@ -976,30 +964,32 @@
* @return string トレースしたエラー文字列
*/
function traceError($error, $sql = '', $arrVal = false) {
- $scheme = '';
- if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
- $scheme = 'http://';
- } else {
- $scheme = 'https://';
- }
-
- $err = $scheme . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . "\n\n"
- . 'SERVER_ADDR: ' . $_SERVER['SERVER_ADDR'] . "\n"
- . 'REMOTE_ADDR: ' . $_SERVER['REMOTE_ADDR'] . "\n"
- . 'USER_AGENT: ' . $_SERVER['HTTP_USER_AGENT'] . "\n\n"
- . 'SQL: ' . $sql . "\n\n";
+ $err = "SQL: [$sql]\n";
if ($arrVal !== false) {
- $err .= 'PlaceHolder: ' . var_export($arrVal, true) . "\n\n";
+ $err .= 'PlaceHolder: [' . var_export($arrVal, true) . "]\n";
}
- $err .= $error->getMessage() . "\n\n";
- $err .= $error->getUserInfo() . "\n\n";
+ $err .= $error->getMessage() . "\n";
+ $err .= rtrim($error->getUserInfo()) . "\n";
- $err .= SC_Utils_Ex::sfBacktraceToString($error->getBackTrace());
+ // PEAR::MDB2 内部のスタックトレースを出力する場合、下記のコメントを外す。
+ // $err .= GC_Utils_Ex::toStringBacktrace($error->getBackTrace());
return $err;
}
/**
+ * エラー処理
+ */
+ function error($msg) {
+ $msg = "DB処理でエラーが発生しました。\n" . $msg;
+ if (!$this->force_run) {
+ trigger_error($msg, E_USER_ERROR);
+ } else {
+ GC_Utils_Ex::gfPrintLog($msg, ERROR_LOG_REALFILE, true);
+ }
+ }
+
+ /**
* SQLクエリの結果セットのカラム名だけを取得する
*
* @param string $n 実行する SQL 文
@@ -1029,4 +1019,69 @@
return $arrRet;
}
+ /**
+ * SQL の実行ログ (トレースログ) を書き出す
+ *
+ * @param string 実行するSQL文
+ * @param array $arrVal プレースホルダに挿入する配列
+ * @return void
+ */
+ private function lfStartDbTraceLog(&$objSth, &$arrVal) {
+ if (!defined('SQL_QUERY_LOG_MODE') || SQL_QUERY_LOG_MODE === 0) {
+ return;
+ }
+ $arrInfo =& $GLOBALS['_SC_Query_TraceLogInfo'];
+ if (!isset($arrInfo['http_request_id'])) {
+ $arrInfo['http_request_id'] = uniqid();
+ }
+
+ $arrStartInfo = array(
+ 'http_request_id' => $arrInfo['http_request_id'],
+ 'time_start' => SC_Utils_Ex::sfMicrotimeFloat(),
+ 'count' => ++$arrInfo['count'],
+ );
+
+ // ログモード1の場合、開始はログに出力しない
+ if (SQL_QUERY_LOG_MODE === 1) {
+ return $arrStartInfo;
+ }
+
+ $msg = "[execute start {$arrStartInfo['http_request_id']}#{$arrStartInfo['count']}]\n"
+ . 'SQL: ' . $objSth->query . "\n"
+ . 'PlaceHolder: ' . var_export($arrVal, true) . "\n";
+ GC_Utils_Ex::gfPrintLog($msg, DB_LOG_REALFILE);
+
+ return $arrStartInfo;
+ }
+
+ /**
+ * SQL の実行ログ (トレースログ) を書き出す
+ *
+ * @param string 実行するSQL文
+ * @param array $arrVal プレースホルダに挿入する配列
+ * @return void
+ */
+ private function lfEndDbTraceLog(&$arrStartInfo, &$objSth, &$arrVal) {
+ if (!defined('SQL_QUERY_LOG_MODE') || SQL_QUERY_LOG_MODE === 0) {
+ return;
+ }
+ $msg = "[execute end {$arrStartInfo['http_request_id']}#{$arrStartInfo['count']}]\n";
+
+ $timeEnd = SC_Utils_Ex::sfMicrotimeFloat();
+ $timeExecTime = $timeEnd - $arrStartInfo['time_start'];
+
+ // ログモード1の場合、
+ if (SQL_QUERY_LOG_MODE === 1) {
+ // 規定時間より速い場合、ログに出力しない
+ if (!defined('SQL_QUERY_LOG_MIN_EXEC_TIME') || $timeExecTime < (float)SQL_QUERY_LOG_MIN_EXEC_TIME) {
+ return;
+ }
+ // 開始時にログ出力していないため、ここで実行内容を出力する
+ $msg .= 'SQL: ' . $objSth->query . "\n";
+ $msg .= 'PlaceHolder: ' . var_export($arrVal, true) . "\n";
+ }
+
+ $msg .= 'execution time: ' . sprintf("%.2f sec", $timeExecTime) . "\n";
+ GC_Utils_Ex::gfPrintLog($msg, DB_LOG_REALFILE);
+ }
}
変更: branches/version-2_12-dev/data/class/SC_Response.php
===================================================================
--- branches/version-2_12-dev/data/class/SC_Response.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/SC_Response.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -133,7 +133,7 @@
// アプリケーション外へのリダイレクトは扱わない
if (preg_match($pattern, $url) === 0) {
- SC_Utils_Ex::sfDispException();
+ trigger_error('', E_USER_ERROR);
}
$netUrl = new Net_URL($url);
変更: branches/version-2_12-dev/data/class/helper/SC_Helper_DB.php
===================================================================
--- branches/version-2_12-dev/data/class/helper/SC_Helper_DB.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/helper/SC_Helper_DB.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -1408,7 +1408,7 @@
$objQuery =& SC_Query_Ex::getSingletonInstance();
$sqls = file_get_contents($sqlFilePath);
- if ($sqls === false) SC_Utils_Ex::sfDispException('ファイルは存在するが読み込めない');
+ if ($sqls === false) trigger_error('ファイルは存在するが読み込めない', E_USER_ERROR);
foreach (explode(';', $sqls) as $sql) {
$sql = trim($sql);
変更: branches/version-2_12-dev/data/class/helper/SC_Helper_HandleError.php
===================================================================
--- branches/version-2_12-dev/data/class/helper/SC_Helper_HandleError.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/helper/SC_Helper_HandleError.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -24,7 +24,9 @@
/**
* エラーハンドリングのクラス
*
- * @package Page
+ * 依存するクラスに構文エラーがあると、捕捉できない。よって、依存は最小に留めること。
+ * 現状 GC_Utils_Ex(GC_Utils) に依存しているため、その中で構文エラーは捕捉できない。
+ * @package Helper
* @version $Id$
*/
class SC_Helper_HandleError {
@@ -86,15 +88,17 @@
return;
}
+ $error_type_name = GC_Utils_Ex::getErrorTypeName($errno);
+
$now = date('Y/m/d H:i:s');
// 本来 realpath() で正規化したいところだが、NULL を返すケースがあるため避けている (#1618)
$log_file_path = DATA_REALDIR . 'logs/site.log';
switch ($errno) {
case E_USER_ERROR:
- $message = $now . " [$errfile:$errline] FATAL Error($errno) $errstr from ". $_SERVER['REMOTE_ADDR'] . "\n";
- error_log($message, 3, $log_file_path);
+ $message = "Fatal error($error_type_name): $errstr on [$errfile($errline)]";
+ GC_Utils_Ex::gfPrintLog($message, ERROR_LOG_REALFILE, true);
- self::displaySystemError($errstr);
+ SC_Helper_HandleError_Ex::displaySystemError($message);
exit(1);
break;
@@ -102,8 +106,8 @@
case E_USER_WARNING:
case E_CORE_WARNING:
case E_COMPILE_WARNING:
- $message = $now . " [$errfile:$errline] WARNING($errno) $errstr from ". $_SERVER['REMOTE_ADDR'] . "\n";
- error_log($message, 3, $log_file_path);
+ $message = "Warning($error_type_name): $errstr on [$errfile($errline)]";
+ GC_Utils_Ex::gfPrintLog($message, ERROR_LOG_REALFILE);
return true;
default:
@@ -125,15 +129,15 @@
* エラーが捕捉されない場合は, 出力バッファリングの内容を返す
*/
static function &_fatal_error_handler(&$buffer) {
- if (preg_match('/<b>(Fatal) error<\/b>: +(.+) in <b>(.+)<\/b> on line <b>(\d+)<\/b><br \/>/i', $buffer, $matches)) {
+ if (preg_match('/<b>(Fatal error)<\/b>: +(.+) in <b>(.+)<\/b> on line <b>(\d+)<\/b><br \/>/i', $buffer, $matches)) {
$now = date('Y/m/d H:i:s');
- // 本来 realpath() で正規化したいところだが、NULL を返すケースがあるため避けている (#1618)
+ // 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);
+ $message = "$matches[1]: $matches[2] on [$matches[3]($matches[4])]";
+ GC_Utils_Ex::gfPrintLog($message, ERROR_LOG_REALFILE, true);
if (DEBUG_MODE !== true) {
$url = HTTP_URL . 'error.php';
- if (defined('ADMIN_FUNCTION') && ADMIN_FUNCTION) {
+ if (defined('ADMIN_FUNCTION') && ADMIN_FUNCTION === true) {
$url .= '?admin';
}
header("Location: $url");
@@ -173,16 +177,15 @@
return;
}
- $errstr = "[{$arrError[file]}:{$arrError[line]}] FATAL Error({$arrError[type]}) {$arrError[message]}";
+ $error_type_name = GC_Utils_Ex::getErrorTypeName($arrError['type']);
+ $errstr = "Fatal error($error_type_name): {$arrError[message]} on [{$arrError[file]}({$arrError[line]})]";
- // ログの書き出し
- $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);
+ GC_Utils_Ex::gfPrintLog($errstr, ERROR_LOG_REALFILE, true);
// エラー画面を表示する
- self::displaySystemError($errstr);
+ SC_Helper_HandleError_Ex::displaySystemError($errstr);
}
/**
@@ -214,11 +217,7 @@
register_shutdown_function(array($objPage, 'destroy'));
$objPage->init();
if (isset($errstr)) {
- $objPage->arrDebugMsg[]
- = "▼▼▼ エラーメッセージ ▼▼▼\n"
- . $errstr . "\n"
- . "▲▲▲ エラーメッセージ ▲▲▲\n"
- ;
+ $objPage->addDebugMsg($errstr);
}
$objPage->process();
}
変更: branches/version-2_12-dev/data/class/helper/SC_Helper_Plugin.php
===================================================================
--- branches/version-2_12-dev/data/class/helper/SC_Helper_Plugin.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/helper/SC_Helper_Plugin.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -46,7 +46,7 @@
function load($plugin_activate_flg = true) {
if (!defined('CONFIG_REALFILE') || !file_exists(CONFIG_REALFILE)) return; // インストール前
- if (SC_Utils_Ex::sfIsInstallFunction()) return; // インストール中
+ if (GC_Utils_Ex::isInstallFunction()) return; // インストール中
if ($plugin_activate_flg === false) return;
// 有効なプラグインを取得
$arrPluginDataList = $this->getEnablePlugin();
変更: branches/version-2_12-dev/data/class/pages/LC_Page.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/LC_Page.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/pages/LC_Page.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -378,19 +378,19 @@
}
/**
- * ログ出力を行う.
+ * 前方互換用
*
- * ログイン中の会員IDを含めてログ出力します.
- *
- * @access protected
- * @param string $mess ログメッセージ
- * @param string $log_level ログレベル('Info' or 'Debug')
- * @return void
+ * @deprecated 2.12.0 GC_Utils_Ex::gfPrintLog を使用すること
*/
function log($mess, $log_level) {
- $mess = $mess . ' user=' . $_SESSION['customer']['customer_id'];
+ trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING);
+ // ログレベル=Debugの場合は、DEBUG_MODEがtrueの場合のみログ出力する
+ if ($log_level === 'Debug' && DEBUG_MODE === false) {
+ return;
+ }
- GC_Utils_Ex::gfFrontLog($mess, $log_level);
+ // ログ出力
+ GC_Utils_Ex::gfPrintLog($mess, '', true);
}
/**
変更: branches/version-2_12-dev/data/class/pages/admin/LC_Page_Admin.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/admin/LC_Page_Admin.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/pages/admin/LC_Page_Admin.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -116,19 +116,19 @@
}
/**
- * ログ出力を行う.
+ * 前方互換用
*
- * ログイン中の管理者IDを含めてログ出力します.
- *
- * @access protected
- * @param string $mess ログメッセージ
- * @param string $log_level ログレベル('Info' or 'Debug')
- * @return void
+ * @deprecated 2.12.0 GC_Utils_Ex::gfPrintLog を使用すること
*/
function log($mess, $log_level) {
- $mess = $mess . ' id=' . $_SESSION['login_id'] . '(' . $_SESSION['authority'] . ')' . '[' . session_id() . ']';
+ trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING);
+ // ログレベル=Debugの場合は、DEBUG_MODEがtrueの場合のみログ出力する
+ if ($log_level === 'Debug' && DEBUG_MODE === false) {
+ return;
+ }
- GC_Utils_Ex::gfAdminLog($mess, $log_level);
+ // ログ出力
+ GC_Utils_Ex::gfPrintLog($mess, '', true);
}
}
変更: branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -193,7 +193,7 @@
// UPDATEの実行
$ret = $objQuery->update('dtb_baseinfo', $sqlval);
- $this->log('update done.');
+ GC_Utils_Ex::gfPrintLog('dtb_baseinfo に UPDATE を実行しました。');
}
function lfInsertData($array) {
@@ -206,7 +206,7 @@
// INSERTの実行
$ret = $objQuery->insert('dtb_baseinfo', $sqlval);
- $this->log('insert done.');
+ GC_Utils_Ex::gfPrintLog('dtb_baseinfo に INSERT を実行しました。');
}
function lfInitParam(&$objFormParam, $post) {
変更: branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_Delivery.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_Delivery.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_Delivery.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -78,7 +78,7 @@
$this->arrErr = $this->lfCheckError($mode, $objFormParam);
if (!empty($this->arrErr['deliv_id'])) {
- SC_Utils_Ex::sfDispException();
+ trigger_error('', E_USER_ERROR);
return;
}
}
変更: branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_DeliveryInput.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_DeliveryInput.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_DeliveryInput.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -87,7 +87,7 @@
break;
case 'pre_edit':
if (count($this->arrErr) > 0) {
- SC_Utils_Ex::sfDispException();
+ trigger_error('', E_USER_ERROR);
}
$this->lfGetDelivData($objFormParam);
break;
変更: branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_Holiday.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_Holiday.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_Holiday.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -84,7 +84,7 @@
$this->arrErr = $this->lfCheckError($mode, $objFormParam);
if (!empty($this->arrErr['holiday_id'])) {
- SC_Utils_Ex::sfDispException();
+ trigger_error('', E_USER_ERROR);
return;
}
変更: branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_Kiyaku.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_Kiyaku.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_Kiyaku.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -79,7 +79,7 @@
$this->arrErr = $this->lfCheckError($mode, $objFormParam);
if (!empty($this->arrErr['kiyaku_id'])) {
- SC_Utils_Ex::sfDispException();
+ trigger_error('', E_USER_ERROR);
return;
}
$post = $objFormParam->getHashArray();
変更: branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_Payment.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_Payment.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_Payment.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -78,7 +78,7 @@
$arrErr = $objFormParam->checkError();
if (!empty($this->arrErr['payment_id'])) {
- SC_Utils_Ex::sfDispException();
+ trigger_error('', E_USER_ERROR);
return;
}
$post = $objFormParam->getHashArray();
変更: branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_ZipInstall.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_ZipInstall.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/pages/admin/basis/LC_Page_Admin_Basis_ZipInstall.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -107,7 +107,7 @@
if ($this->exec) {
if (!empty($this->arrErr)) {
- SC_Utils_Ex::sfDispException();
+ trigger_error('', E_USER_ERROR);
}
switch ($this->tpl_mode) {
// 自動登録
@@ -286,7 +286,7 @@
$this->convertZipCsv();
$fp = fopen(ZIP_CSV_UTF8_REALFILE, 'r');
if (!$fp) {
- SC_Utils_Ex::sfDispException(ZIP_CSV_UTF8_REALFILE . ' の読み込みに失敗しました。');
+ trigger_error(ZIP_CSV_UTF8_REALFILE . ' の読み込みに失敗しました。', E_USER_ERROR);
}
return $fp;
}
@@ -296,12 +296,12 @@
$fpr = fopen(ZIP_CSV_REALFILE, 'r');
if (!$fpr) {
- SC_Utils_Ex::sfDispException(ZIP_CSV_REALFILE . ' の読み込みに失敗しました。');
+ trigger_error(ZIP_CSV_REALFILE . ' の読み込みに失敗しました。', E_USER_ERROR);
}
$fpw = fopen(ZIP_CSV_UTF8_REALFILE, 'w');
if (!$fpw) {
- SC_Utils_Ex::sfDispException(ZIP_CSV_UTF8_REALFILE . ' を開けません。');
+ trigger_error(ZIP_CSV_UTF8_REALFILE . ' を開けません。', E_USER_ERROR);
}
while (!feof($fpr)) {
@@ -352,17 +352,17 @@
// 郵便番号CSVをdownloadする。
$res = $req->sendRequest();
if (!$res) {
- SC_Utils_Ex::sfDispException(ZIP_DOWNLOAD_URL . ' の取得に失敗しました。');
+ trigger_error(ZIP_DOWNLOAD_URL . ' の取得に失敗しました。', E_USER_ERROR);
}
// 郵便番号CSV(zip file)を保存する。
$fp = fopen($this->zip_csv_temp_realfile, 'w');
if (!$fp) {
- SC_Utils_Ex::sfDispException($this->zip_csv_temp_realfile . ' を開けません。');
+ trigger_error($this->zip_csv_temp_realfile . ' を開けません。', E_USER_ERROR);
}
$res = fwrite($fp, $req->getResponseBody());
if (!$res) {
- SC_Utils_Ex::sfDispException($this->zip_csv_temp_realfile . ' への書き込みに失敗しました。');
+ trigger_error($this->zip_csv_temp_realfile . ' への書き込みに失敗しました。', E_USER_ERROR);
}
}
@@ -374,7 +374,7 @@
function lfExtractZipFile() {
$zip = zip_open($this->zip_csv_temp_realfile);
if (!is_resource($zip)) {
- SC_Utils_Ex::sfDispException($this->zip_csv_temp_realfile . ' をオープンできません。');
+ trigger_error($this->zip_csv_temp_realfile . ' をオープンできません。', E_USER_ERROR);
}
do {
@@ -382,7 +382,7 @@
} while ($entry && zip_entry_name($entry) != 'KEN_ALL.CSV');
if (!$entry) {
- SC_Utils_Ex::sfDispException($this->zip_csv_temp_realfile . ' に対象ファイルが見つかりません。');
+ trigger_error($this->zip_csv_temp_realfile . ' に対象ファイルが見つかりません。', E_USER_ERROR);
}
// 展開時の破損を考慮し、別名で一旦展開する。
@@ -390,17 +390,17 @@
$res = zip_entry_open($zip, $entry, 'rb');
if (!$res) {
- SC_Utils_Ex::sfDispException($this->zip_csv_temp_realfile . ' の展開に失敗しました。');
+ trigger_error($this->zip_csv_temp_realfile . ' の展開に失敗しました。', E_USER_ERROR);
}
$fp = fopen($tmp_csv_realfile, 'w');
if (!$fp) {
- SC_Utils_Ex::sfDispException($tmp_csv_realfile . ' を開けません。');
+ trigger_error($tmp_csv_realfile . ' を開けません。', E_USER_ERROR);
}
$res = fwrite($fp, zip_entry_read($entry, zip_entry_filesize($entry)));
if ($res === FALSE) {
- SC_Utils_Ex::sfDispException($tmp_csv_realfile . ' の書き込みに失敗しました。');
+ trigger_error($tmp_csv_realfile . ' の書き込みに失敗しました。', E_USER_ERROR);
}
fclose($fp);
@@ -409,13 +409,13 @@
// CSV 削除
$res = unlink(ZIP_CSV_REALFILE);
if (!$res) {
- SC_Utils_Ex::sfDispException(ZIP_CSV_REALFILE . ' を削除できません。');
+ trigger_error(ZIP_CSV_REALFILE . ' を削除できません。', E_USER_ERROR);
}
// CSV ファイル名変更
$res = rename($tmp_csv_realfile, ZIP_CSV_REALFILE);
if (!$res) {
- SC_Utils_Ex::sfDispException('ファイル名を変更できません。: ' . $tmp_csv_realfile . ' -> ' . ZIP_CSV_REALFILE);
+ trigger_error('ファイル名を変更できません。: ' . $tmp_csv_realfile . ' -> ' . ZIP_CSV_REALFILE, E_USER_ERROR);
}
}
変更: branches/version-2_12-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -767,7 +767,7 @@
// 商品規格IDが指定されていない場合、例外エラーを発生
if (strlen($product_class_id) === 0) {
- SC_Utils_Ex::sfDispException('商品規格指定なし');
+ trigger_error('商品規格指定なし', E_USER_ERROR);
}
// 選択済みの商品であれば数量を1増やす
@@ -792,7 +792,7 @@
// 一致する商品規格がない場合、例外エラーを発生
if (empty($arrProduct)) {
- SC_Utils_Ex::sfDispException('商品規格一致なし');
+ trigger_error('商品規格一致なし', E_USER_ERROR);
}
$arrProduct['quantity'] = 1;
変更: branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -100,7 +100,7 @@
// エラーチェック
$this->arrErr = $objFormParam->checkError();
if (count($this->arrErr) > 0) {
- SC_Utils_Ex::sfDispException();
+ trigger_error('', E_USER_ERROR);
}
// 商品ID取得
変更: branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSV.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSV.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSV.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -602,7 +602,7 @@
}
// いずれにも該当しない場合、例外エラー
else {
- SC_Utils_Ex::sfDispException();
+ trigger_error('', E_USER_ERROR);
}
}
return $sqlval;
変更: branches/version-2_12-dev/data/class/pages/admin/system/LC_Page_Admin_System_Bkup.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/admin/system/LC_Page_Admin_System_Bkup.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/pages/admin/system/LC_Page_Admin_System_Bkup.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -438,7 +438,7 @@
$msg = 'バックアップファイルの展開に失敗しました。' . "\n";
$msg .= '展開元: ' . $bkup_filepath . "\n";
$msg .= '展開先: ' . $work_dir;
- SC_Utils_Ex::sfDispException($msg);
+ trigger_error($msg, E_USER_ERROR);
}
// トランザクション開始
@@ -503,7 +503,7 @@
// csvファイルからデータの取得
$fp = fopen($file_path, 'r');
if ($fp === false) {
- SC_Utils_Ex::sfDispException($file_name . ' のファイルオープンに失敗しました。');
+ trigger_error($file_name . ' のファイルオープンに失敗しました。', E_USER_ERROR);
}
GC_Utils_Ex::gfPrintLog('リストア実行: ' . $table);
変更: branches/version-2_12-dev/data/class/pages/error/LC_Page_Error_SystemError.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/error/LC_Page_Error_SystemError.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/pages/error/LC_Page_Error_SystemError.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -91,7 +91,7 @@
* @return void
*/
function sendResponse() {
- $this->adminPage = SC_Utils_Ex::sfIsAdminFunction();
+ $this->adminPage = GC_Utils_Ex::isAdminFunction();
if ($this->adminPage) {
$this->tpl_mainpage = 'login_error.tpl';
@@ -135,42 +135,26 @@
$errmsg .= $this->lfGetErrMsgHead();
$errmsg .= "\n";
+ // デバッグ用のメッセージが指定されている場合
+ if (!empty($this->arrDebugMsg)) {
+ $errmsg .= implode("\n\n", $this->arrDebugMsg) . "\n";
+ }
+
// PEAR エラーを伴う場合
if (!is_null($this->pearResult)) {
$errmsg .= $this->pearResult->message . "\n\n";
$errmsg .= $this->pearResult->userinfo . "\n\n";
- $errmsg .= SC_Utils_Ex::sfBacktraceToString($this->pearResult->backtrace);
+ $errmsg .= GC_Utils_Ex::toStringBacktrace($this->pearResult->backtrace);
}
// (上に該当せず)バックトレーススタックが指定されている場合
else if (is_array($this->backtrace)) {
- $errmsg .= SC_Utils_Ex::sfBacktraceToString($this->backtrace);
+ $errmsg .= GC_Utils_Ex::toStringBacktrace($this->backtrace);
}
- // (上に該当せず)バックトレースを生成できる環境(一般的には PHP 4 >= 4.3.0, PHP 5)の場合
- else if (function_exists('debug_backtrace')) {
- $backtrace = debug_backtrace();
-
- // バックトレースのうち handle_error 以前は通常不要と考えられるので削除
- $cnt = 0;
- $offset = 0;
- foreach ($backtrace as $key => $arrLine) {
- $cnt ++;
- if (!isset($arrLine['file']) && $arrLine['function'] === 'handle_error') {
- $offset = $cnt;
- break;
- }
- }
- if ($offset !== 0) {
- $backtrace = array_slice($backtrace, $offset);
- }
-
- $errmsg .= SC_Utils_Ex::sfBacktraceToString($backtrace);
+ else {
+ $arrBacktrace = GC_Utils_Ex::getDebugBacktrace();
+ $errmsg .= GC_Utils_Ex::toStringBacktrace($arrBacktrace);
}
- // デバッグ用のメッセージが指定されている場合
- if (!empty($this->arrDebugMsg)) {
- $errmsg .= implode("\n\n", $this->arrDebugMsg) . "\n";
- }
-
return $errmsg;
}
変更: branches/version-2_12-dev/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -67,7 +67,7 @@
}
$this->setTemplate($this->tpl_mainpage);
- $debug_message = 'block:' . $this->tpl_mainpage . "\n";
- GC_Utils_Ex::gfDebugLog($debug_message);
+ // $debug_message = 'block:' . $this->tpl_mainpage . "\n";
+ // GC_Utils_Ex::gfDebugLog($debug_message);
}
}
変更: branches/version-2_12-dev/data/class/pages/shopping/LC_Page_Shopping_Deliv.php
===================================================================
--- branches/version-2_12-dev/data/class/pages/shopping/LC_Page_Shopping_Deliv.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/pages/shopping/LC_Page_Shopping_Deliv.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -198,7 +198,7 @@
* @return boolean お届け先チェックの値が妥当な場合 true
*/
function registerDeliv($deliv_check, $uniqid, &$objPurchase, &$objCustomer) {
- $this->log('register deliv. deliv_check=' . $deliv_check, 'Debug');
+ GC_Utils_Ex::gfDebugLog('register deliv. deliv_check=' . $deliv_check);
$arrValues = array();
// 会員登録住所がチェックされている場合
if ($deliv_check == '-1') {
変更: branches/version-2_12-dev/data/class/util/GC_Utils.php
===================================================================
--- branches/version-2_12-dev/data/class/util/GC_Utils.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/util/GC_Utils.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -24,6 +24,8 @@
/**
* 各種ユーティリティクラス.
*
+ * このクラスはエラーハンドリング処理でも使用している。
+ * よって、このファイルで構文エラーが発生すると、EC-CUBE はエラーを捕捉できない。
* @package Util
* @author LOCKON CO.,LTD.
* @version $Id$
@@ -37,12 +39,10 @@
* @return void
*/
function gfDebugLog($obj) {
- if (DEBUG_MODE === true) {
- GC_Utils_Ex::gfPrintLog(
- "*** start Debug ***\n" .
- print_r($obj, true) .
- '*** end Debug ***'
- );
+ if (USE_VERBOSE_LOG === true) {
+ $msg = "DEBUG\n"
+ . print_r($obj, true);
+ GC_Utils_Ex::gfPrintLog($msg, DEBUG_LOG_REALFILE);
}
}
@@ -52,31 +52,74 @@
* @param int $forLogInfo ログ出力用に利用するかどうか(1:ログ出力用に利用する)
* @return string 呼び出し元クラス、関数名、行数の文字列表現
*/
- function gfGetCallerInfo($forLogInfo=true) {
+ function gfGetCallerInfo($forLogInfo = true) {
// バックトレースを取得する
$traces = debug_backtrace(false);
$bklv = 1;
if ($forLogInfo === true) {
$bklv = 3;
- if( ($traces[3]['class'] === 'LC_Page'
- || $traces[3]['class'] === 'LC_Page_Admin')
- && $traces[3]['function'] === 'log')
- {
+ if (($traces[3]['class'] === 'LC_Page' || $traces[3]['class'] === 'LC_Page_Admin')
+ && $traces[3]['function'] === 'log'
+ ) {
$bklv = 4;
}
}
- $str = $traces[$bklv]['class'] . '::' . $traces[$bklv]['function'] . '(' . $traces[$bklv-1]['line'] . ') ';
+ $str = $traces[$bklv]['class'] . '::' . $traces[$bklv]['function'] . '(' . $traces[$bklv - 1]['line'] . ') ';
return $str;
}
/**
- * ログメッセージに、呼び出し元関数名等の情報を付加して返します
+ * デバッグ情報として必要な範囲のバックトレースを取得する
*
- * @param string $mess ログメッセージ
- * @param string $log_level ログレベル('Info' or 'Debug')
- * @return string ログメッセージに呼び出し元関数名等の情報を付加した文字列
+ * エラーハンドリングに関わる情報を切り捨てる。
*/
- function gfGetLogStr($mess, $log_level='Info') {
+ function getDebugBacktrace($arrBacktrace = null) {
+ if (is_null($arrBacktrace)) {
+ $arrBacktrace = debug_backtrace(false);
+ }
+ $arrReturn = array();
+ foreach (array_reverse($arrBacktrace) as $arrLine) {
+ // 言語レベルの致命的エラー時。発生元の情報はトレースできない。(エラーハンドリング処理のみがトレースされる)
+ // 実質的に何も返さない(空配列を返す)意図。
+ if (strlen($arrLine['file']) === 0
+ && ($arrLine['class'] === 'SC_Helper_HandleError' || $arrLine['class'] === 'SC_Helper_HandleError_Ex')
+ && ($arrLine['function'] === 'handle_error' || $arrLine['function'] === 'handle_warning')
+ ) {
+ break 1;
+ }
+
+ $arrReturn[] = $arrLine;
+
+ // エラーハンドリング処理に引き渡した以降の情報は通常不要なので含めない。
+ if (!isset($arrLine['class']) && $arrLine['function'] === 'trigger_error') {
+ break 1;
+ }
+ if (($arrLine['class'] === 'SC_Helper_HandleError' || $arrLine['class'] === 'SC_Helper_HandleError_Ex')
+ && ($arrLine['function'] === 'handle_error' || $arrLine['function'] === 'handle_warning')
+ ) {
+ break 1;
+ }
+ if (($arrLine['class'] === 'SC_Utils' || $arrLine['class'] === 'SC_Utils_Ex')
+ && $arrLine['function'] === 'sfDispException'
+ ) {
+ break 1;
+ }
+ if (($arrLine['class'] === 'GC_Utils' || $arrLine['class'] === 'GC_Utils_Ex')
+ && $arrLine['function'] === 'gfDebugLog'
+ ) {
+ break 1;
+ }
+ }
+ return array_reverse($arrReturn);
+ }
+
+ /**
+ * 前方互換用
+ *
+ * @deprecated 2.12.0
+ */
+ function gfGetLogStr($mess, $log_level = 'Info') {
+ trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING);
// メッセージの前に、ログ出力元関数名とログ出力関数呼び出し部分の行数を付与
$mess = GC_Utils::gfGetCallerInfo(true) . $mess;
@@ -89,79 +132,67 @@
}
/**
- * 管理画面用ログ出力
+ * 前方互換用
*
- * 管理画面用ログ出力を行ないます
- * @param string $mess ログメッセージ
- * @param string $log_level ログレベル('Info' or 'Debug')
- * @return void
+ * @deprecated 2.12.0 GC_Utils_Ex::gfPrintLog を使用すること
*/
- function gfAdminLog($mess, $log_level='Info') {
+ function gfAdminLog($mess, $log_level = 'Info') {
+ trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING);
// ログレベル=Debugの場合は、DEBUG_MODEがtrueの場合のみログ出力する
- if ($log_level === 'Debug'&& DEBUG_MODE === false) {
+ if ($log_level === 'Debug' && DEBUG_MODE === false) {
return;
}
- // ログメッセージに、呼び出し元関数名等の情報を付加する
- $mess = GC_Utils::gfGetLogStr($mess, $log_level);
-
// ログ出力
- // ※現在は管理画面用・フロント用のログ出力とも、同じファイル(site.log)に出力します。
- // 分けたい場合は、以下の関数呼び出しの第2引数にファイルパスを指定してください
- GC_Utils_Ex::gfPrintLog($mess);
+ GC_Utils_Ex::gfPrintLog($mess, '', true);
}
/**
- * フロント用ログ出力
+ * 前方互換用
*
- * フロント用ログ出力を行ないます
- * @param string $mess ログメッセージ
- * @param string $log_level ログレベル('Info' or 'Debug')
- * @return void
+ * @deprecated 2.12.0 GC_Utils_Ex::gfPrintLog を使用すること
*/
- function gfFrontLog($mess, $log_level='Info') {
+ function gfFrontLog($mess, $log_level = 'Info') {
+ trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING);
// ログレベル=Debugの場合は、DEBUG_MODEがtrueの場合のみログ出力する
- if ($log_level === 'Debug'&& DEBUG_MODE === false) {
+ if ($log_level === 'Debug' && DEBUG_MODE === false) {
return;
}
- // ログメッセージに、呼び出し元関数名等の情報を付加する
- $mess = GC_Utils::gfGetLogStr($mess, $log_level);
-
// ログ出力
- // ※現在は管理画面用・フロント用のログ出力とも、同じファイル(site.log)に出力します。
- // 分けたい場合は、以下の関数呼び出しの第2引数にファイルパスを指定してください
- GC_Utils_Ex::gfPrintLog($mess);
+ GC_Utils_Ex::gfPrintLog($mess, '', true);
}
- /*----------------------------------------------------------------------
- * [名称] gfPrintLog
- * [概要] ログファイルに日時、処理ファイル名、メッセージを出力
- * [引数] 表示したいメッセージ
- * [戻値] なし
- * [依存] なし
- * [注釈] -
- *----------------------------------------------------------------------*/
- function gfPrintLog($mess, $path = '') {
+ /**
+ * ログの出力を行う
+ *
+ * エラー・警告は trigger_error() を経由して利用すること。(補足の出力は例外。)
+ * @param string $msg
+ * @param string $path
+ * @param bool $verbose 冗長な出力を行うか
+ */
+ function gfPrintLog($msg, $path = '', $verbose = USE_VERBOSE_LOG) {
// 日付の取得
$today = date('Y/m/d H:i:s');
// 出力パスの作成
- if ($path == '') {
- $path = LOG_REALFILE;
+
+ if (strlen($path) === 0) {
+ $path = GC_Utils_Ex::isAdminFunction() ? ADMIN_LOG_REALFILE : LOG_REALFILE;
}
- // エスケープされている文字をもとに戻す
- $trans_tbl = get_html_translation_table (HTML_ENTITIES);
- $trans_tbl = array_flip ($trans_tbl);
- $mess = strtr($mess, $trans_tbl);
-
- $fp = fopen($path, 'a+');
- if ($fp) {
- $string = "$today [{$_SERVER['PHP_SELF']}] $mess from {$_SERVER['REMOTE_ADDR']}\n";
- fwrite($fp, $string);
- fclose($fp);
+ $msg = "$today [{$_SERVER['PHP_SELF']}] $msg from {$_SERVER['REMOTE_ADDR']}\n";
+ if ($verbose) {
+ if (GC_Utils_Ex::isFrontFunction()) {
+ $msg .= 'customer_id = ' . $_SESSION['customer']['customer_id'] . "\n";
+ }
+ if (GC_Utils_Ex::isAdminFunction()) {
+ $msg .= 'login_id = ' . $_SESSION['login_id'] . '(' . $_SESSION['authority'] . ')' . '[' . session_id() . ']' . "\n";
+ }
+ $msg .= GC_Utils_Ex::toStringBacktrace(GC_Utils_Ex::getDebugBacktrace());
}
+ error_log($msg, 3, $path);
+
// ログテーション
GC_Utils_Ex::gfLogRotation(MAX_LOG_QUANTITY, MAX_LOG_SIZE, $path);
}
@@ -252,4 +283,109 @@
}
return implode(', ', $mailaddrs); //複数アドレスはカンマ区切りにする
}
+
+ /**
+ * バックトレースをテキスト形式で出力する
+ *
+ * 現状スタックトレースの形で出力している。
+ * @param array $arrBacktrace バックトレース
+ * @return string テキストで表現したバックトレース
+ */
+ function toStringBacktrace($arrBacktrace) {
+ $string = '';
+
+ foreach (array_reverse($arrBacktrace) as $backtrace) {
+ if (strlen($backtrace['class']) >= 1) {
+ $func = $backtrace['class'] . $backtrace['type'] . $backtrace['function'];
+ } else {
+ $func = $backtrace['function'];
+ }
+
+ $string .= $backtrace['file'] . '(' . $backtrace['line'] . '): ' . $func . "\n";
+ }
+
+ return $string;
+ }
+
+ /**
+ * エラー型から該当する定数名を取得する
+ *
+ * 該当する定数がない場合、$error_type を返す。
+ * @param integer $error_type エラー型
+ * @return string|integer エラー定数名
+ */
+ function getErrorTypeName($error_type) {
+ $arrDefinedConstants = get_defined_constants(true);
+
+ // PHP の歴史対応
+ $arrDefinedCoreConstants = array();
+ // PHP >= 5.3.1, PHP == 5.3.0 (not Windows)
+ if (isset($arrDefinedConstants['Core'])) {
+ $arrDefinedCoreConstants = $arrDefinedConstants['Core'];
+ }
+ // PHP < 5.3.0
+ elseif (isset($arrDefinedConstants['internal'])) {
+ $arrDefinedCoreConstants = $arrDefinedConstants['internal'];
+ }
+ // PHP == 5.3.0 (Windows)
+ elseif (isset($arrDefinedConstants['mhash'])) {
+ $arrDefinedCoreConstants = $arrDefinedConstants['mhash'];
+ }
+
+ foreach ($arrDefinedCoreConstants as $constant_name => $constant_value) {
+ if (substr($constant_name, 0, 2) === 'E_' && $constant_value == $error_type) {
+ return $constant_name;
+ }
+ }
+ return $error_type;
+ }
+
+ /**
+ * 現在の URL を取得する
+ *
+ * @return string 現在のURL
+ */
+ function getUrl() {
+ $url = '';
+
+ if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
+ $url = 'https://';
+ } else {
+ $url = 'http://';
+ }
+
+ $url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
+ if (strlen($_SERVER['QUERY_STRING']) >= 1) {
+ $url .= '?' . $_SERVER['QUERY_STRING'];
+ }
+
+ return $url;
+ }
+
+ /**
+ * 管理機能かを判定
+ *
+ * @return bool 管理機能か
+ */
+ function isAdminFunction() {
+ return defined('ADMIN_FUNCTION') && ADMIN_FUNCTION === true;
+ }
+
+ /**
+ * フロント機能かを判定
+ *
+ * @return bool フロント機能か
+ */
+ function isFrontFunction() {
+ return defined('FRONT_FUNCTION') && FRONT_FUNCTION === true;
+ }
+
+ /**
+ * インストール機能かを判定
+ *
+ * @return bool インストール機能か
+ */
+ function isInstallFunction() {
+ return defined('INSTALL_FUNCTION') && INSTALL_FUNCTION === true;
+ }
}
変更: branches/version-2_12-dev/data/class/util/SC_Utils.php
===================================================================
--- branches/version-2_12-dev/data/class/util/SC_Utils.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/class/util/SC_Utils.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -160,27 +160,13 @@
}
/**
- * 例外エラーページの表示
+ * 前方互換用
*
- * @param string $debugMsg デバッグ用のメッセージ
- * @return void
+ * @deprecated 2.12.0 trigger_error($debugMsg, E_USER_ERROR) を使用すること
*/
function sfDispException($debugMsg = null) {
- 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 (!is_null($debugMsg)) {
- $objPage->addDebugMsg($debugMsg);
- }
- if (function_exists('debug_backtrace')) {
- $objPage->backtrace = debug_backtrace();
- }
- GC_Utils_Ex::gfPrintLog($objPage->sfGetErrMsg());
- $objPage->process();
-
- exit();
+ trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING);
+ trigger_error($debugMsg, E_USER_ERROR);
}
/* 認証の可否判定 */
@@ -1675,70 +1661,53 @@
}
/**
- * 現在の URL を取得する
+ * 前方互換用
*
- * @return string 現在のURL
+ * @deprecated 2.12.0 GC_Utils_Ex::getUrl を使用すること
*/
function sfGetUrl() {
- $url = '';
-
- if (SC_Utils_Ex::sfIsHTTPS()) {
- $url = 'https://';
- } else {
- $url = 'http://';
- }
-
- $url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . '?' . $_SERVER['QUERY_STRING'];
-
- return $url;
+ trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING);
+ return GC_Utils_Ex::getUrl();
}
/**
- * バックトレースをテキスト形式で出力する
+ * 前方互換用
*
- * @return string テキストで表現したバックトレース
+ * @deprecated 2.12.0 GC_Utils_Ex::toStringBacktrace を使用すること
*/
function sfBacktraceToString($arrBacktrace) {
- $string = '';
-
- foreach (array_reverse($arrBacktrace) as $backtrace) {
- if (strlen($backtrace['class']) >= 1) {
- $func = $backtrace['class'] . $backtrace['type'] . $backtrace['function'];
- } else {
- $func = $backtrace['function'];
- }
-
- $string .= $backtrace['file'] . ' ' . $backtrace['line'] . ':' . $func . "\n";
- }
-
- return $string;
+ trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING);
+ return GC_Utils_Ex::toStringBacktrace($arrBacktrace);
}
/**
- * 管理機能かを判定
+ * 前方互換用
*
- * @return bool 管理機能か
+ * @deprecated 2.12.0 GC_Utils_Ex::isAdminFunction を使用すること
*/
function sfIsAdminFunction() {
- return defined('ADMIN_FUNCTION') && ADMIN_FUNCTION;
+ trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING);
+ return GC_Utils_Ex::isAdminFunction();
}
/**
- * フロント機能かを判定
+ * 前方互換用
*
- * @return bool フロント機能か
+ * @deprecated 2.12.0 GC_Utils_Ex::isFrontFunction を使用すること
*/
function sfIsFrontFunction() {
- return defined('FRONT_FUNCTION') && FRONT_FUNCTION;
+ trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING);
+ return GC_Utils_Ex::isFrontFunction();
}
/**
- * インストール機能かを判定
+ * 前方互換用
*
- * @return bool インストール機能か
+ * @deprecated 2.12.0 GC_Utils_Ex::isInstallFunction を使用すること
*/
function sfIsInstallFunction() {
- return defined('INSTALL_FUNCTION') && INSTALL_FUNCTION;
+ trigger_error('前方互換用メソッドが使用されました。', E_USER_WARNING);
+ return GC_Utils_Ex::isInstallFunction();
}
// 郵便番号から住所の取得
@@ -1855,10 +1824,10 @@
}
$xml = $pluginsXml->asXML();
- if (strlen($xml) == 0) SC_Utils_Ex::sfDispException();
+ if (strlen($xml) == 0) trigger_error('', E_USER_ERROR);
$return = file_put_contents(PLUGIN_REALDIR . 'plugins.xml', $pluginsXml->asXML());
- if ($return === false) SC_Utils_Ex::sfDispException();
+ if ($return === false) trigger_error('', E_USER_ERROR);
return $return;
}
@@ -1870,7 +1839,6 @@
* 現在の Unix タイムスタンプを float (秒単位) でマイクロ秒まで返す
*
* PHP4の上位互換用途。
- * FIXME PHP4でテストする。(現状全くテストしていない。)
* @param SimpleXMLElement $pluginsXml プラグイン XML
* @return integer ファイルに書き込まれたバイト数を返します。
*/
変更: branches/version-2_12-dev/data/mtb_constants_init.php
===================================================================
--- branches/version-2_12-dev/data/mtb_constants_init.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/mtb_constants_init.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -79,6 +79,8 @@
define('REVIEW_REGIST_MAX', 5);
/** デバッグモード(true:sfPrintRやDBのエラーメッセージ、ログレベルがDebugのログを出力する、false:出力しない) */
define('DEBUG_MODE', false);
+/** ログを冗長とするか(true:利用する、false:利用しない) */
+define('USE_VERBOSE_LOG', DEBUG_MODE);
/** 管理ユーザID(メンテナンス用表示されない。) */
define('ADMIN_ID', "1");
/** 会員登録時に仮会員確認メールを送信するか (true:仮会員、false:本会員) */
@@ -161,10 +163,18 @@
define('NORMAL_PRICE_TITLE', "通常価格");
/** 価格名称 */
define('SALE_PRICE_TITLE', "販売価格");
-/** ログファイル */
+/** 標準ログファイル */
define('LOG_REALFILE', DATA_REALDIR . "logs/site.log");
/** 会員ログイン ログファイル */
define('CUSTOMER_LOG_REALFILE', DATA_REALDIR . "logs/customer.log");
+/** 管理機能ログファイル */
+define('ADMIN_LOG_REALFILE', DATA_REALDIR . "logs/admin.log");
+/** デバッグログファイル(未入力:標準ログファイル・管理画面ログファイル) */
+define('DEBUG_LOG_REALFILE', "");
+/** エラーログファイル(未入力:標準ログファイル・管理画面ログファイル) */
+define('ERROR_LOG_REALFILE', DATA_REALDIR . "logs/error.log");
+/** DBログファイル */
+define('DB_LOG_REALFILE', DATA_REALDIR . "logs/db.log");
/** 画像一時保存 */
define('IMAGE_TEMP_REALDIR', HTML_REALDIR . "upload/temp_image/");
/** 画像保存先 */
@@ -388,14 +398,14 @@
define('PLUGIN_TEMP_REALDIR', HTML_REALDIR . "upload/temp_plugin/");
/** アップロード一時ディレクトリ */
define('DOWNLOADS_TEMP_DIR', DATA_REALDIR . "downloads/tmp/");
+/** プラグイン 外部ファイルURL */
+define('PLUGIN_HTML_URL', USER_URL . PLUGIN_DIR);
+/** プラグインファイル登録可能拡張子(カンマ区切り) */
+define('PLUGIN_EXTENSION', "tar,tar.gz");
/** プラグイン一時展開用ディレクトリ(アップデート用) */
define('DOWNLOADS_TEMP_PLUGIN_UPDATE_DIR', DOWNLOADS_TEMP_DIR . "plugin_update/");
/** プラグイン一時展開用ディレクトリ(インストール用) */
define('DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR', DOWNLOADS_TEMP_DIR . "plugin_install/");
-/** プラグイン 外部ファイルURL */
-define('PLUGIN_HTML_URL', USER_URL . PLUGIN_DIR);
-/** プラグインファイル登録可能拡張子(カンマ区切り) */
-define('PLUGIN_EXTENSION', "tar,tar.gz");
/** 日数桁数 */
define('DOWNLOAD_DAYS_LEN', 3);
/** ダウンロードファイル登録可能拡張子(カンマ区切り)" */
@@ -428,9 +438,9 @@
define('PRODUCT_TYPE_NORMAL', 1);
/** ダウンロード商品 */
define('PRODUCT_TYPE_DOWNLOAD', 2);
-/** SQLログを取得するフラグ(1:表示, 0:非表示) */
+/** DBログの記録モード (0:記録しない, 1:遅延時のみ記録する, 2:常に記録する) */
define('SQL_QUERY_LOG_MODE', 1);
-/** SQLログを取得する時間設定(設定値以上かかった場合に取得) */
+/** DBログで遅延とみなす実行時間(秒) */
define('SQL_QUERY_LOG_MIN_EXEC_TIME', 2);
/** ページ表示時間のログを取得するフラグ(1:表示, 0:非表示) */
define('PAGE_DISPLAY_TIME_LOG_MODE', 1);
変更: branches/version-2_12-dev/data/require_base.php
===================================================================
--- branches/version-2_12-dev/data/require_base.php 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/data/require_base.php 2012-03-03 19:20:00 UTC (rev 21582)
@@ -33,7 +33,7 @@
// 定数 SAFE が設定されている場合、DBアクセスを回避する。主に、エラー画面を意図する。
if (!defined('SAFE') || !SAFE) {
// インストール中で無い場合、
- if (!SC_Utils_Ex::sfIsInstallFunction()) {
+ if (!GC_Utils_Ex::isInstallFunction()) {
// インストールチェック
SC_Utils_Ex::sfInitInstall();
変更: branches/version-2_12-dev/html/install/sql/insert_data.sql
===================================================================
--- branches/version-2_12-dev/html/install/sql/insert_data.sql 2012-03-03 18:57:33 UTC (rev 21581)
+++ branches/version-2_12-dev/html/install/sql/insert_data.sql 2012-03-03 19:20:00 UTC (rev 21582)
@@ -1072,8 +1072,9 @@
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('ORDER_STATUS_MAX', '50', 70, '対応状況管理画面の一覧表示件数');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('REVIEW_REGIST_MAX', '5', 71, 'フロントレビュー書き込み最大数');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('DEBUG_MODE', 'false', 72, 'デバッグモード(true:sfPrintRやDBのエラーメッセージ、ログレベルがDebugのログを出力する、false:出力しない)');
-INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('ADMIN_ID', '"1"', 73, '管理ユーザID(メンテナンス用表示されない。)');
-INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('CUSTOMER_CONFIRM_MAIL', 'false', 74, '会員登録時に仮会員確認メールを送信するか (true:仮会員、false:本会員)');
+INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('USE_VERBOSE_LOG', 'DEBUG_MODE', 73, 'ログを冗長とするか(true:利用する、false:利用しない)');
+INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('ADMIN_ID', '"1"', 74, '管理ユーザID(メンテナンス用表示されない。)');
+INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('CUSTOMER_CONFIRM_MAIL', 'false', 75, '会員登録時に仮会員確認メールを送信するか (true:仮会員、false:本会員)');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('LOGIN_FRAME', '"login_frame.tpl"', 77, 'ログイン画面フレーム');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('MAIN_FRAME', '"main_frame.tpl"', 78, '管理画面フレーム');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('SITE_FRAME', '"site_frame.tpl"', 79, '一般サイト画面フレーム');
@@ -1113,8 +1114,12 @@
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('START_BIRTH_YEAR', '1970', 139, '生年月日初期選択年');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('NORMAL_PRICE_TITLE', '"通常価格"', 140, '価格名称');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('SALE_PRICE_TITLE', '"販売価格"', 141, '価格名称');
-INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('LOG_REALFILE', 'DATA_REALDIR . "logs/site.log"', 142, 'ログファイル');
+INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('LOG_REALFILE', 'DATA_REALDIR . "logs/site.log"', 142, '標準ログファイル');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('CUSTOMER_LOG_REALFILE', 'DATA_REALDIR . "logs/customer.log"', 143, '会員ログイン ログファイル');
+INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('ADMIN_LOG_REALFILE', 'DATA_REALDIR . "logs/admin.log"', 144, '管理機能ログファイル');
+INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('DEBUG_LOG_REALFILE', '""', 145, 'デバッグログファイル(未入力:標準ログファイル・管理画面ログファイル)');
+INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('ERROR_LOG_REALFILE', 'DATA_REALDIR . "logs/error.log"', 146, 'エラーログファイル(未入力:標準ログファイル・管理画面ログファイル)');
+INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('DB_LOG_REALFILE', 'DATA_REALDIR . "logs/db.log"', 147, 'DBログファイル');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('IMAGE_TEMP_REALDIR', 'HTML_REALDIR . "upload/temp_image/"', 150, '画像一時保存');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('IMAGE_SAVE_REALDIR', 'HTML_REALDIR . "upload/save_image/"', 151, '画像保存先');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('IMAGE_TEMP_URLPATH', 'ROOT_URLPATH . "upload/temp_image/"', 152, '画像一時保存URL');
@@ -1247,8 +1252,8 @@
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('ORDER_PENDING', '7', 806, '決済処理中');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('PRODUCT_TYPE_NORMAL', '1', 900, '通常商品');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('PRODUCT_TYPE_DOWNLOAD', '2', 901, 'ダウンロード商品');
-INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('SQL_QUERY_LOG_MODE', '1', 1000, 'SQLログを取得するフラグ(1:表示, 0:非表示)');
-INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('SQL_QUERY_LOG_MIN_EXEC_TIME', '2', 1001, 'SQLログを取得する時間設定(設定値以上かかった場合に取得)');
+INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('SQL_QUERY_LOG_MODE', '1', 1000, 'DBログの記録モード (0:記録しない, 1:遅延時のみ記録する, 2:常に記録する)');
+INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('SQL_QUERY_LOG_MIN_EXEC_TIME', '2', 1001, 'DBログで遅延とみなす実行時間(秒)');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('PAGE_DISPLAY_TIME_LOG_MODE', '1', 1002, 'ページ表示時間のログを取得するフラグ(1:表示, 0:非表示)');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('PAGE_DISPLAY_TIME_LOG_MIN_EXEC_TIME', '2', 1003, 'ページ表示時間のログを取得する時間設定(設定値以上かかった場合に取得)');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('DEVICE_TYPE_MOBILE', '1', 1100, '端末種別: モバイル');
Svn-src-all メーリングリストの案内