亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > CMS > PhpCMS > 正文

PHPCMS源碼分析總結

2024-09-10 07:15:19
字體:
來源:轉載
供稿:網友

一、背景

因為學習PHP的需要,對PHPCMS的源碼進行了全面的分析。因為以前曾經用ASP做過一套內容管理系統,對模板引擎這一塊有比較深入的了解,所以著重分析了模板這一部分。這里主要是針對思想的總結,而不是對代碼的講解。這里是針對PHPCMS2008版本進行分析。

二、目的

1. 深入學習PHP語言,熟悉PHP常用的函數的應用。熟悉和了解面向對象的開發。

2. 了解一個系統的整體框架,學習其中的優點。

3. 分析系統的模板引擎,和曾經做過的內容管理系統做對比,總結兩者的優缺點。

4. 分析系統的緩存機制,因為以前很少接觸這方面,有必要系統的學習和深入了解,對今后的系統優化作準備。

5. 學習權限體系,權限體系是整個框架的重要組成部分,可以吸取別人的長處。

三、整體框架

1. 主要目錄

Include:包含目錄,整個網站的公用函數、包含文件等都放在這里,十分重要

Languages:語言目錄,所有的語言包都放在這里,一個子目錄就是一個語言包

Data:緩存目錄,里面對緩存文件進行了分類

Data/Cache:文本緩存目錄,對數據庫的數據進行了文本緩存,會經常用到

Data/Cache_template:模板目標文件目錄,存放模板源文件編譯的目標php文件

Data/Cache_page:靜態緩存目錄,動態文件的靜態緩存頁面

Data/datasource:數據庫表和字段的說明文件

Templates:模板源文件目錄,存放模板和標簽的源文件

Admin:后臺目錄,存放后臺相關的文件

/Admin/template:后臺模板目錄

Uploadfile:上傳目錄,存放上傳的所有圖片和文件

2. 主要文件

/admin.php:后臺的入口頁面

/index.php:首頁的入口頁面

/list.php:欄目頁的入口頁面

/show.php:最終頁的入口頁面

/include/cache.func.php:文本緩存的相關函數

/include/common.inc.php:動態頁面的主包含文件,負責頁面輸出的主要工作,極為重要

/include/config.inc.php:配置文件,定義全局性的常量

/include/date.class.php:日期類

/include/db_mysql.class.php:連接mysql數據庫的數據類

/include/dir.func.php:目錄類,在生成靜態頁、創建緩存的時候會經常用到

/include/form.class.php:界面類,封裝了一些生成界面的公共函數

/include/global.func.php:公用函數庫,十分重要

/include/priv_group.class.php:會員組的權限類

/include/priv_role.class.php:角色的權限類

/include/template.func.php:模板相關函數庫,在模板編譯的時候需要用到

/include/upload.class.php:上傳類,上傳文件或者圖片需要用到

3. 頁面的輸出過程

第一,通過/admin.php的入口頁面,根據不同的參數,包含不同的頁面

第二,后臺的整體框架分為兩部分,一部分是上邊的頭和菜單以及左邊的菜單,另一部分是右邊的操作區。通過jquery的load方法,只在操作區上加載各個頁面的模板,實現局部刷新頁面的效果,看樣子像是框架,實際上是AJAX。

第三,輸出頁面的準備工作是由/include/common.inc.php來完成的,而真正的輸出頁面的工作,是由template函數取出包含頁面就可以了,比較簡單。

第四,這里主要介紹common.inc.php這個文件

首先,定義各個常數

其次,包含所有需要的文件,有包含文件、函數庫和類文件,還有語言包

然后,判斷是否開啟了頁面緩存,如果開啟了,就輸出緩存頁面,具體的緩存機制稍后做詳細分析

接著,用ob函數開辟一個緩存區,準備把輸出的頁面放入到緩存區,這里還判斷了是否需要壓縮頁面。壓縮頁面的好處就是可以減少頁面體積,提高瀏覽速度,但付出的代價就是服務器的性能。

開啟數據庫連接

判斷是否開啟了魔法函數,如果沒有開啟,需要用addslashes函數對GET、POST和Cookie進行非法字符的過濾,在用extract展開為變量,還需要對URL進行非法字符的判斷,這些都是安全方面的考慮.

如果開啟了自動更新文本緩存,需要包含cache.func.php文件,然后更新緩存,這個選項最好是不要開啟,否則會影響速度,獲取文本緩存的內容,并展開為變量,然后unset文本緩存

如果是前臺,需要判斷刷新最小間隔時間,主要就是這么多步驟,這是訪問所有php文件之前都必須做的準備工作,因為考慮得比較細,所以才會這么復雜。

4. 前臺頁面和后臺頁面輸出過程的區別

后臺頁面輸出明顯比前臺頁面要復雜得多,主要是需要包含的頁面和定義的常量要多很多,而且后臺頁面還需要判斷角色的權限以及是否登錄。

