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