Skip to main content
조회 수 4820 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

$oContext->init();에 대한 분석 다시시작~

function init()
	{
		// set context variables in $GLOBALS (to use in display handler)
		$this->context = &$GLOBALS['__Context__'];
		$this->context->lang = &$GLOBALS['lang'];
		$this->context->_COOKIE = $_COOKIE;

		$this->setRequestMethod('');

		$this->_setXmlRpcArgument();
		$this->_setJSONRequestArgument();
		$this->_setRequestArgument();
		$this->_setUploadedArgument();

		$this->loadDBInfo();

		// If XE is installed, get virtual site information
		if(Context::isInstalled())
		{
			$oModuleModel = getModel('module');
			$site_module_info = $oModuleModel->getDefaultMid();

			if(!isset($site_module_info))
			{
				$site_module_info = new stdClass();
			}

			// if site_srl of site_module_info is 0 (default site), compare the domain to default_url of db_config
			if($site_module_info->site_srl == 0 && $site_module_info->domain != $this->db_info->default_url)
			{
				$site_module_info->domain = $this->db_info->default_url;
			}

			$this->set('site_module_info', $site_module_info);
			if($site_module_info->site_srl && isSiteID($site_module_info->domain))
			{
				$this->set('vid', $site_module_info->domain, true);
			}

			if(!isset($this->db_info))
			{
				$this->db_info = new stdClass();
			}

			$this->db_info->lang_type = $site_module_info->default_language;
			if(!$this->db_info->lang_type)
			{
				$this->db_info->lang_type = 'en';
			}
			if(!$this->db_info->use_db_session)
			{
				$this->db_info->use_db_session = 'N';
			}
		}

		// Load Language File
		$lang_supported = $this->loadLangSelected();

		// Retrieve language type set in user's cookie
		if($this->get('l'))
		{
			$this->lang_type = $this->get('l');
			if($_COOKIE['lang_type'] != $this->lang_type)
			{
				setcookie('lang_type', $this->lang_type, time() + 3600 * 24 * 1000, '/');
			}
		}
		elseif($_COOKIE['lang_type'])
		{
			$this->lang_type = $_COOKIE['lang_type'];
		}

		// If it's not exists, follow default language type set in db_info
		if(!$this->lang_type)
		{
			$this->lang_type = $this->db_info->lang_type;
		}

		// if still lang_type has not been set or has not-supported type , set as English.
		if(!$this->lang_type)
		{
			$this->lang_type = 'en';
		}
		if(is_array($lang_supported) && !isset($lang_supported[$this->lang_type]))
		{
			$this->lang_type = 'en';
		}

		$this->set('lang_supported', $lang_supported);
		$this->setLangType($this->lang_type);

		// load module module's language file according to language setting
		$this->loadLang(_XE_PATH_ . 'modules/module/lang');

		// set session handler
		if(Context::isInstalled() && $this->db_info->use_db_session == 'Y')
		{
			$oSessionModel = getModel('session');
			$oSessionController = getController('session');
			session_set_save_handler(
					array(&$oSessionController, 'open'), array(&$oSessionController, 'close'), array(&$oSessionModel, 'read'), array(&$oSessionController, 'write'), array(&$oSessionController, 'destroy'), array(&$oSessionController, 'gc')
			);
		}
		session_start();
		if(isset($_POST[session_name()]))
		{
			session_id($_POST[session_name()]);
		}

		// set authentication information in Context and session
		if(Context::isInstalled())
		{
			$oModuleModel = getModel('module');
			$oModuleModel->loadModuleExtends();

			$oMemberModel = getModel('member');
			$oMemberController = getController('member');

			if($oMemberController && $oMemberModel)
			{
				// if signed in, validate it.
				if($oMemberModel->isLogged())
				{
					$oMemberController->setSessionInfo();
				}
				// check auto sign-in
				elseif($_COOKIE['xeak'])
				{
					$oMemberController->doAutologin();
				}

				$this->set('is_logged', $oMemberModel->isLogged());
				$this->set('logged_info', $oMemberModel->getLoggedInfo());
			}
		}

		// load common language file
		$this->lang = &$GLOBALS['lang'];
		$this->loadLang(_XE_PATH_ . 'common/lang/');

		// check if using rewrite module
		if(file_exists(_XE_PATH_ . '.htaccess') && $this->db_info->use_rewrite == 'Y')
		{
			$this->allow_rewrite = true;
		}
		else
		{
			$this->allow_rewrite = false;
		}

		// set locations for javascript use
		if($_SERVER['REQUEST_METHOD'] == 'GET')
		{
			if($this->get_vars)
			{
				foreach($this->get_vars as $key => $val)
				{
					if(is_array($val) && count($val))
					{
						foreach($val as $k => $v)
						{
							$url .= ($url ? '&' : '') . $key . '[' . $k . ']=' . urlencode($v);
						}
					}
					elseif($val)
					{
						$url .= ($url ? '&' : '') . $key . '=' . urlencode($val);
					}
				}
				$this->set('current_url', sprintf('%s?%s', Context::getRequestUri(), $url));
			}
			else
			{
				$this->set('current_url', $this->getUrl());
			}
		}
		else
		{
			$this->set('current_url', Context::getRequestUri());
		}
		$this->set('request_uri', Context::getRequestUri());
	}

