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>
line 33:執行C::createapp()靜態方法.
C::creatapp();
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']。 將字元編碼輸出於網頁頭部。

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

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

Dreamweaver Mac版
視覺化網頁開發工具