5. 부트 시퀀스 (index.php, 모든 요청의 단일 진입점)
| 단계 | 내용 |
|---|---|
| 0 | ob_start, // 포함 URL이면 정규화 후 301, PHP 5.6 미만이면 중단 |
| 상수 | DX_CMS, DX_ROOT(역슬래시→슬래시), DX_VERSION, DX_CORE, DX_DATA, DX_THEMES, DX_PLUGINS, DX_PAGES, DX_BOARDS, DX_EXTEND, DX_START |
| 미설치 | data/config.php 없으면 /install/ 로 이동 |
| HTTPS 판별 | HTTPS, SERVER_PORT=443, X-Forwarded-Proto, X-Forwarded-SSL, CF-Visitor 중 하나 |
| 보안경로 선취 | config.php 텍스트에서 정규식으로 DX_SECURITY_PATH(16자 hex)만 먼저 추출 |
| STEP 1 | functions.php, DxCache → Secure.php(고유 경로, 없으면 core/Secure.php 폴백) → 나머지 코어 클래스 require |
| STEP 2 | Secure::initSession → 세션 시작 → 보안 헤더 → CSRF 토큰 발급 |
| STEP 3 | config.php require (DB 연결·설정 로드), DxDebugBar |
| STEP 3-B | secret_key 주입 (initSecretKeys) |
| STEP 4 | HookManager, PluginRegistry, load_plugins(), Secure::initSecurity()(IP밴·WAF·봇), DxSite(멀티사이트, 미등록 도메인은 기본 도메인으로 301), DxTheme, Auth, DxContainer, DxExtend::ensureDirs, 훅 등록, extend/top/* 실행 |
| STEP 5 | routes/*.php 로드 → DxRouter::dispatch() → 매칭 없으면 Router/Dispatcher 파일 기반 라우팅 → extend/bottom/* → ob_end_flush |
세션 최적화: 쿠키 없는 비로그인 GET은 세션을 시작하지 않는다. 단, URL에 /admin /auth /view/ /api/ /write /edit /reply 가 있으면 시작한다.
dx_load.php: 플러그인·독립 스크립트가 require_once 하는 부트스트랩. DX_DIRECT=true를 정의하고 SCRIPT_NAME을 교정하며, 세션을 항상 시작한다. DxSite::enforceRegisteredDomain()과 Secure::initSecurity()는 호출하지 않는다 (index.php와의 차이).