분석하기에 앞서... 최종 결과에 대한 디버그 값을 찍어보자~




Context 클래스의 init() 실행 전후를 비교하면 아래와 같습니다. (저도 이렇게 보니 한결 보기 편하네요~^^)


한가지 짚고 넘어가자면 lang 변수에 658개의 프로퍼티가 할당되어 있네요... 이러면 정말...
서버에 부하가 심하지 않나요? --; 특히 저사양에서... 아직 잘 모르지만 그렇습니다. 658개나... 필요한지...
다국어라는 특징때문에 한개의 파일에 번역 파일이 있는건 좋지만... 항상 퍼포먼스도 생각해야 하는지라...
아무튼 잘 모르고 하는 소리니... 그러려니 하십시요^^

생각해 보니... 메모리만 많으면... 연산하는것도 아니라서... 부하 문제는 없겠네요~


결국 Context 클래스의 init() 실행하면, 
Context -> context 값
Context -> db_info 값
Context -> lang 값
각종 로그인 정보, 세션정보, site 정보 등을 찾아서 세팅하는 것을 볼 수 있습니다.


자세히 적으려니... 아직 뼈대를 좀 보고 깊이 파는게 좋을 것 같습니다.

우선, 레이아웃과 스킨관련쪽 로드까지 파헤치고 전체적인 출력 관련을 확인하고... 다시 돌아와야지요~


List of Articles
번호 카테고리 제목 글쓴이 날짜 조회 수
74 기타 CMS 2008년 현존하는 최고의 CMS(컨텐츠 매니져 시스템) 줌라! Joomla! file 종스 2008.08.30 16807
73 UI jQuery UI widgets 종류 찾기 그리고 XE 적용하기 file geusgod 2011.12.17 13414
72 XE CSS LESS 라는 단어를 아는가? geusgod 2011.12.17 8167
71 XE 잡담 php 5.3 대응하기 1 geusgod 2012.12.26 6619
70 XE 팁 SocialXE Server - Facebook 인증불가시 (에러발생시) file geusgod 2011.12.16 11020
69 XE CSS XE /common/css/xe.css 파일 분석 및 활용 geusgod 2011.12.06 9997
68 XE 잡담 XE 1.2.5 버전 PHP 5.3.0 미지원 합니다. ㅠ.ㅠ file 종스 2009.09.04 17772
67 XE 팁 XE 1.2.5버전 날짜입력 부분 jQuery UI 버그 종스 2009.09.21 18724
66 XE 잡담 XE 1.5.x 말도 많고, 탈도 많고... ... 1 종스 2011.11.24 6931
65 XE 팁 xe 1.6.0 업그레이드를 위한 준비 geusgod 2012.06.28 8591
64 XE 잡담 XE 2009.09.22 SVN 최신 리비전 리스트 1 종스 2009.09.22 31275
63 XE 팁 XE Action Forward 와 Module Trigger 정리하기 종스 2011.11.01 11183
62 XE 팁 XE CKEditor 옵션 설정 (i 태그 유지하기) geusgod 2015.06.09 117018
61 XE 에러해결(FAQ) XE firefox 디버그 모드에서 x.js 의 DEPRECATED 표시 관련 geusgod 2012.05.24 5466
60 XE PHP XE index.php 파일 부터 관련된 부분을 분석합시다.(1) geusgod 2013.11.18 5731
59 XE PHP XE index.php 파일 부터 관련된 부분을 분석합시다.(2) geusgod 2013.11.18 4915
» XE PHP XE index.php 파일 부터 관련된 부분을 분석합시다.(3) geusgod 2013.11.18 4820
57 XE 에러해결(FAQ) XE jQuery 단축함수 $ 미작동 되는 이유 geusgod 2009.10.26 21862
56 XE DB XE MSSQL 2005에 설치하기 2 종스 2009.11.19 34957
55 XE 잡담 XE rewrite module 관련 에러 문제... 1 file 종스 2008.11.08 22986
Board Pagination Prev 1 2 3 4 Next
/ 4