/** * アプリケーション内でリダイレクトする * * 内部で生成する URL の searchpart は、下記の順で上書きしていく。(後勝ち) * 1. 引数 $inheritQueryString が true の場合、$_SERVER['QUERY_STRING'] * 2. $location に含まれる searchpart * 3. 引数 $arrQueryString * @param string $location 「url-path」「現在のURLからのパス」「URL」のいずれか。「../」の解釈は行なわない。 * @param array $arrQueryString URL に付加する searchpart * @param bool $inheritQueryString 現在のリクエストの searchpart を継承するか * @param bool|null $useSsl true:HTTPSを強制, false:HTTPを強制, null:継承 * @return void * @static */ function sendRedirect($location, $arrQueryString = array(), $inheritQueryString = false, $useSsl = null) { // url-path → URL 変換 if ($location[0] === '/') { $netUrl = new Net_URL($location); $location = $netUrl->getUrl(); } // URL の場合 if (preg_match('/^https?:/', $location)) { $url = $location; if (is_bool($useSsl)) { if ($useSsl) { $pattern = '/^' . preg_quote(HTTP_URL, '/') . '(.*)/'; $replacement = HTTPS_URL . '\\1'; $url = preg_replace($pattern, $replacement, $url); } else { $pattern = '/^' . preg_quote(HTTPS_URL, '/') . '(.*)/'; $replacement = HTTP_URL . '\\1'; $url = preg_replace($pattern, $replacement, $url); } } } else { if (!is_bool($useSsl)) { $useSsl = SC_Utils_Ex::sfIsHTTPS(); } $netUrl = new Net_URL($useSsl ? HTTPS_URL : HTTP_URL); $netUrl->path = dirname($_SERVER['PHP_SELF']) . '/' . $location; $url = $netUrl->getUrl(); } $pattern = '/^(' . preg_quote(HTTP_URL, '/') . '|' . preg_quote(HTTPS_URL, '/') . ')/'; // アプリケーション外へのリダイレクトは扱わない if (preg_match($pattern, $url) === 0) { SC_Utils_Ex::sfDispException(); } $netUrl = new Net_URL($url); if ($inheritQueryString && !empty($_SERVER['QUERY_STRING'])) { $arrQueryStringBackup = $netUrl->querystring; // XXX メソッド名は add で始まるが、実際には置換を行う $netUrl->addRawQueryString($_SERVER['QUERY_STRING']); $netUrl->querystring = array_merge($netUrl->querystring, $arrQueryStringBackup); } $netUrl->querystring = array_merge($netUrl->querystring, $arrQueryString); $session = SC_SessionFactory::getInstance(); if (SC_MobileUserAgent_Ex::isMobile() || $session->useCookie() == false) { $netUrl->addQueryString(session_name(), session_id()); } $netUrl->addQueryString(TRANSACTION_ID_NAME, SC_Helper_Session_Ex::getToken()); $url = $netUrl->getURL(); header("Location: {$url}"); exit; }
* along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ if (!defined("DATA_REALDIR")) { define("DATA_REALDIR", HTML_REALDIR . HTML2DATA_DIR); } // PHP4互換用関数読み込み(PHP_Compat) require_once DATA_REALDIR . 'require_compat.php'; // アプリケーション初期化処理 require_once DATA_REALDIR . 'app_initial.php'; // 各種クラス読み込み require_once DATA_REALDIR . 'require_classes.php'; // インストール中で無い場合、 if (!SC_Utils_Ex::sfIsInstallFunction()) { // インストールチェック SC_Utils_Ex::sfInitInstall(); // セッションハンドラ開始 require_once CLASS_EX_REALDIR . 'helper_extends/SC_Helper_Session_Ex.php'; $objSession = new SC_Helper_Session_Ex(); // セッション初期化・開始 require_once CLASS_REALDIR . 'session/SC_SessionFactory.php'; $sessionFactory = SC_SessionFactory::getInstance(); $sessionFactory->initSession(); /* * 管理画面の場合は認証行う. * 認証処理忘れ防止のため, LC_Page_Admin::init() 等ではなく, ここでチェックする. */ $objSession->adminAuthorization(); // プラグインを読み込む //require_once DATA_REALDIR . 'require_plugin.php'; }
/** * 指定の URL へリダイレクトする. * * リダイレクト先 URL に SITE_URL 及び SSL_URL を含むかチェックし, * LC_Page::getToken() の値を URLパラメータで自動的に付与する. * * @param string $url リダイレクト先 URL * @param boolean $isMobile モバイル用にセッションIDを付与する場合 true * @return void|boolean $url に SITE_URL 及び, SSL_URL を含まない場合 false, * 正常に遷移可能な場合は, $url の ロケーションヘッダを出力する. * @see Net_URL */ function sendRedirect($url, $isMobile = false) { if (preg_match("/(" . preg_quote(SITE_URL, '/') . "|" . preg_quote(SSL_URL, '/') . ")/", $url)) { $netURL = new Net_URL($url); if (!empty($_SERVER['QUERY_STRING'])) { $netURL->addRawQueryString($_SERVER['QUERY_STRING']); } $session = SC_SessionFactory::getInstance(); if ($isMobile || $session->useCookie() == false) { $netURL->addQueryString(session_name(), session_id()); } $netURL->addQueryString(TRANSACTION_ID_NAME, $this->getToken()); header("Location: " . $netURL->getURL()); //return true; exit; } return false; }