/** * エラーの内容をトレースする. * * @access private * @param PEAR::Error $error PEAR::Error インスタンス * @param string $sql エラーの発生した SQL 文 * @param array $arrVal プレースホルダ * @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"; if ($arrVal !== false) { $err .= "PlaceHolder: " . var_export($arrVal, true) . "\n\n"; } $err .= $error->getMessage() . "\n\n"; $err .= $error->getUserInfo() . "\n\n"; $err .= SC_Utils_Ex::sfBacktraceToString($error->getBackTrace()); return $err; }
/** * エラーメッセージを生成する * * @return string */ function sfGetErrMsg() { $errmsg = ''; $errmsg .= $this->lfGetErrMsgHead(); $errmsg .= "\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); } else { if (is_array($this->backtrace)) { $errmsg .= SC_Utils_Ex::sfBacktraceToString($this->backtrace); } 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); } } } // デバッグ用のメッセージが指定されている場合 if (!empty($this->arrDebugMsg)) { $errmsg .= implode("\n\n", $this->arrDebugMsg) . "\n"; } return $errmsg; }