From 1168c09fb9b6749b8457df89aac5d7f7fe752b01 Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 5 Aug 2009 10:09:21 +0000 Subject: [PATCH] =?UTF-8?q?#18206713,=20r6726=EC=9D=98=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=EC=82=AC=ED=95=AD=EC=9D=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6727 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/file/FileHandler.class.php | 33 ++++++++++++++++++-------- classes/module/ModuleHandler.class.php | 14 +++++++---- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/classes/file/FileHandler.class.php b/classes/file/FileHandler.class.php index 9d633014d..955c1c2c1 100644 --- a/classes/file/FileHandler.class.php +++ b/classes/file/FileHandler.class.php @@ -269,7 +269,7 @@ /** * @brief 원격파일을 다운받아 return **/ - function getRemoteResource($url, $body = null, $timeout = 3, $method = 'GET', $content_type = null, $headers = array()) { + function getRemoteResource($url, $body = null, $timeout = 3, $method = 'GET', $content_type = null, $headers = array(), $cookies = array(), $post_data = array()) { set_include_path(_XE_PATH_."libs/PEAR"); require_once('PEAR.php'); require_once('HTTP/Request.php'); @@ -278,16 +278,26 @@ $oRequest = new HTTP_Request(__PROXY_SERVER__); $oRequest->setMethod('POST'); $oRequest->_timeout = $timeout; - $oRequest->addPostData('arg', serialize(array('Destination'=>$url, 'method'=>$method, 'body'=>$body, 'content_type'=>$content_type, "headers"=>$headers))); + $oRequest->addPostData('arg', serialize(array('Destination'=>$url, 'method'=>$method, 'body'=>$body, 'content_type'=>$content_type, "headers"=>$headers, "post_data"=>$post_data))); } else { $oRequest = new HTTP_Request($url); - if(!$content_type) $oRequest->addHeader('Content-Type', 'text/html'); - else $oRequest->addHeader('Content-Type', $content_type); if(count($headers)) { foreach($headers as $key => $val) { $oRequest->addHeader($key, $val); } } + if($cookies[$host]) { + foreach($cookies[$host] as $key => $val) { + $oRequest->addCookie($key, $val); + } + } + if(count($post_data)) { + foreach($post_data as $key => $val) { + $oRequest->addPostData($key, $val); + } + } + if(!$content_type) $oRequest->addHeader('Content-Type', 'text/html'); + else $oRequest->addHeader('Content-Type', $content_type); $oRequest->setMethod($method); if($body) $oRequest->setBody($body); @@ -298,17 +308,20 @@ $code = $oRequest->getResponseCode(); $header = $oRequest->getResponseHeader(); - $body = $oRequest->getResponseBody(); + $response = $oRequest->getResponseBody(); + if($c = $oRequest->getResponseCookies()) { + foreach($c as $k => $v) { + $cookies[$host][$v['name']] = $v['value']; + } + } - if($code == 301 || $code == 302) { - $url = $header['location']; - if($url) return FileHandler::getRemoteResource($url, $body, $timeout, $method, $content_type, $headers); - else return; + if($code > 300 && $code < 399 && $header['location']) { + return FileHandler::getRemoteResource($header['location'], $body, $timeout, $method, $content_type, $headers, $cookies, $post_data); } if($code != 200) return; - return $body; + return $response; } /** diff --git a/classes/module/ModuleHandler.class.php b/classes/module/ModuleHandler.class.php index 7ed688ea2..d27e3ff83 100644 --- a/classes/module/ModuleHandler.class.php +++ b/classes/module/ModuleHandler.class.php @@ -110,12 +110,18 @@ //if($this->module && $module_info->module != $this->module) unset($module_info); } - // 역시 모듈을 못 찾았고 $module이 없다면 기본 모듈을 찾아봄 - if(!$module_info && !$this->module) { - $module_info = clone($site_module_info); - $module_info->site_srl = $module_info->module_site_srl; + // module_site_srl과 site_srl 값이 다르면 redirect 시도 + if(!$this->module && !$module_info && $site_module_info->site_srl == 0 && $site_module_info->module_site_srl > 0) { + $site_info = $oModuleModel->getSiteInfo($site_module_info->module_site_srl); + header("location:".getSiteUrl($site_info->domain,'mid',$site_module_info->mid)); + return false; } + // 역시 모듈을 못 찾았고 $module이 없다면 기본 모듈을 찾아봄 + if(!$module_info && !$this->module) $module_info = $site_module_info; + + if(!$module_info && !$this->module && $site_module_info->module_site_srl) $module_info = $site_module_info; + // 모듈정보와 사이트 모듈정보가 다르면(다른 사이트이면) 페이지 리다이렉트 if($module_info && $module_info->site_srl != $site_module_info->site_srl) { // 현재 요청된 모듈이 가상 사이트 모듈일 경우