插件製做的基本思路是:(初學者適用) 1.造成插件思路 2.製做插件界面 3.構架程序模塊 4.搭建存儲數據 5.填充功能語句 6.檢查應用錯誤 7.完善插件功能
前言:爲方便互聯網數萬Discuz!愛好者,更加深刻了解Discuz!軟件,本人在熟悉Discuz!過程當中,順便將我的經驗寫給你們。本貼內容由本人按期更新。本貼只介紹Discuz!中部分技術點,本貼緊屬我的觀點,不足之處,請各位多多指教,在下先此謝過!。「Discuz!」在下文中簡稱「DZ」。要弄DZ二次開發,必須至少具有以下技能: 1) 可以理很好理解MVC構架的原理(雖然DZ不是MVC架構的) 2) 紮實的PHP基礎,熟悉結構化程序,OOP程序的寫法及應用 3) 熟悉MYSQL就用,掌握SQL語言,懂SQL優化者更佳 4) 熟悉使用Discuz!的各項功能
一) Discuz!的文件系統目錄 注:想搞DZ開發,就得弄懂DZ中每一個文件的功能。 a) Admin:後臺管理功能模塊 b) Api:DZ系統與其它系統之間接口程序 c) Archiver:DZ中,用以搜索引擎優化的無圖版 d) Attachments:DZ中 ,用戶上傳附件的存放目錄 e) Customavatars:DZ中,用戶自定義頭像的目錄 f) Forumdata:DZ緩存數據的存放目錄 g) Images:DZ模板中的圖片存放目錄 h) Include:DZ經常使用函數庫,基本功能模塊目錄 i) Ipdata:DZ統計IP來路用的數據 j) Plugins:DZ插件信息的存放目錄 k) Templates:DZ模板文件的存放目錄 l) Wap:DZ無線,Wap程序處理目錄
二) 必須記熟Discuz!數據庫設計的每一個表的功能,每一個表中每一個字段的功能。 關於DZ數據庫設計文檔,請參閱DZ相關的項目文檔(請從本貼附件中下載)
三) Discuz!的流程控制 a) 後臺流程控:DZ後臺全部的功能,均須要註冊到admincp.php文件,每一個功能都至少有一個或一個以上的Action(動做),在admincp.php中,能夠定義Action的執行權限,分別爲:「admin==1」管理員,或「admin==2 || admin==3」超級版主和版主,每一個Action對應一個腳本文件,腳本文件的命名爲action.inc.php(*.inc.php),並存放在admin目錄下,如執行:admincp.php?action=dodo,至關於執行admin目錄下的dodo.inc.php文件 b) 前臺流程控制:前臺的流程控制比較簡單:流程是自由的,如: 首頁:index.php 會員註冊:register.php; 會員登陸:logging.php 發貼程序:post.php 會員信息:member.php 論壇內容:forumdisplay.php 查看貼子:viewthread.php …大部分功能,此處不一一列出… c) DZ根目下的config.inc.php屬於整個DZ系統的配置文件
四) Discuz!的數據處理過程 a) DZ對mysql的數據庫操做處理所有封裝在dbstuff(db_mysql.class.php)類中 b) 所在的外部數據均經過「daddslashes()」初步過濾,而後再過濾,再根據須要處理
五) Discuz!的顯示控制(網站多樣式風格輸出) a) 顯示層就是你們一般所看到的網站風格了。DZ中每套風絡分別在templates及images下對應一個風格文件的存放目錄。網站風格的製做,請參閱詳細的DZ風格製做文檔 b) DZ網站風格文件處理的原理:其實很簡單,DZ使用template.func.php中的parse_template()以PHP正則運算把htm模文件中的模板標籤,轉換成了PHP代碼,並根據styleid保存在forumdata/templates下,這個有點像Smarty中的技術。
六) DZ中的語言處理 a) DZ前臺及後臺中、英語言的實現,均是把語句定義成了語變量,而後在模板輸入,語句變量的賦值,均放在模板目錄中的*.lang.php文件中,DZ在生成網站風格時就加載了這相應的語言包。
七) DZ如何處理用戶信息(存取、計算、更新過程) 新手要作二次開發,都必須掌握這數組中,每一個數組元素的意義。 a) DZ的基本信息,如用戶信息,Session信息存在以下變量中: a). $_DCACHE b). $_COOKIE c). $_DCOOKIE d). $_DSESSION e). $_DPLUGIN b) 能夠經過print_r($GLOBALS),打印所有變量 八) DZ中緩存處理機制 a) DZ中緩存處理過程都放在「cache.func.php」中,DZ的緩存處理比較簡單,其原理是把一個數組轉換成了PHP代碼,並保存在緩存目錄下,你們可打開緩存文件查看便知。 b) 使用方法:若是在新開的功能中,須要緩存某部分數據,基本上就是: 1)定義並註冊緩存名字。 2)從數據讀取相應的數據。 3)數據在寫入緩存前做相應處理。 4)最後寫入緩存。 具體操做,能夠看文件中的代碼,作相應的修改便可 九) DZ中模板處理機制 a) DZ首創的模板處理技術,相似於Smarty中的模板處理,只是具體算法,過程不一樣,Smarty是一種重型模板引擎方案。其原理都是把模板中的變量轉換成相應的PHP代碼,這個過程實際是模訪JAVA中的一次編譯,多處運行。 十) DZ中權限處理機制 a) 對於DZ中前臺的每相action都有$discuz_action定義,DZ根據用戶所在的用戶組來斷定用戶是否具備相應操做$discuz_action的權限。至於後臺的權限權驗證,則更簡單了,依據「admin==1」來肯定的 十一) DZ中如何實現URL靜態化 a) DZ中的靜態有兩法,只要懂ReWrite規劃的朋友,一看就知。 十二) DZ首創的HTML編輯器,如何截取並使用,若是進行Discuz!代和Html代碼的轉換 a) 這也算是DZ比較牛的一項技術了,在早期版中,因DZ編輯器的不足,使得不少用戶放棄了DZ。實現原理:經過JS把用的一些操做轉換成了DZ的bbcode代碼。這樣子提交了安全性,將帶有bbcode代碼的內容存入數據,在用戶打開頁頁時,又把bbcode代碼轉換成html代碼
本貼聲明:因爲時間有限,本貼只有關於DZ部分功能的簡短分析。若各位網友,對本文感興趣並想更爲深刻了解DZ,請在本貼後回貼!我將盡量多的DZ技術分析寫在本文,不斷更新本貼內容。
部分文件說明:
admincp.php 管理 ajax.php ajax功能 announcement.php 公告 attachment 附件 board.php 真正的首頁 config.inc.php 這個是配置文件 corpus.php 論壇文集 digest.php 精華帖子 discuz_version.php 論壇版本號 faq.php 問題列表 forumdisplay.php 論壇列表 index.php 跳轉頁面 loggin.php 認證頁面(登陸退出) mail_config.inc.php 郵件配置 member.php 用戶操做 memcp.php 我的控制面版 misc.php 零碎功能 my.php 個人帖子 plugin.php 插件 pm.php 短信 post.php 發送帖子 redirect.php 頁面重定向 register.php 註冊 robots.txt 限制搜索 rss.php rss信息發佈 search.php 論壇查詢 secode.php 驗證碼 stats.php 統計 topic.php 首頁論壇專題 topicadmin 主題管理 viewpro.php 顯示我的信息 viewthread.php 主題顯示
文件夾 admin 管理 api 接口 archiver 文檔 attachments 附件 customavatars 自定義表情 forumdata 論壇數據包含緩衝數據 images 圖片 include 公共文件 install 安裝包 ipdata ip地址 plugins 插件 readme 幫助文檔 templates 模板 utilities 工具包 wap 手機網站
文件夾include advertisements.inc.php 廣告管理 ajax.js ajax相關 attachment.func.php 附件函數集 bbscode.js 論壇表情 cache.fun.php 緩存函數集 category.inc.php 欄目 chinese.class.php common.inc.php 最主要的頭文件 common.js 最主要的js文件 corpus.func.php 論壇文集函數 counter.inc.php 論壇計數 cron.func.php 計劃任務 db_mysql.class.php 數據庫 db_mysql_error.inc.php 數據庫錯誤 debug.php 調試信息 discuzcode.func.php 論壇代碼 editor.func.php 編輯器 editor.js 編輯器 editpost.inc.php 編輯帖子 floatadv.js 浮動廣告 forum.func.php 論壇函數集 global.func.php 全局函數 menu.js 菜單 misc.func.php 其它 newreply.inc.php 新回覆 newthread.inc.php 新主題 *pmprompt.inc.php post.fun.php 發表主題 printable.inc.php 論壇打印 qihoo.js qihoo relatethreads.inc.php 相關主題 security.inc.php 安全 sendmail.inc.php 郵件 serverbusy.htm 系統繁忙 template.func.php 模板 threadpay.inc.php 購買帖子
爲何文件的命名有inc呢? 文件命名規範
Discuz! 按照以下的規範對程序和模板進行命名,請在設計插件時儘可能遵循此命名規範:
1.能夠直接經過瀏覽器訪問的普通程序文件,以 .php 後綴命名。 2.被普通程序文件引用的程序文件,以 .inc.php 後綴命名。 3.被普通程序文件,或引用程序文件引用的函數庫或類庫,以 .func.php(函數庫) 或 .class.php(類庫) 後綴命名。 4.模板文件,以 .htm 後綴命名,模板文件只存在於 ./templates 目錄中。 5.模板語言包文件,以 .lang.php 後綴命名,語言包文件只存放於 ./templates 目錄中,與模板文件同級目錄。 6.被編譯後的模板文件,以 .tpl.php 後綴命名,前面的數字是模板套系的 ID,下劃線後面的是模板原名,編譯模板文件只存在於 ./forumdata/templates 目錄中。 7.動態緩存文件,存放於 ./forumdata/cache 目錄中,依據不一樣的功用進行獨立的命名。 8.使用後臺數據備份功能生成的備份文件,一般以 .sql 爲後綴,存放於 ./forumdata/ 目錄中。 9.有些目錄中存在內容爲空白的 index.htm 文件,此類文件是爲了不 Web 服務器打開 Directory Index 時可能產生的安全問題。
模塊類型: 插件模塊和自定義菜單: 插件接口默認提供四種可選的模塊方式:
1.直接連接(前臺菜單):可在前臺右上角加入一個菜單項,可自主指派菜單連接的 URL。注意:因爲引用外部程序,所以即使設置了模塊的使用等級,您的程序如需權限判斷,仍須要引用 common.inc.php 和插件相關的緩存文件(將在後面的《參數讀取與緩存控制》中詳細說明),並自行判斷使用等級是否合法;
2.前臺調用(前臺菜單):與直接連接相似,但其調用的是插件的一個模塊,模塊文件名指派爲「./plugins/插件目錄/插件模塊名.inc.php」,由 plugin.php 調用此模塊,調用 URL 將在後面的《編寫插件的原則與注意事項》中詳細說明;
3.後臺調用(後臺菜單):可在後臺插件設置中爲此插件增添一個管理模塊,模塊文件名指派爲「./plugins/插件目錄/插件模塊名.inc.php」,由 admincp.php 調用此模塊,調用 URL 將在後面的《編寫插件的原則與注意事項》中詳細說明;
4.包含運行(無菜單):可設置一個在論壇全部頁面均包含運行的腳本,此腳本在 ./include/common.inc.php 中加載,腳本文件名指派爲「./plugins/插件目錄/插件模塊名.inc.php」。請注意,爲了避免致使錯誤的插件影響論壇運行,在 common.inc.php 加載此模塊時,屏蔽了錯誤信息,所以請務必仔細檢查是否存在語法錯誤,任何微小的語法錯誤都將不被提示出來,而且致使此模塊不被正常加載。若是您配置了不正確的包含腳本而致使論壇系統設置沒法使用,刪除服務器上相應的腳本文件便可解決。
您能夠爲每一個模塊設置不一樣的使用等級,例如設置爲「超級版主」,則超級版主及更高的管理者(例如論壇管理員)可使用此模塊。 看到了應該很簡單前臺文件、後臺文件、調用外部文件、初始化文件!就這四種!那麼通常的插件文件固然是前臺調用
這裏要說明一個調用問題,文中屢次說到./include/common.inc.php是否加載,也就是說加載了這個文件,你就能夠輕鬆的獲得會員名、會員uid、會員的積分信息、論壇的分類、各級會員組用戶組信息,簡單說就是汽車加了汽油你能夠開了,先後臺調用都加載了這個文件;包含運行是把程序寫入這個文件;前臺連接沒有加是須要你另外添加的!
第四章 Discuz!中經常使用文件說明
第一節 經常使用文件說明 DZ程序文件目錄含義整理表 http://www.discuz.net/thread-329948-1-1.html請看以上,感謝做者sw08如下內容版權歸原做者sw08哦最近看見不少人熱衷於功能加強型HACK的修改。這種功能加強型HACK和平時所說的插件不同,插件是單獨的文件,通常在後臺導入便可使用。可是功能加強型HACK更可能是修改程序源代碼來實現本身須要的功能,本人作得最多就是這類。能夠說功能加強型HACK是插件的前身,想作插件就必定要作熟功能加強型HACK。功能加強型HACK挺簡單,由於代碼修改量很少,並且通常以改代碼爲主;說難,由於通常很差找文件,並且一旦對程序結構不熟悉,立刻陷入迷坑。這裏先簡單說下Discuz!的全部文件,目前所表明的含義,方便你們修改時候避免找不到改哪一個文件。這是個基本功,必定要熟練~熟悉了文件的話,隨便作個功能加強型HACK根本就是不費吹灰之力的事情。先說根文件:admincp.php——後臺系統設置程序文件,通常只處理菜單的顯示的訪問權限,不處理管理控制。attachment——附件文件,僅僅處理附件下載的功能。announcement.php——論壇公告的顯示,通常不多改blog.php——瀏覽BLOG文章時候會用的,很是容易理解config.inc.php——配置論壇數據庫、密碼等信息,這個你們最熟悉了digest.php——論壇精華區的信息顯示,不用多說了吧?discuz_version.php——論壇版本信息,用來更新用的,沒有官方說明絕對不要修改faq.php——論壇幫助系統,不過我看絕對沒人用forumdisplay.php——很簡單,論壇主題列表的顯示index.php——控制首頁元素顯示logging.php——登錄系統,判斷用戶名、密碼。mail_config.inc.php——配置論壇EMAIL功能member.php——控制會員列表顯示,積分策略等等信息顯示memcp.php——會員控制面板misc.php——控制評分功能、BLOG、論壇界面顯示功能等等plugin.php——論壇插件,這個主要控制論壇插件的菜單的顯示,通常極少修改pm.php——論壇短信息程序,控制短信息發表與瀏覽post.php——與viewthread.php類似,可是更可能是管理帖子發表、編輯等等信息,也會有權限的控制提示redirect.php——控制顯示論壇的最後發表的主題訪問register.php——註冊文件,同時也會控制註冊的信息的合法性rss.php——RSS快速訂閱,不用多說了吧?search.php——處理論壇搜索功能中的信息篩選seccode.php——論壇註冊,生成驗證碼的程序stats.php——處理統計中的統計信息topic.php——通常沒法直接訪問,控制頁面顯示,顯示主題條數topicadmin.php——控制的是管理人員的前臺管理操做,如精華、置頂、高亮等等viewpro.php——處理瀏覽會員信息的內容顯示viewthread.php——處理瀏覽帖子時候的帖子信息顯示,例如信息、標題等等,同時也處理訪問帖子的權限,如閱讀權限是否足夠等等。接着開始說文件夾裏面的文件了,一個個開始:有人會問,那個空index.htm是幹什麼用的,我能夠回覆,那是防止列目錄查看文件用的,避免安全問題。admin=== (管理後臺的程序文件,所有在這裏,僅能經過admincp.php來訪問)標記紅色的文件最好別動,畢竟主程序被加密,並且也是違背官方受權協議的。 home.inc.php——後臺首頁內容settings.inc.php——Discuz!選項下的全部小分類passport.inc.php——一堆通行證的東西avatarshow.inc.php——天下秀qihoo.inc.php——奇虎搜索forums.inc.php——論壇編輯下面全部子分類members.inc.php——添加用戶、編輯用戶、合併用戶、用戶欄目定製 groups.inc.php——分組與級別下全部子分類announcements.inc.php——只有論壇公告發布的管理styles.inc.php——風格管理templates.inc.php——模板在線編輯moderate.inc.php——一堆審覈,審覈新用戶、審覈新主題、審覈新回覆 recyclebin.inc.php——單獨的回收站程序ecommerce.inc.php——支付寶,不過最好別動misc.inc.php——勳章編輯、在線列表定製、聯盟論壇、計劃任務、Discuz! 代碼、詞語過濾、Smilies 編輯、附件類型尺寸、積分交易記錄,管理得真多,甚至連後臺的退出功能也歸這個文件管。advertisements.inc.php——廣告管理database.inc.php——資料備份、資料恢復、數據庫升級、數據表優化 attachments.inc.php——編輯附件,只有一個counter.inc.php——更新論壇統計threads.inc.php——批量主題管理prune.inc.php——批量刪帖、清理短消息 plugins.inc.php——插件設置、插件管理 logs.inc.php——運行記錄,除了積分交易記錄之外的全部記錄tools.inc.php——管理更新緩存、JS 調用嚮導、文件權限檢查menu.inc.php——後臺左邊那個好長的導航菜單就是了Api目錄的文件是所有被加密過的,沒法修改也不能修改,詳情見官方受權協議。archiver==(特別說明下,由於archiver中的目錄的文件沒有調用commom.inc.php,因此全部變量、函數都不能直接使用,必需要搜索數據庫來進行判斷) index.php archiver首頁 include== thread.inc.php archiver主題顯示 index.inc.php 這個是過濾論壇權限和界面顯示用的 header.inc.php archiver風格控制 forum.inc.php archiver論壇顯示attachments是論壇附件的存放目錄customavatars是論壇頭像的存放目錄forumdata是論壇記錄和緩存文件的存放目錄,通常這些文件都是自動生成的,因此不要修改。至於有什麼用途也說下吧。 cache==(很好用的功能,調用的這裏的文件變量是很是快的) admingroup_X.php 管理組權限 cache_bbcodes.php BBCODE和SMILES cache_blog.php 全部用戶組的權限變量和smilies、bbcode,還有發帖數等級的信息 cache_censor.php 屏蔽信息 cache_crons.php 計劃任務 cache_forumdisplay.php 論壇信息與公告 cache_forums.php 同上 cache_index.php 在線列表、聯盟論壇、公告 cache_ipbanned.php 封IP段記錄 cache_medals.php 勳章信息 cache_post.php smilies、bbcode、icons cache_profilefields.php 暫時不清楚 cache_settings.php setting表設置的參數變量 cache_viewthread.php 論壇,用戶組,smilies、bbcode、icons plugin_XX.php 插件表 style_XX.php 風格緩存 usergroup_XX.php 用戶組緩存 templates==(升成的模板PHP,比較少作插件會用到,忽略)根部的一些LOG文件就是後臺記錄文件了。images是圖片目錄,忽略過~include是論壇核心程序目錄,很是有必要去了解。 crons==(這裏是計劃任務文件,你能夠增長本身的計劃任務,並且能夠調用系統變量) tables==(幾個語言文件,不多改,跳過)serverbusy.htm 系統錯誤信息bbcode.js Discuz!代碼JS效果文件common.js 主要是DZ經常使用的模板函數文件,能夠直接用floatadv.js 廣告用的qihoo.js 奇虎的文件,不改threadpay.inc.php 出售帖template.func.php 控制模板緩存生成的文件sendmail.inc.php 發送EMAIL的程序security.inc.php 好像是代理一類的,無論relatethreads.inc.php 應該說是生成相關主題的程序promotion.inc.php 記錄當前用戶的IP等信息printable.inc.php 打印主題用的程序post.func.php 不錯的函數文件,主要是記錄信息、更新帖子的函數pmprompt.inc.php 短信息內容處理newthread.inc.php 發新話題的信息處理newreply.inc.php 發回復的信息處理misc.func.php 又是函數文件,控制管理PM,評分PM,評分記錄,附件高亮顯示,IP轉換爲地理位置global.func.php 豐富的函數庫,都是前臺用的,如除去HTML、發PM、發EMAIL等等,建議你們研究下。forum.func.php 處理論壇信息用的函數,如論壇菜單下拉等等editpost.inc.php 編輯帖子的信息處理discuzcode.func.php Discuz!代碼轉換處理程序db_mysql_error.inc.php 數據庫錯誤彙報db_mysql.class.php 數據庫中心操做程序cron.func.php 控制計劃任務執行的程序counter.inc.php 記錄操做系統與瀏覽器的統計common.inc.php 最重要的核心程序,讀取COOKIES信息,定義全局系統函數變量chinese.class.php 處理亂碼和字符集用的category.inc.php 控制帖數,今日發帖數的統計cache.func.php 控制生成緩存文件的程序blog.func.php 在BLOG發帖時信息處理會用到attachment.func.php 識別附件拓展名,控制附件前面顯示類別圖片的程序, 還有附件大小的記錄判斷advertisements.inc.php 處理廣告顯示用的ipdata==(IP庫文件目錄,下面那個wry.dat就是IP庫,這個我不會改)plugins==(插件存放目錄)templates==(模板目錄,通常作HACK也要改模板,所以說明下) default==(默認模板,從這個開始,其它風格以此類推)announcement.htm 公告blog.htm BLOG首頁blog_addremove.htm 移除添加BLOGblog_list.htm BLOG列表 blog_topic.htm BLOG中主題顯示credits.htm 積分策略css.htm 作風格用的,不過我不懂customtopics.htm 首頁那個用戶專題digest.htm 精華區主題emailfriend.htm EMAIL推薦主題faq.htm FAQ幫助手冊,下面都是,只不過顯示部分不同,省略。footer.htm 論壇底部信息forumdisplay.htm 論壇主題列表forumdisplay_subforum.htm 二級論壇列表getpasswd.htm 取回密碼groupexpiry.htm 公衆用戶組header.htm 頭部鏈接index.htm 首頁login.htm 登陸頁面login_secques.htm 登陸時安全提問lostpasswd.htm 取回密碼memberlist.htm 會員列表,上面那個memcp_credits.htm 控制面板——積分交易memcp_home.htm 控制面板——首頁memcp_misc.htm 控制面板——好友列表、訂閱列表、收藏夾memcp_navbar.htm 控制面板——上面那個菜單條memcp_profile.htm 控制面板——編輯我的資料memcp_usergroups.htm 控制面板——公衆用戶組nopermission.htm 關閉論壇顯示的提示頁pay.htm 買帖子pay_view.htm 看帖子被誰買了pm.htm 短信息左邊菜單條pm_archive.htm 導出短消息pm_archive_html.htm 導出短消息HTMLpm_folder.htm 好像就是列表而已pm_ignore.htm 忽略列表pm_search.htm 搜索短消息pm_search_result.htm 搜索短消息結果pm_send.htm 發送短消息 pm_view.htm 瀏覽短信息,內容更詳細pmprompt.htm 首頁新短信提示post_attachments.htm 發帖子的附件模塊post_bbinsert.htm 一堆BBCODEpost_editpost.htm 編輯帖子post_newreply.htm 回覆主題post_newthread.htm 發新話題post_preview.htm 主題回顧post_seccode.htm 驗證碼post_smilies.htm SMILESpost_sminsert.htm 快速發帖欄rate.htm 評分rate_view.htm 評分記錄瀏覽register.htm 註冊reportpost.htm 主題報告search.htm 搜索主頁search_blog.htm 搜索BLOG列表search_threads.htm 搜索後的帖子列表showmessage.htm 系統返回錯誤信息那個stats_main.htm 統計首頁stats_misc.htm 管理統計、時間、積分等等一堆stats_navbar.htm 統計上面那個菜單條stats_onlinetime.htm 時間統計stats_team.htm 管理團隊topic.htm 又是QIHOO的隨機廣告topicadmin_bump.htm 提高主題topicadmin_delpost.htm 刪除主題topicadmin_getip.htm 查看IPtopicadmin_merge.htm 合併主題topicadmin_moderate.htm 高亮、置頂、精華一堆~topicadmin_move.htm 移動主題topicadmin_reason.htm 管理理由填寫topicadmin_refund.htm 強制退款topicadmin_split.htm 分割主題topicadmin_stick.htm 置頂viewpro.htm 會員詳細信息查看viewthread.htm 瀏覽帖子viewthread_mod.htm 帖子管理記錄viewthread_pay.htm 帖子支付頁面viewthread_poll.htm 投票框viewthread_printable.htm 打印主題whosonline.htm 詳細的在線動做actions.lang.php 動做語言包admincp.lang.php 後臺語言包archiver.lang.php archiver語言包customfaq.lang.php FAQ手冊的語言包emails.lang.php 一堆EMAIL信息messages.lang.php 錯誤信息語言包misc.lang.php 像最後編輯,由誰管理等等modactions.lang.php 管理代號pms.lang.php PM,都是管理理由templates.lang.php 前臺模板的語言包wap.lang.php wap用的語言包 wap==(WAP支持程序,通常不多改,忽略)相信看了上面的表來熟悉文件做用,找相應的文件進行修改,作一個功能加強型HACK不是難事。:) 緒論 本文檔的說明伴隨着Discuz!的成長,在Discuz!快速發展的同時,Discuz!的插件也日益豐富,在這些插件中存在的不規範問題也是確實存在的,爲了插件的規範化標準化進程的進行,也爲了方便各位優秀的插件開發人員,更爲了Discuz!程序插件的傳承,咱們特從如今開始進行插件開發標準化手冊的編寫,促進Discuz!論壇程序的插件開發!目前手冊正在緊張的製做中,歡迎你們對其中不對的地方進行指正,我的感受這個手冊更新的速度那會是至關的快啊第一章 插件代碼書寫規範 第一節 註釋標準在Discuz!插件中咱們建議開發人員儘可能添加簡潔明瞭的註釋語言,以方便後繼的插件修改者如下的幾種註釋都是支持的,咱們建議使用第一種<?php echo "這是第一種例子。\n"; // 本例是 C++ 語法的註釋 /* 本例採用多行的 註釋方式 */ echo "這是第兩種例子。\n"; echo "這是第三種例子。\n"; # 本例使用 UNIX Shell 語法註釋?>複製代碼第二節 縮進標準在Discuz!插件中咱們建議開發人員儘可能使用縮進來完成整個程序,雖然對於程序沒有影響,可是縮進會使代碼易於閱讀,而且強烈建議使用Tab鍵來控制縮進的程度,並強制定義其距離是8個空白字符寬度<?php if($loadctrl && (!defined('CURSCRIPT') || CURSCRIPT != 'wap') && substr(PHP_OS, 0, 3) != 'WIN') { if($fp = @fopen('/proc/loadavg', 'r')) { list($loadaverage) = explode(' ', fread($fp, 6));//請注意縮進 fclose($fp); if($loadaverage > $loadctrl) { header("HTTP/1.0 503 Service Unavailable");//請注意縮進 include DISCUZ_ROOT.'./include/serverbusy.htm'; exit(); }//請注意縮進 }//請注意縮進}?>複製代碼第三節 命名標準良好的命名方式會給程序的開放帶來很大的便利,同時不良的命名習慣也會給程序開發帶來麻煩,因此在Discuz!插件中咱們建議開發人員儘可能使用規範的命名方式來完成整個程序,仍然以上例爲演示,請注意其中變量名稱,因爲篇幅和時間的關係這裏就再也不展開敘述,這裏給出一個PHP程序開發比較通用的命名習慣(這是一個編程標準文檔)PHP 編程標準.總的來講,只有瞭解系統的程序員才能爲系統取出最合適的名字,若是全部的命名都與其天然相適合,則關係清晰,含義能夠推導得出,通常人的推想也能在乎料之中,若是你發覺你的命名只有少許能和其對應事物相匹配的話, 最好仍是從新設計吧<?php if($loadctrl && (!defined('CURSCRIPT') || CURSCRIPT != 'wap') && substr(PHP_OS, 0, 3) != 'WIN') { if($fp = @fopen('/proc/loadavg', 'r')) { list($loadaverage) = explode(' ', fread($fp, 6)); fclose($fp); if($loadaverage > $loadctrl) { header("HTTP/1.0 503 Service Unavailable"); include DISCUZ_ROOT.'./include/serverbusy.htm'; exit(); } }}?>複製代碼第四節 數據庫設計標準對於數據庫的設計咱們一樣因爲篇幅和時間的關係咱們再也不多說,請仔細查看Discuz!中的論壇版塊表的設計和命名標準,一樣的咱們提供給您一份手冊給您查看MySQL參考手冊cdb_forums 論壇表 fid smallint 論壇ID fup smallint 上級論壇ID type enum 類型 name char 名稱 status tinyint 顯示狀態 displayorder tinyint 顯示順序 styleid smallint 風格ID threads mediumint 主題數量 posts mediumint 帖子數量 todayposts mediumint 今日發帖數量 lastpost char 最後發表 allowsmilies tinyint 容許使用表情 allowhtml tinyint 容許使用html allowbbcode tinyint 容許bbcode allowimgcode tinyint 容許img allowanonymous tinyint 容許匿名 allowshare tinyint 容許共享到文集和supe allowpostspecial tinyint 容許發表特殊主題 alloweditrules tinyint 容許版主修改論壇規則 recyclebin tinyint 是否啓用回收站 modnewposts tinyint 是否審覈發帖 jammer tinyint 是否啓用干擾碼 disablewatermark tinyint 是否圖片附件增長水印 inheritedmod tinyint 本論壇或分類版主的權力繼承到下級論壇 autoclose smallint 自動關閉主題 forumcolumns tinyint 增長論壇水平橫排設置 threadcaches tinyint 主題緩存功能設置 allowpaytoauthor tinyint 容許直接向做者支付 第二章 插件代碼安全規範 第一節 PHP安全信息總的來講PHP仍是相對安全的Web程序,可是因爲一些代碼在處理方式上的不成熟致使了安全隱患.因爲這個議題範圍太廣,因此推薦PHPCHINA的Essential PHP Security -PHP安全基礎一書給你們,但願你們多看看,很不錯的一本書哦,更詳細的PHP安全信息請登陸php.net查找.第二節 咱們該怎麼作對於插件安全究竟咱們要作些什麼怎麼作?建議本內容在看過上節推薦的書以後再看會更好變量的初始化這裏不討論magic_quotes_gpc和register_globals的設置狀況,你們只要注意不要「無中生有」變量,每一個變量的獲得都是本身初始化過的邏輯關係清楚對於邏輯的斷定不是一句話可以說明白的,舉個簡單的例子,在判斷上傳文件的時候,咱們判斷的依據是他的後綴是否在咱們容許的後綴裏面,若是是容許的就執行上傳,反之就提示上傳文件後綴不對,可是若是用戶上傳的文件名是webshell.xxx.mht(容許mht文件上傳,mht是一種網頁存儲格式),因而文件上傳了,在apache系統的默認配置下,這個文件是會用PHP來解析的,利用這個算是BUG的問題吧,小版本人就曾夥同PHP安全界知名人士(幫他匿了)對咱們學校的服務器完成了入侵,並最終取得了root權限(目前俺們學校的服務器已經修正此問題),舉這個例子是爲了說明程序處理的重要性,若是當時多一步判斷上傳的文件,也許這個安全問題就再也不存在,其實這個例子來講明邏輯關係並非很合適,可是程序處理真的是一個很是重要的部分''與""的區別運用單引號中,任何變量($var)、特殊轉義字符(如「\t \r \n」等)不會被解析,所以PHP的解析速度更快,轉義字符僅僅支持「\’」和「\\」這樣對單引號和反斜槓自己的轉義;雙引號中,變量($var)值會代入字符串中,特殊轉義字符也會被解析成特定的單個字符,還有一些專門針對上述兩項特性的特殊功能性轉義,例如「\$」和「{$array[‘key’]}.這樣雖然程序編寫更加方便,但同時PHP的解析也很慢;數組中,若是下標不是整型,而是字符串類型,請務必用單引號將下標括起,正確的寫法爲$array[‘key’],而不是$array[key],由於不正確的寫法會使PHP解析器認爲key是一個常量,進而先判斷常量是否存在,不存在時才以「key」做爲下標帶入表達式中,同時出發錯誤事件,產生一條Notice級錯誤.所以,在絕大多數可使用單引號的場合,禁止使用雙引號.依據上述分析,能夠或必須使用單引號的狀況包括但不限於下述:字符串爲固定值,不包含「\t」等特殊轉義字符;數組的固定下標,例如$array[‘key’];表達式中不須要帶入變量,例如$string = ‘test’;而非$string = 「test$var」;數據的過濾與處理對於任何獲得的數據在不能肯定或者不能充分肯定其來路的時候必定要進行過濾與處理,在數據進入程序運行處理階段以前,必定要保證它的準確性和正確性不要相信任何數據的準確性和正確性這條視乎是和上面一條雷同,可是即便是從數據庫中查出來的數據也同樣不能肯定,好比生成cache文件,若是用戶POST的數據錯誤不是咱們指望的數據,而「恰巧」生成到文件中,因而一個webshell產生了,一樣這個例子也不是很合適,我只是但願你們明白這麼一點,若是咱們沒有一個很好的處理數據的方式,那麼代碼的安全崩潰也就指日可待不要妄圖直接把低版本的Discuz!插件直接運行因爲每一個大版本的升級都會帶來系統構架的一些變化,可能舊版本的插件仍然可使用,可是或許一些不可預料的問題正在隱藏中,因此建議任何低版本的Discuz!插件最好是通過仔細研究以後再公告說能夠適用新版本Discuz!插件第三章 Discuz!中經常使用變量說明 |
|