搜尋
首頁php教程php手册discuz 3.x 核心檔class_core.php解析

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           

 

line 17: 設定自訂異常處理功能處理方法位於:core::handleException靜態方法。

 

line 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/子資料夾/子資料夾名稱_類別範例:$class = "discuz_base",則引用類別檔案為: ./source/class/discuz/discuz_base.php 所有引用過的檔案名稱都儲存在core::imports數組內。

 

line 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()靜態方法new一個實例,建構子初始化了論壇環境。 (詳情請看discuz_application.php解析)。

另外,該檔案結尾用簡寫重新定義了類別名稱: line 208-209: C重定義core類別名稱;DB重定義discuz_database類別名稱。

 

discuz_application.php解析:

line 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():

初始化環境變數 line 87-93:常數定義 MAGIC_QUOTES_GPC:true(5.4版以上為false) ICONV_ENABLE:true MB_ENABLE:true EXT_OBGZIP:true TIMESTAMP:當前時間截 並設當前時區為格林尼治時區為格林尼治時區

line 94: 引用核心函式庫:./cource/function/function_core.php。 引用成功並定義常數:DISCUZ_CORE_FUNCTION:true

line 99-104:設定ini:memory_limit:128M line 106:偵測爬蟲:IS_ROBOT:false

line 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() 初始化環境:

line 289: 引用./conifg/config_global.php設定參數檔

line 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: 偵測設定參數是否有debug設定參數,若沒有則 定義常數DISCUZ_DEBUG:false,否則設為true。

line 316-317:常數定義:STATICURL:static/,則存入var屬性。

line 319-320: 將所有$_config數組參數,存入:$this->config和$this->var['config']。

line 322: $_config['cookie']['cookiepath']參數值前加/斜線。

line 325: 重新定義$this->var['config']['cookie']['cookiepre']值。

(3)$this->_init_input()初始化輸入

line 236-240: 如果魔術引號功能開啟,則移除$_GET,$_POST,$_COOKIE反斜線;

line 243-246: 根據$this->config['cookie']['cookiepre']值,將帶有此前綴的cookie都存入$this->var['cookie'],key不帶前綴。

line 251-253: POST值合併入GET內;GET值存入$this->var['gp_'.鍵名]中。

line 255-257:$_GET['page']url編碼。

line 259-261: 處理掉無效的$_GET['handlekey'],該值只能含有字母數字和底線。

line 264-268: 將$_GET值存入$this->var['gp_'.鍵名]中,所有值做addslashes引用(即引號和作引用)

line 270-273: 初始化$_GET['mod'],存入$this->var['mod'],mod參數為執行的模組名稱;初始化$_GET['inajax'],存入$ this->var['inajax'],該值判斷請求是否ajax請求; 初始化$_GET['page'],存入$this->var['page'];初始化$this->var['cookie' ]['sid'],存入$this->var['sid'],一般情況為空值。

line 275-278: 如果$this->var['cookie']['saltkey']不存在,則產生該值,並存入cookie,有效期1個月。

line 279: 根據$this->var['cookie']['saltkey']和$this->var['config']['security']['authkey'],產生$this->var ['authkey']值。

(4)$this->_init_output() 初始化輸出:

line 337-342:判斷網頁是否啟用gzip壓縮,設定$this->config['output']['gzip']布林值;並決定設定$_G['gzipcompress']的布林值。

line 344-346: 開啟輸出快取。

line 348-353: 設定$_G['charset']和常數CHARSET的字元編碼值,取值為$this->config['output']['charset']。 將字元編碼輸出於網頁頭部。

 

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具