前臺頁面需要設置seo相關項目,內容頁是寫死的,其他頁面都是通過后臺的欄目設置,然后從文本緩存中讀取出來的,而后臺不用設置seo選項。

5. 關于數組的應用

在系統中大量運用了數組,特別是多維數組,首先,很多文本緩存都是用數組形式表現的,其次,很多字段也都是保存為數組的,再次,數組的運用非常廣泛,比如查詢出來的記錄集,也被轉成了數組,返回給頁面,頁面處理的就是數組,和數據庫沒有任何關系。

6. 面向對象的運用

封裝了多個對象,這個是應該好好學習的,但是對數據類的封裝比較簡單,應該更加通用和抽象一點,比如把保存數據封裝成一個方法,其他所有操作都調用這個方法,數據通過多維數組來傳遞。

四、模板引擎

1. 系統常量:系統自定義的常量,一般都是數組取文本緩存或者變量取Cookie

2. 標簽:這里的標簽實際上就是設置get函數的各個參數,包括獲取數據的sql語句,對應的查詢條件和自定義參數等,模板引擎的精華就在于此。get函數在編譯成php文件的時候,會自動轉換為tag函數

3. 模板:分為普通模板和標簽模板,在標題上加以區分

4. 頁面:該系統沒有集中對頁面進行管理,對頁面沒有一個明顯清晰的概念。所有的模板都對應一個html頁面,是模板源文件,然后再編譯成php文件。

5. 頁面的對應關系:是通過模型來對應頁面的,模型就相當于一個模塊,每個模塊的前臺頁面模板不相同,比如新聞和產品。每個模型都有三種頁面,欄目頁、列表頁和內容頁。而欄目和模型是綁定的,這樣每個欄目都有對應的模板。

6. 模板和標簽的關系:模板是展示格式,標簽是取數據。也就是說模板都是可見的,而標簽都是和動態數據相關的,并沒有明確的格式,只有和模板關聯起來才會輸出內容。

7. 好處

第一,修改和保存模板都是通過文本文件,而不是通過數據庫,可以大大提高速度,而且便于用ftp直接修改模板源文件。另外,還可以對模板文件分類,形成多套模板。

第二,在模板中增加了邏輯語法,使得模板制作更加靈活簡便

第三,通過正則把模板源文件轉換成符合PHP語法的動態頁面,完全避免了字符替換中的復雜邏輯處理,把復雜業務都交給php文件來處理。

第四,引入了風格,可以統一更換css

第五,替換模板采用的是template標記,在編譯的時候,會轉換為include文件,就避免了模板的查找和替換。同時保證了頁面的完整性,取代了框架的概念。

第六,靜態頁的生成,都是通過入口動態頁,把結果頁面通過緩存取出來,再寫入靜態頁面,節省了編譯模板文件的步驟。

第七,動態頁還是靜態頁,是通過各個欄目來設置的,可以根據需要實現部分動態

第八,標簽的設置實現了可視化

第九,樣式表實現了統一設置,是通過文件路徑參數化來實現,文件路徑由皮膚路徑和模塊名組成,模塊是一個比較好的概念,便于有效管理。

第十,因為采用標準的php語法,數據庫中的數據在模版中都是用字段數組的形式表現出來,替代了繁瑣的標簽設置。

8. 壞處

第一, 優化選項沒有集中管理,不利于優化人員的工作。特別是內容頁的優化選項,是寫在動態頁面中的,如果要做調整,必須要更改程序文件,而且不能針對各個模板設置不同的優化選項??梢姡谠O計框架時,根本就沒有考慮內容頁的優化,只是考慮了首頁和各個欄目頁的優化,這可能考慮到了內容頁的優化大多數情況下不受重視。

第二, 對頁面沒有一個清晰的概念,更沒有管理頁面的功能,都是以模板頁面的形式出現。

第三, 模板和標簽的概念混淆,模板調用標簽,標簽又引用模板,這可能會讓人弄不明白。而且模板沒有明確的分類,只是用標題區分了普通模板和標簽模板。

第四, 可以實現頁面預覽效果,但如果有參數的話,需要輸出參數后才能預覽,這就比較麻煩,為什么不能實現參數的自動填充呢。

第五, 從一個頁面要修改相關模板,必須要點擊三次鼠標,一是不直觀不方便,二是速度會比較慢,效率比較低。另外,從一個模板中,無法找到調用或者引用它的頁面情況。

第六, 無法實時生成靜態頁,而且不能統一生成靜態頁,沒有實現一鍵生成,在生成頁面的時候沒有顯示進度條。

第七, 不能實現共享標簽,如果只是查詢參數不同,就必須重新增加一個標簽。不如getinfo函數方便,可以根據具體情況隨意調用。當然getinfo函數不夠直觀,雖然也有可視化界面。

