Пример #1
0
 /**
  * エラーの内容をトレースする.
  *
  * @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;
 }