XE index.php 파일 분석 : 주석을 제거하면 아래와 같습니다.
define('__NURI__', TRUE); define('__XE__', TRUE); require dirname(__FILE__) . '/config/config.inc.php'; $oContext = &Context::getInstance(); $oContext->init(); if($oContext->checkSSO()) { $oModuleHandler = new ModuleHandler(); try { if($oModuleHandler->init()) { $oModule = &$oModuleHandler->procModule(); $oModuleHandler->displayContent($oModule); } }catch(Exception $e) { htmlHeader(); echo Context::getLang($e->getMessage()); htmlFooter(); } } $oContext->close();
define('__NURI__', TRUE);
define('__XE__', TRUE);
php에서 define() 함수는 상수를 정의합니다. (변수 = 변하는 수, 상수 = 변하지 않는 수)
require dirname(__FILE__) . '/config/config.inc.php';
config 폴더 config.inc.php 파일을 불러옵니다. config.inc.php 파일은 다음과 같습니다.
if(version_compare(PHP_VERSION, '5.4.0', '<')) { @error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED); }else { @error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED ^ E_STRICT); } if(!defined('__XE__')) { exit(); }
php버전에 따른 에러출력 모드를 결정합니다. (아마 php 상위 버전에서 E_STRICT를 제외 하는 걸로 봐서 대량의 경고 문구가 뿜어져 나오나 봅니다~
define('__ZBXE__', __XE__); define('__NURI_VERSION__', '0.1.0.Acetaminophen'); define('__XE_VERSION__', '1.7.4.b1.NURI'); define('__ZBXE_VERSION__', __XE_VERSION__); define('_XE_PATH_', str_replace('config/config.inc.php', '', str_replace('\\', '/', __FILE__))); ini_set('session.use_only_cookies', 0); if(file_exists(_XE_PATH_ . 'config/package.inc.php')) { require _XE_PATH_ . 'config/package.inc.php'; }else { define('_XE_PACKAGE_', 'XE'); define('_XE_LOCATION_', 'en'); define('_NURI_LOCATION_SITE_', 'https://www.nuricms.org/'); define('_XE_LOCATION_SITE_', 'http://www.xpressengine.org/'); define('_XE_DOWNLOAD_SERVER_', 'http://en.download.xpressengine.org/'); } if(file_exists(_XE_PATH_ . 'config/config.user.inc.php')) { require _XE_PATH_ . 'config/config.user.inc.php'; } if(!defined('__DEBUG__')) ... ... 디버그 관련 중간 생략 ... ... if(!defined('__PROXY_SERVER__')) if((__DEBUG_OUTPUT__ == 2) && version_compare(PHP_VERSION, '6.0.0') === -1) { require _XE_PATH_ . 'libs/FirePHPCore/FirePHP.class.php'; } if(version_compare(PHP_VERSION, '5.3.0') >= 0) { date_default_timezone_set(@date_default_timezone_get()); }
대부분 difine() 함수로 상수를 정의하고 있습니다.
중간에 php 옵션을 설정하는 session.use_only_cookies 라는 부분은 찾아보니...
session.use_only_cookies는 모듈이 클라이언트측에 세션 id를 저장하기 위하여 쿠키만 사용할 지 여부를 지정합니다. 이 설정을 활성화하면 URL로 전달되는 세션 id에 관련한 공격을 방지할 수 있습니다. 이 설정은 PHP 4.3.0에서 추가되었습니다. PHP 6.0부터 기본값은 1(활성화)입니다.
라고 되어 있습니다. 0으로 비활성화 하는걸로 봐서는 클라이언트측에 세션 id를 저장하기 위하여 쿠키만 사용하는게 아니라... 서버측에서 별도로 id를 저장하는것 같습니다. (6.0부터는 기본값 1이니, 관련 설정에 대해서 주시해야 겠군요~)
그 다음은 디버그에 대한 설정이고, 디버그 종류 및 php 버전에 따라 firephp class도 불러옵니다.
그리고 php 버전에 따라 timezone 설정도 하고 있습니다.
여기까지는 그냥 무난한것 같습니다.
다음은 XE classes폴더에 파일들을 로드하고 있습니다.
if(!defined('__XE_LOADED_CLASS__')) { require(_XE_PATH_ . 'config/func.inc.php'); if(__DEBUG__) define('__StartTime__', getMicroTime()); if(__DEBUG__) define('__ClassLoadStartTime__', getMicroTime()); require(_XE_PATH_ . 'classes/object/Object.class.php'); require(_XE_PATH_ . 'classes/extravar/Extravar.class.php'); require(_XE_PATH_ . 'classes/handler/Handler.class.php'); require(_XE_PATH_ . 'classes/xml/XmlParser.class.php'); require(_XE_PATH_ . 'classes/xml/XmlGenerator.class.php'); require(_XE_PATH_ . 'classes/xml/XmlJsFilter.class.php'); require(_XE_PATH_ . 'classes/xml/XmlLangParser.class.php'); require(_XE_PATH_ . 'classes/cache/CacheHandler.class.php'); require(_XE_PATH_ . 'classes/context/Context.class.php'); require(_XE_PATH_ . 'classes/db/DB.class.php'); require(_XE_PATH_ . 'classes/file/FileHandler.class.php'); require(_XE_PATH_ . 'classes/widget/WidgetHandler.class.php'); require(_XE_PATH_ . 'classes/editor/EditorHandler.class.php'); require(_XE_PATH_ . 'classes/module/ModuleObject.class.php'); require(_XE_PATH_ . 'classes/module/ModuleHandler.class.php'); require(_XE_PATH_ . 'classes/display/DisplayHandler.class.php'); require(_XE_PATH_ . 'classes/template/TemplateHandler.class.php'); require(_XE_PATH_ . 'classes/mail/Mail.class.php'); require(_XE_PATH_ . 'classes/page/PageHandler.class.php'); require(_XE_PATH_ . 'classes/mobile/Mobile.class.php'); require(_XE_PATH_ . 'classes/validator/Validator.class.php'); require(_XE_PATH_ . 'classes/frontendfile/FrontEndFileHandler.class.php'); require(_XE_PATH_ . 'classes/security/Security.class.php'); if(__DEBUG__) $GLOBALS['__elapsed_class_load__'] = getMicroTime() - __ClassLoadStartTime__; }
index.php 파일의 코딩부분... 딱! 3줄에 대한 설명은
기본적인 상수들을 정의하고 관련 클래스를 불러오고 있습니다.