9. 綜述

綜上所述,該系統的模板引擎在架構上來說還是很大氣的,特別是充分利用了PHP語言的特點,把模板文件編譯成PHP頁面,大大簡化了模板引擎。另一方面,由于架構上的限制,只能局限于PHP語法的轉換,而無法在轉換過程中作更多的工作,在提高速度和開發效率的時候,同時降低了維護的效率和易用性。

五、緩存機制

1. 文本緩存:就是把數據庫中的數據,寫到文本上,前提是這些數據是固定不變的或者是不經常更新的。在文本上表現的是數組形式,通過cache_read函數返回include文件,再賦值給數組,實現從文本取數據,省略了讀取數據庫的步驟,大大提高了速度。

2. 靜態緩存:和IE的緩存差不多,都有一個緩存周期,在這個周期之內,可以訪問靜態緩存,不用訪問動態頁面,提高訪問速度。

靜態緩存的生成過程:在訪問php頁面的時候,如果有緩存頁面,并且沒有失效,就輸出靜態緩存,否則,開辟一個緩存區域,把php頁面輸出的內容,寫入到緩存頁面。該頁面的目錄和名稱是把頁面的php文件名稱,包括參數,用md5函數加密后得到的字符串。

判斷緩存文件是否失效,根據時間戳,生成緩存的時間戳寫在緩存頁面的開始,輸出緩存頁面,并不是簡單的載入或者包含,而是把時間戳后面的內容echo出來。

3. 壓縮功能:需要開啟gzip擴展,壓縮功能可以減小頁面的尺寸,提高訪問速度,但對服務器的壓力很大,需要有較好的服務器。

4. 好處

第一, 網絡訪問的瓶頸在數據庫的讀取上,盡量減少對數據庫的讀取工作,是緩存的核心任務

第二, 靜態緩存在大訪問量的時候,速度會有較大的提高,如果訪問量不大,最好關閉靜態緩存。

六、權限體系

1. 權限的分配

首先,必須先設置會員,然后再設置管理員。會員有會員組,管理員有角色。

其次,說明欄目與模塊的區別。欄目是針對前臺,模塊是針對后臺的。欄目的權限分配可以分別針對會員組和角色,模塊的權限分配只針對角色。

然后,會員組和角色的權限表是分開的。在登錄的時候,會判斷是前臺還是后臺,如果是前臺,就取會員組表的權限,如果是后臺,就取角色表的權限。

2. 權限的判斷

首先,根據用戶序號,從文本緩存中取出角色的序號,然后判斷該角色是否有權限操作該模塊,權限的判斷很簡單,并沒有用權限編號來實現。這個跟系統架構有關,因為整個后臺只有一個入口頁面,所以通過傳遞參數的方式,可以實現模塊名稱,也就相當于模塊編號的傳遞,可以實現統一判斷用戶的權限,而不必把權限號寫在頁面中,便于維護。

3. 優點

第一, 實現了權限判斷的集中統一,便于維護

第二, 把前后臺的權限分離開來,即欄目和模塊區分開來,條理比較清晰

第三, 權限設置比較細,有一套完整的審核、編輯權限機制,是和工作流結合起來

4. 缺點

第一, 管理員和會員沒有分離,要想設置管理員,必須設置會員,前后臺還是沒有完全分離。

第二, 設置權限太麻煩,需要針對每個欄目或者模塊進行設置,不知道這是不是和工作流結合有關。如果欄目或者模塊多了,再加上管理員也多,設置起來會十分繁瑣,特別是人員流動頻繁的網站,權限分配的可用性很低。角色和會員組沒有發揮自身的功能,只是簡單的分組,如果加上權限分配功能,對權限進行統一分配,會好很多。

第三, 用戶登錄后,只是一級權限做了屏蔽,但二級和三級權限是全部都顯示出來,對用戶來說是十分不友好的。

5. 綜述

