Skip to main content
조회 수 5123 추천 수 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 XE 에러해결(FAQ) XE 위젯(Widget) 페이지 수정 권한 오류 (msg_is_not_administrator 메세지 출력) geusgod 2015.06.22 1020
73 XE 에러해결(FAQ) XE XML 쿼리 ORDER BY 대문자 사용하면 안됩니다. geusgod 2015.06.10 725
72 XE 팁 XE CKEditor 옵션 설정 (i 태그 유지하기) geusgod 2015.06.09 217812
71 XE 팁 XE 비밀번호 찾기 질문/답변 필수 제거하기 geusgod 2014.07.11 2589
70 XE 에러해결(FAQ) XE SSL 선택적으로 사용시 act에 따른 링크 적용이 잘 안될때... geusgod 2014.06.05 6237
69 XE PHP [기초튼튼] PHP is_a 의미, 삼항연산자 1 geusgod 2013.11.18 3677
» XE PHP XE index.php 파일 부터 관련된 부분을 분석합시다.(3) geusgod 2013.11.18 5123
67 XE PHP XE index.php 파일 부터 관련된 부분을 분석합시다.(2) geusgod 2013.11.18 5189
66 XE PHP XE index.php 파일 부터 관련된 부분을 분석합시다.(1) geusgod 2013.11.18 6023
65 XE PHP [기초튼튼] PHP -> 의미 geusgod 2013.11.15 3589
64 XE PHP [기초튼튼] PHP & 의미, @ 의미, :: 의미, : 의미 3 geusgod 2013.11.15 13108
63 XE 팁 XE 외부페이지 이미지 리사이즈 애드온 적용하는 방법 geusgod 2013.11.07 4825
62 XE 팁 XE 구글 analytics 코드 어디에 넣어야 효율적인가? geusgod 2013.07.29 5230
61 XE 팁 XE 외부페이지 javascript 주석 처리시 주의점 geusgod 2013.03.18 5636
60 XE 잡담 php 5.3 대응하기 1 geusgod 2012.12.26 6672
59 XE 팁 XE 외부링크 이미지 썸네일 생성 문제 1 geusgod 2012.06.29 10882
58 XE 팁 xe 1.6.0 업그레이드를 위한 준비 geusgod 2012.06.28 8614
57 XE 팁 xe 외부페이지 mid 중복일때 다음페이지로 넘기는 방법 geusgod 2012.05.27 6719
56 XE 에러해결(FAQ) XE firefox 디버그 모드에서 x.js 의 DEPRECATED 표시 관련 geusgod 2012.05.24 5479
55 XE DB XML 쿼리 sort 정렬 두개 처리하는 방법 geusgod 2012.05.22 6529
Board Pagination Prev 1 2 3 4 Next
/ 4