php教程 php手册 discuz 3.x 코어 파일 class_core.php 분석

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

Aug 25, 2016 am 10:20 AM

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으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)