綜上所述,系統的權限體系因為整體框架的限制,存在較大的局限性,較低的可用性,不是做得特別好,有待改進。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲视频免费一区| 国产视频亚洲视频| 久久久久亚洲精品国产| 亚洲美女精品久久| 国产精品爽爽ⅴa在线观看| 97国产精品人人爽人人做| 欧美亚洲成人xxx| 亚洲天堂色网站| 国产精品旅馆在线| 国产欧美在线看| 亚洲成人久久久| 欧美黑人性生活视频| 国内揄拍国内精品| 国产a∨精品一区二区三区不卡| 日本精品在线视频| 久久亚洲电影天堂| 国产精品成人一区二区三区吃奶| 成人a级免费视频| 97在线观看免费高清| 韩国v欧美v日本v亚洲| 2020欧美日韩在线视频| 亚洲一区二区三区久久| 欧美一区深夜视频| 亚洲嫩模很污视频| 另类图片亚洲另类| 亚洲国产精品国自产拍av秋霞| 欧美xxxx做受欧美| 国产精品福利在线| 欧美激情一区二区三区高清视频| 欧美一级淫片丝袜脚交| 亚洲第一区中文99精品| 国产精品极品美女在线观看免费| 亚洲欧美中文日韩在线| 亚洲国产日韩欧美在线图片| 亚洲欧美日韩一区二区在线| 久久精品国亚洲| 尤物yw午夜国产精品视频明星| 中文字幕成人精品久久不卡| 精品少妇v888av| 日本国产一区二区三区| 日韩一区二区三区在线播放| 国产精品国产三级国产aⅴ9色| 中文字幕不卡在线视频极品| 九九精品在线观看| 97色在线观看免费视频| 精品爽片免费看久久| 国产精品丝袜久久久久久高清| 久久成人人人人精品欧| 亚洲第一视频网| 91久热免费在线视频| 欧美理论片在线观看| 97视频在线观看免费高清完整版在线观看| 日韩av片电影专区| 日韩成人av一区| 国产亚洲精品久久久久动| 97国产精品视频人人做人人爱| 日韩av电影在线免费播放| 亚洲视频精品在线| 色yeye香蕉凹凸一区二区av| 亚洲欧洲日韩国产| 欧美激情xxxxx| 91中文字幕在线观看| 亚洲视频在线视频| 国产精品久久久久久av下载红粉| 亚洲欧美日韩久久久久久| 久久男人的天堂| 91av视频在线免费观看| 欧美视频在线观看免费| 亚洲а∨天堂久久精品喷水| 欧美性色xo影院| 亚洲国产精品久久久久秋霞蜜臀| 欧美性69xxxx肥| 亚洲午夜未满十八勿入免费观看全集| 久久精品中文字幕一区| 成人日韩av在线| 日韩第一页在线| 日韩精品视频免费专区在线播放| 欧美大尺度电影在线观看| 亚洲成人黄色在线观看| 日韩女优人人人人射在线视频| 精品国产31久久久久久| 欧美国产日韩一区| 成人免费大片黄在线播放| 亚洲天堂男人天堂女人天堂| 欧美裸身视频免费观看| 456国产精品| 亚洲福利在线看| 成人午夜在线影院| 欧美亚洲国产另类| 黄色一区二区在线| 久久韩剧网电视剧| 97久久精品视频| 久久这里只有精品视频首页| 国产精品视频精品| 国产精品久久久一区| 欧洲s码亚洲m码精品一区| 亚洲欧美999| 51色欧美片视频在线观看| 国产日韩欧美一二三区| 国产精品爽爽ⅴa在线观看| 97视频免费在线看| 日韩成人在线视频网站| 成人午夜两性视频| 久久99久国产精品黄毛片入口| 国产精品亚洲精品| 欧美www视频在线观看| 久久久亚洲国产| 亚洲直播在线一区| 精品久久久久久国产| 亚洲国产91精品在线观看| 精品国产乱码久久久久酒店| 亚洲精品一区二区在线| 国产精品69av| 国产91精品视频在线观看| 国产精品日韩欧美综合| 欧美亚洲日本黄色| 91影院在线免费观看视频| 亚洲美女动态图120秒| 日韩国产一区三区| 国产主播欧美精品| 久久成人亚洲精品| 色综合伊人色综合网站| 91久久中文字幕| 91精品中文在线| 九九久久久久99精品| 欧美劲爆第一页| 国产中文字幕91| 久久综合88中文色鬼| 亚洲一区二区三区乱码aⅴ蜜桃女| 69国产精品成人在线播放| 国产高清视频一区三区| 国产成人jvid在线播放| 国产精品扒开腿做| 欧美日韩加勒比精品一区| 亚洲综合精品伊人久久| 欧美成人午夜激情在线| 在线观看不卡av| 日韩精品视频免费专区在线播放| 色婷婷综合久久久久中文字幕1| 国产精品丝袜久久久久久不卡| 亚洲最新在线视频| 亚洲精品视频免费| 97欧美精品一区二区三区| 日韩免费精品视频| 亚洲影院色在线观看免费| 91精品国产色综合久久不卡98| 欧美网站在线观看| 成人在线播放av| 日韩电影大片中文字幕| 久久久久一本一区二区青青蜜月| 日韩大片免费观看视频播放| 日韩天堂在线视频| 国产精品久久久久国产a级| 国产精品美乳在线观看| 精品日韩视频在线观看| 2019中文字幕在线| 欧美日本啪啪无遮挡网站| 狠狠久久五月精品中文字幕| 色婷婷综合成人| 亚洲天堂av在线免费观看| 日韩av观看网址| 国产精品成人一区二区| 日韩极品精品视频免费观看| 欧美一级淫片videoshd|