class_core.php는 discuz 3.x의 핵심 파일입니다. 거의 모든 PHP 스크립트는 이 파일을 참조하여 포럼 운영 환경을 초기화합니다. 다음 분석은 버전 3.2 discuz를 참조합니다.
line 12-15: 상수 정의
IN_DISCUZ: true //내부 PHP 참조 파일이 직접 호출되는 것을 방지하는 데 사용됩니다.
DISCUZ_ROOT: E:\project\discuz\ //포럼이 위치한 실제 경로
DISCUZ_CORE_DEBUG: false //핵심 코드가 테스트 모드인지 여부
DISCUZ_TABLE_EXTENDABLE: false
17행: 사용자 정의 예외 처리 함수 설정 처리 방법은 core::handleException 정적 방법에 있습니다.
24-30행: 자동 로딩 클래스 함수를 정의합니다. 이 메서드는 core::autoload($class) 에 있습니다.
<span style="color: #0000ff;">if</span>(<span style="color: #008080;">function_exists</span>('spl_autoload_register'<span style="color: #000000;">)) { spl_autoload_register(</span><span style="color: #0000ff;">array</span>('core', 'autoload')); <span style="color: #008000;">//</span><span style="color: #008000;">自动加载类函数</span> } <span style="color: #0000ff;">else</span><span style="color: #000000;"> { </span><span style="color: #0000ff;">function</span> __autoload(<span style="color: #800080;">$class</span><span style="color: #000000;">) { </span><span style="color: #0000ff;">return</span> core::autoload(<span style="color: #800080;">$class</span><span style="color: #000000;">); } }</span>
33행:C::createapp() 정적 메서드를 실행합니다.
C::creatapp();
에 있습니다.
C::createapp() 메소드는 discuz_application 클래스 인스턴스를 직접 생성하지 않고, discuz_application::instance() 정적 메소드를 실행하여 간접적으로 생성합니다.discuz_application::instance() 정적 메소드 새 인스턴스, 생성자는 포럼 환경을 초기화합니다. (자세한 내용은 discuz_application.php 분석을 참조하세요).
또한 클래스 이름은 파일 끝 부분에 약어로 재정의됩니다. 208-209행: C는 핵심 클래스 이름을 재정의하고, DB는 discuz_database 클래스 이름을 재정의합니다.
discuz_application.php 분석:
57-62행:생성자는 4가지 방법을 사용하여 포럼 매개변수를 초기화합니다.
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> __construct() { </span><span style="color: #800080;">$this</span>-><span style="color: #000000;">_init_env(); </span><span style="color: #800080;">$this</span>-><span style="color: #000000;">_init_config(); </span><span style="color: #800080;">$this</span>-><span style="color: #000000;">_init_input(); </span><span style="color: #800080;">$this</span>-><span style="color: #000000;">_init_output(); }</span>
(1)$this->_init_env():
환경 변수 라인 87-93 초기화: 상수 정의 MAGIC_QUOTES_GPC:true(버전 5.4 이상에서는 false) ICONV_ENABLE:true MB_ENABLE:true EXT_OBGZIP:true TIMESTAMP: 현재 시간 제한 및 현재 시간대를 그리니치 시간대로 설정
94행: 핵심 함수 라이브러리인 ./cource/function/function_core.php를 참조합니다. 참조가 성공하고 상수가 정의되었습니다. DISCUZ_CORE_FUNCTION: true
99-104행: ini:memory_limit:128M 설정 106행: 크롤러 감지: IS_ROBOT: false
108-112행: 불필요한 전역 변수를 지웁니다.
<span style="color: #0000ff;">foreach</span> (<span style="color: #800080;">$GLOBALS</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$key</span> => <span style="color: #800080;">$value</span><span style="color: #000000;">) { </span><span style="color: #0000ff;">if</span> (!<span style="color: #0000ff;">isset</span>(<span style="color: #800080;">$this</span>->superglobal[<span style="color: #800080;">$key</span><span style="color: #000000;">])) { </span><span style="color: #800080;">$GLOBALS</span>[<span style="color: #800080;">$key</span>] = <span style="color: #0000ff;">null</span>; <span style="color: #0000ff;">unset</span>(<span style="color: #800080;">$GLOBALS</span>[<span style="color: #800080;">$key</span><span style="color: #000000;">]); } }</span>
line 114-203: 전역 변수 정의: $_G, 개체 자체의 var 속성도 이에 대한 참조를 저장합니다.
(2)$this->_init_config() 초기화 환경:
289행: 참조 ./conifg/config_global.php 구성 매개변수 파일
라인 299: $_config['security']['authkey'] 값을 감지하고 설정합니다.
<span style="color: #0000ff;">if</span>(<span style="color: #0000ff;">empty</span>(<span style="color: #800080;">$_config</span>['security']['authkey'<span style="color: #000000;">])) { </span><span style="color: #800080;">$_config</span>['security']['authkey'] = <span style="color: #008080;">md5</span>(<span style="color: #800080;">$_config</span>['cookie']['cookiepre'].<span style="color: #800080;">$_config</span>['db'][1]['dbname'<span style="color: #000000;">]); }</span>
line 303-315: 구성 매개변수에 디버그 구성 매개변수가 있는지 확인하세요. 그렇지 않으면 DISCUZ_DEBUG 상수를 정의하고, 그렇지 않으면 true로 설정하세요.
316-317행: 상수 정의: STATICURL:static/, var 속성에 저장합니다.
319-320행: 모든 $_config 배열 매개변수를 $this->config 및 $this->var['config']에 저장합니다.
322행: $_config['cookie']['cookiepath'] 매개변수 값 앞에 / 슬래시를 추가합니다.
325행: $this->var['config']['cookie']['cookiepre'] 값을 재정의합니다.
(3) $this->_init_input() 초기화 입력
236-240행: 마법 인용 기능이 켜져 있으면 $_GET, $_POST, $_COOKIE 백슬래시를 제거하세요.
243-246행: $this->config['cookie']['cookiepre'] 값에 따라 이 접두사가 있는 모든 쿠키는 $this->var에 저장됩니다. [ '쿠키'], 접두사가 없는 키입니다.
251-253행: POST 값은 GET으로 병합되고 GET 값은 $this->var['gp_'.key name]에 저장됩니다.
라인 255-257: $_GET['page']url 인코딩.
259-261행: 잘못된 $_GET['handlekey']를 처리합니다. 값에는 영숫자와 밑줄만 포함될 수 있습니다.
264~268행: $this->var['gp_'.key name]에 $_GET 값을 저장하고 모든 값은 추가 래시로 인용됩니다(예: 인용 부호 및 따옴표). )
라인 270-273: $_GET['mod']를 초기화하고 $this->var['mod']를 저장합니다. mod 매개변수는 실행할 모듈 이름입니다. [' inajax'], $this->var['inajax']에 저장됨, 이 값은 요청이 $this->var['에 저장된 ajax 요청인지 여부를 결정합니다. page']; 초기화 $this->var['sid']에 저장된 $this->var['cookie']['sid']는 일반적으로 null 값입니다.
라인 275-278: $this->var['cookie']['saltkey']가 존재하지 않으면 값이 생성되어 쿠키에 저장되며 이는 1년 동안 유효합니다. 월.
279행: $this->var['cookie']['saltkey'] 및 $this->var['config']['security']['authkey에 따르면 ' ], $this->var['authkey'] 값을 생성합니다.
(4) $this->_init_output() 초기화 출력:
337-342행: 웹 페이지에서 gzip 압축을 활성화하는지 확인하고 $this->config['output']['gzip'] 부울 값을 설정하고 $_G[를 설정하기로 결정합니다. ' gzipcompress의 부울 값'].
라인 344-346: 출력 캐싱을 활성화합니다.
348-353행: $_G['charset']의 문자 인코딩 값과 $this->config['output']['charset'에서 가져온 상수 CHARSET을 설정합니다. ] . 웹페이지 헤더의 문자 인코딩을 출력합니다.