dedecms代碼研究(2)

 

dedecms代碼研究(2)從index開始

現在繼續,今天講的主要是dedecms的入口代碼。

 

先打開index.php看看裏面是什麼吧。打開根目錄下的index.php嗯,映入眼簾的是一個if語句。

檢查/data/common.inc.php是否存在。如果不存在就跳轉到安裝界面。

 

我們來到/data/看看這個目錄和common.inc.php。

打開/data/,裏面很多目錄和文件,有上傳的臨時目錄,模板緩存,壓縮的臨時目錄,各種數據庫裏保存的系統配置信息的緩存文件以及其他的一些東西,就一個字亂~

好吧,我們打開common.inc.php。哦,原來就是保存了數據庫連接的相關變量而已。說白了,就是dedecms的數據庫連接配置文件,估計是安裝完系統生成的。所以/index.php會檢查它是否存在。

 

我們回到/index.php中繼續往下看,第二個if語句,判斷GET請求“upcache”是否存在,存在就更新首頁緩存,不存在就直接301跳轉到index.html,也就是dedecms的靜態首頁(記住,dedecms的前臺頁面都是系統生成的靜態頁面)。

 

想想接下來我們要研究什麼?對,就是GET請求“upcache”存在的時候,更新首頁緩存這小段代碼啦。代碼如下:

require_once (dirname(__FILE__) . "/include/common.inc.php");

require_once DEDEINC."/arc.partview.class.php";

$GLOBALS['_arclistEnv'] = 'index';

$row = $dsql->GetOne("Select * From `#@__homepageset`");

$row['templet'] = MfTemplet($row['templet']);

$pv = new PartView();

$pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']);

$pv->SaveToHtml(dirname(__FILE__).'/index.html');

include(dirname(__FILE__).'/index.html');

exit();

 

先是加載/include/common.inc.php,估計是一些常用函數和加載其他系統函數和類的文件。

接下來又加載了DEDEINC."/arc.partview.class.php",注意DEDEINC這個常量,我們知道經過前期對dedecms目錄結構觀察,arc.partview.class.php是在/include目錄下的,而加載/include/common.inc.php卻沒有用DEDEINC這個常量,這說明,common.inc.php裏面定義了DEDEINC這個常量,所以後面得以使用,也印證了common.inc.php大體作用就是系統運行基本部分,都在這裏面啦。我們不急着進common.inc.php,繼續把index.php的更新緩存代碼看完。

第三句,設置了一個全局變量:$GLOBALS['_arclistEnv'] = 'index';

第四行,獲取一個表'#@__homepageset'的所有記錄,當然如果你看下數據庫,裏面沒有“#@__homepageset”這個表,我們判斷,是數據庫操作相關函數把表名用表名前綴替換了一下前半部分,這個都不重要了,重要的是,通過這句,獲取了首頁的相關配置信息,我們打開數據庫裏面的dede_homepageset表,暈,就一條記錄,倆字段,基本猜到了,一個是首頁模板名稱,一個是生成的靜態文件的位置。

回來繼續分析前面的代碼

$row['templet'] = MfTemplet($row['templet']);

通過MfTemplet函數好像把$row['templet']進行了某些轉換。我們記下MfTemplet函數,以待後面挖掘。

接下來,就是new了一個PartView類,看這個名字,我們就知道了前面加載arc.partview.class.php的作用啦。

至於這個PartView類有什麼作用,我們繼續看代碼。看了下面兩行,我想大家應該都明白啦

$pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']);

$pv->SaveToHtml(dirname(__FILE__).'/index.html');

創建個視圖對象(PartView類的實例,我們姑且叫視圖對象),設置模板,通過SaveToHtml方法,把最後生成的頁面寫到指定位置。

首頁生成完畢,接下來就是把生成的靜態文件通過include的形式顯示出來,然後exit中斷頁面解析。

 

至此,/index.php就分析完啦。

它先是通過/data/common.inc.php,判斷是否安裝了dedecms或者說判斷是否定義了數據庫配置信息,好爲後面操作打下基礎。

然後判斷是否有GET請求"upcache",如果有就加載/include/common.inc.php初始化系統,然後調用partview類的相關方法來生成靜態首頁文件,最後顯示出來。

 

這麼來看dedecms也沒有太多的祕密嘛~

 

不過呢,我們這篇文章也遺留下了幾個問題:

1)加載了/include/common.inc.php,裏面做了哪些工作?

2)/include/arc.partview.class.php到底是幹什麼的,/include/下還有很多arc開頭的文件都是幹什麼的?

3)MfTemplet這個函數到底對模板文件路徑這個字符串做了什麼操作?

4)partview類的相關方法都有什麼祕密?

 

帶着這幾個疑問,我們將結束本文,後面的文章將將這些謎題一一揭開。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章