>  기사  >  php教程  >  discuz 3.x 코어 파일 class_core.php 분석

discuz 3.x 코어 파일 class_core.php 분석

WBOY
WBOY원래의
2016-08-25 10:20:461333검색

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>
이 방법에 대한 간략한 설명: ./source/class/ 폴더에 있는 클래스 파일을 참조하세요. 메소드 매개변수는 클래스 이름입니다. 클래스 이름에 밑줄이 있는 경우 접두사는 하위 폴더 이름이고 접미사는 폴더 이름_클래스 이름입니다. ./source/class/subfolder/subfolder name_class 예: $class = "discuz_base", 참조된 클래스 파일은 다음과 같습니다. ./source/class/discuz/discuz_base.php 참조된 모든 파일 이름은 core::imports 배열 내에 저장됩니다. .

33행:C::createapp() 정적 메서드를 실행합니다.

C::creatapp();
이 방법은 가장 중요한 포럼 초기화 방법입니다. 이 방법은 discuz_application 클래스 객체를 생성하고 단일 팩토리 모드를 사용합니다. discuz_application 클래스는 ./source/class/discuz/discuz_application.php

에 있습니다.

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을 설정합니다. ] . 웹페이지 헤더의 문자 인코딩을 출력합니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.