이제부터 XE가 어떻게 동작하고 그 구조는 어떻게 되어있는 지 살펴볼텐데요..
다시말하지만, 앞써 "[기본] XE 개발 준비하기"에서 말한 기본지식이 있어야 이해할 수 있습니다..
1. 모든요청은 index.php에게...
XE는 index.php라는 단 한개의 파일에서 모든역할을 수행합니다.
예를 들어 비교하자면 "그누보드"란 게시판 프로그램은
login.php파일에서 로그인수행,
admin.php파일에서 관리자 접속 수행,
download.php파일에서 첨부파일 다운로드 수행.....등등
이렇게 여러파일에서 각기능을 수행하는 것이 일반적입니다.
하지만, XE는 index.php파일이 로그인도 수행하고, 관리자 접속 수행,다운로드 수행,글쓰기 수행..... 등 모든것을 수행하게 되어있습니다.
"그럼 index.php파일만 있으면 되겠네요.. 다른 폴더및 파일은 필요없지않나요??"
index.php파일에서 모든 기능을 수행한다고 해서 index.php이외에 XE구성파일이 필요없는 것은 아닙니다.
왜냐면 index.php에서 다른 XE구성파일을 읽어드리기때문이지요.. 결론은 index.php만 있으면 기능을 절대 수행하지못합니다.
2. index.php 파헤치기
이제 index.php파일을 살펴보겠습니다.
/** * @brief Declare constants for generic use and for checking to avoid a direct call from the Web **/ define('__XE__', TRUE); /** * @brief Include the necessary configuration files **/ require dirname(__FILE__) . '/config/config.inc.php'; /** * @brief Initialize by creating Context object * Set all Request Argument/Environment variables **/ $oContext = &Context::getInstance(); $oContext->init(); /** * @brief If default_url is set and it is different from the current url, attempt to redirect for SSO authentication and then process the module **/ 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();
일단, XE가 실행된 것을 확인할 수 있도록 define('__XE__', TRUE); 고정변수를 선언합니다.
그리고 XE구성파일들을 불려올 수 있는 config.inc.php파일을 불려옵니다. (require dirname(__FILE__) . '/config/config.inc.php';)
이때 config.inc.php파일에서는 XE의 각종설정들을 고정변수로 정의하고, classes폴더에 있는 XE 클래스 파일들을 읽습니다.
그 다음 $oContext = &Context::getInstance();로 Context 객체를 생성합니다.
$oContext->init();로 XE실행을 위한 초기화를 실행합니다.
그리고 $oModuleHandler = new ModuleHandler(); 객체를 생성해 모듈을 실행하는 것을 볼 수 있습니다.
$oModuleHandler->displayContent($oModule);로 실행한 모듈을 출력해주는 것입니다.
허허.. 생각보다 index.php파일은 구조가 단순하죠..
하지만 이것은 XE구조의 첫걸음 일뿐 가면 갈 수록 좀더 복잡해지지요..(어렵다는 말은 아니니, 염려마세요..)
아참, 마지막 $oContext->close()으로 DB연결및 세션을 종료합니다..