版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 目錄</b></p><p><b> i.可行性分析1</b></p><p> ii.系統(tǒng)開發(fā)具備的基本知識與技術1</p><p><b> LAMP平臺1</b></p><p> MVC (Model View Contro
2、ler)思想2</p><p> Smarty模板引擎技術3</p><p> iii.系統(tǒng)分析部分4</p><p> 1)網(wǎng)站前臺結構(前臺業(yè)務流程圖)4</p><p> 2)后臺功能分析(后臺業(yè)務流程)4</p><p> 3)數(shù)據(jù)流程圖(模擬用戶訪問時的數(shù)據(jù)流向)5</p>
3、<p> 4)數(shù)據(jù)庫需求分析5</p><p> 5)數(shù)據(jù)字典(部分表的字段信息、索引及部分字段注釋)6</p><p> iv.系統(tǒng)設計部分10</p><p> 1)系統(tǒng)各頁面介紹10</p><p><b> 2)頁面邏輯10</b></p><p> 3)
4、系統(tǒng)各目錄及文件功能說明:11</p><p> v.系統(tǒng)實施部分12</p><p> 1)程序框圖(對應于系統(tǒng)分析前兩部分)12</p><p> 2)源程序(在此分析幾個簡單的php文件)21</p><p> 3)測試服務器相關信息29</p><p> 4)模擬運行數(shù)據(jù)30</p&
5、gt;<p><b> 用戶權限管理30</b></p><p> 首頁個性化設置31</p><p> 系統(tǒng)使用過程中需補充說明的內(nèi)容32</p><p> 附錄或參考資料32</p><p> 基于PHP+MySQL的網(wǎng)址大全系統(tǒng)</p><p> 摘要:本著
6、為廣大網(wǎng)民提供一個更優(yōu)秀的“上網(wǎng)窗口”的宗旨,我們選擇開發(fā)了這樣一個網(wǎng)址大全系統(tǒng)。本系統(tǒng)采用目前網(wǎng)站開發(fā)中應用最為廣泛使用的PHP程序編寫而成,結合實用高效而且免費的MySQL數(shù)據(jù)庫,以及用于頁面與程序分離的smarty模板技術等技術。同時為了提高網(wǎng)站的可管理性、體現(xiàn)系統(tǒng)的邏輯性,本系統(tǒng)借用MVC思想,實現(xiàn)了模塊、頁面、控制器相分離,方便各功能模塊的管理和新功能的開發(fā)。</p><p><b> i.
7、可行性分析</b></p><p> 隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)民數(shù)量日趨增加,一個瀏覽器架起了網(wǎng)民和外面世界的橋梁,地球成了地球村。雖然上網(wǎng)的人數(shù)在不斷增加,但與此同時,我們發(fā)現(xiàn)不能熟練操作計算機的仍是多數(shù)。網(wǎng)民上網(wǎng)過程中需要引導。網(wǎng)民打開瀏覽器后不知道如何操作,進入什么網(wǎng)站,查找什么信息。這樣,作為瀏覽器主頁的第一個頁面成為許多網(wǎng)站開發(fā)者爭相競爭的目標,很多網(wǎng)站都在自己網(wǎng)站顯眼位置注明“設為主頁”,以
8、期通過這樣的方式,增加網(wǎng)站的訪問量。但是,就目前的形勢看,瀏覽器主頁越來越多的是搜索引擎、網(wǎng)址大全。因為在互聯(lián)網(wǎng)這樣存在海量信息的地方,我們所想獲取的信息卻是特定的,所以我們往往會借助瀏覽器進行搜索,或者對于常用網(wǎng)站我們只要一次點擊就能到達的方式。所以我們認為網(wǎng)址大全具有很大的發(fā)展?jié)摿Α?lt;/p><p> 網(wǎng)址大全相對于搜索引擎作為瀏覽器所具有的優(yōu)勢就是信息量更大,而且同樣具有搜索的功能,此外搜索引擎首頁也有將
9、其做成網(wǎng)址大全的趨勢,像搜索引擎巨頭百度、谷歌都有“個性化首頁”,只要用戶登錄了,首頁就會變成可定制的“個性化首頁”,而這“個性化首頁”本質(zhì)就是網(wǎng)址大全。</p><p> 借鑒于hao123.com和2345.com這樣典型的網(wǎng)址大全,我認為網(wǎng)址大全系統(tǒng)會擁有巨大的市場,同時借助于免費開源的PHP+MySQL+Apache+Linux,我們建站的成本得到大大的降低,所以從技術和前景等角度考慮上都是可行的。&l
10、t;/p><p> ii.系統(tǒng)開發(fā)具備的基本知識與技術</p><p><b> LAMP平臺</b></p><p> Linux+Apache+Mysql+PHP一組常用來搭建動態(tài)網(wǎng)站或者服務器的開源軟件,本身都是各自獨立的程序,但是因為常被放在一起使用,擁有了越來越高的兼容度,共同組成了一個強大的Web應用程序平臺。隨著開源潮流的蓬勃發(fā)
11、展,開放源代碼的LAMP已經(jīng)與J2EE和.Net商業(yè)軟件形成三足鼎立之勢,并且該軟件開發(fā)的項目在軟件方面的投資成本較低,因此受到整個IT界的關注。從網(wǎng)站的流量上來說,70%以上的訪問流量是LAMP來提供的,LAMP是最強大的網(wǎng)站解決方案。</p><p> LAMP 平臺由幾個組件組成,呈分層結構。每一層都提供了整個軟件棧的一個關鍵部分:</p><p> Linux 處在最低層,提供
12、操作系統(tǒng)。其他每個組件實際上也在其上運行。但是,并不一定局限于Linux,如有必要,其他操作系統(tǒng)也可以實現(xiàn),例如:Windows、Mac OS X 或 UNIX。</p><p> 次低層是 Apache,它是一個 Web 服務器。Apache 提供可讓用戶獲得 Web 頁面的機制。Apache 是一款穩(wěn)定的、支持關鍵任務的服務器,Internet 上超過 65% 的網(wǎng)站都使用它作為 Web 服務器。PHP 組
13、件實際上是在 Apache 中,動態(tài)頁面可以通過 Apache 和 PHP 創(chuàng)建。</p><p> MySQL 提供 LAMP 系統(tǒng)的數(shù)據(jù)存儲端。有了 MySQL,便可以獲得一個非常強大的、適合運行大型復雜站點的數(shù)據(jù)庫。在 Web 應用程序中,所有數(shù)據(jù)、產(chǎn)品、帳戶和其他類型的信息都存放在這個數(shù)據(jù)庫中,通過 SQL 語言可以很容易地查詢這些信息。</p><p> PHP 是一門簡單而
14、有效的編程語言,它像是粘合劑,可以將 LAMP 系統(tǒng)所有其他的組件粘合在一起。您可以使用 PHP 編寫能訪問 MySQL 數(shù)據(jù)庫中的數(shù)據(jù)和 Linux 提供的一些特性的動態(tài)內(nèi)容。</p><p> MVC (Model View Controler)思想</p><p> MVC是一個設計模式,它強制性的使應用程序的輸入、處理和輸出分開。使用MVC應用程序被分成三個核心部件:模型、視圖
15、、控制器。它們各自處理自己的任務。在MVC的處理過程,首先控制器接收用戶的請求,并決定應該調(diào)用哪個模型來進行處理,然后模型用業(yè)務邏輯來處理用戶的請求并返回數(shù)據(jù),最后控制器用相應的視圖格式化模型返回的數(shù)據(jù),并通過表示層呈現(xiàn)給用戶。下面簡單介紹MVC的三個部分。</p><p> 模型:表示企業(yè)數(shù)據(jù)和業(yè)務規(guī)則。在MVC的三個部件中,模型擁有最多的處理任務。例如它可能用象EJBs和ColdFusion Compone
16、nts這樣的構件對象來處理數(shù)據(jù)庫。被模型返回的數(shù)據(jù)是中立的,就是說模型與數(shù)據(jù)格式無關,這樣一個模型能為多個視圖提供數(shù)據(jù)。由于應用于模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重復性。</p><p> 視圖:是用戶看到并與之交互的界面。對老式的Web應用程序來說,視圖就是由HTML元素組成的界面,在新式的Web應用程序中,HTML依舊在視圖中扮演著重要的角色,但一些新的技術已層出不窮,它們包括Ma
17、cromedia Flash和象XHTML,XML/XSL,WML等一些標識語言和Web services。如何處理應用程序的界面變得越來越有挑戰(zhàn)性。MVC一個大的好處是它能為你的應用程序處理很多不同的視圖。在視圖中其實沒有真正的處理發(fā)生,不管這些數(shù)據(jù)是聯(lián)機存儲的還是一個雇員列表,作為視圖來講,它只是作為一種輸出數(shù)據(jù)并允許用戶操縱的方式。</p><p> 控制器:接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求
18、。所以當單擊Web頁面中的超鏈接和發(fā)送HTML表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求并決定調(diào)用哪個模型構件去處理請求,然后用確定用哪個視圖來顯示模型處理返回的數(shù)據(jù)。</p><p> 為什么這里要使用MVC技術:大部分Web應用程序都是用像ASP,PHP,或者CFML這樣的過程化(自PHP5.0版本后已全面支持面向對象模型)語言來創(chuàng)建的。它們將像數(shù)據(jù)庫查詢語句這樣的數(shù)據(jù)層代碼和像HTML這
19、樣的表示層代碼混在一起。經(jīng)驗比較豐富的開發(fā)者會將數(shù)據(jù)從表示層分離開來,但這通常不是很容易做到的,它需要精心的計劃和不斷的嘗試。MVC從根本上強制性的將它們分開。盡管構造MVC應用程序需要一些額外的工作,但是它給我們帶來的好處是毋庸置疑的。</p><p> Smarty模板引擎技術</p><p> Smarty是一個使用PHP寫出來的模板引擎,是目前業(yè)界最著名的PHP模板引擎之一。它
20、分離了邏輯代碼和外在的內(nèi)容,提供了一種易于管理和使用的方法,用來將原本與HTML代碼混雜在一起PHP代碼邏輯分離。簡單的講,目的就是要使PHP程序員同前端人員分離,使程序員改變程序的邏輯內(nèi)容不會影響到前端人員的頁面設計,前端人員重新修改頁面不會影響到程序的程序邏輯,這在多人合作的項目中顯的尤為重要。</p><p> Smarty優(yōu)點有 1. 速度:采用Smarty編寫的程序可以獲得最大速度的提高,這一點是相對
21、于其它的模板引擎技術而言的。2. 編譯型:采用Smarty編寫的程序在運行時要編譯成一個非模板技術的PHP文件,這個文件采用了PHP與HTML混合的方式,在下一次訪問模板時將WEB請求直接轉換到這個文件中,而不再進行模板重新編譯(在源程序沒有改動的情況下)3. 緩存技術:Smarty選用的一種緩存技術,它可以將用戶最終看到的HTML文件緩存成一個靜態(tài)的HTML頁,當設定Smarty的cache屬性為true時,在Smarty設定的cac
22、hetime期內(nèi)將用戶的WEB請求直接轉換到這個靜態(tài)的HTML文件中來,這相當于調(diào)用一個靜態(tài)的HTML文件。4. 插件技術:Smarty可以自定義插件。插件實際就是一些自定義的函數(shù)。5. 模板中可以使用if/elseif/else/endif。在模板文件使用判斷語句可以非常方便的對模板進行格式重排。</p><p> 在本系統(tǒng)中充分運用了smarty的這些優(yōu)勢,將PHP文件與HTML文件相分離,而且通過利用sm
23、arty的緩存技術,使系統(tǒng)運行速度很快。</p><p> iii.系統(tǒng)分析部分</p><p> 1)網(wǎng)站前臺結構(前臺業(yè)務流程圖)</p><p> 2)后臺功能分析(后臺業(yè)務流程)</p><p> 為更好的服務于網(wǎng)站所想要展示的業(yè)務,本系統(tǒng)除在前臺中展示的頁面外,會涉及到以下功能,這些功能均會在系統(tǒng)后臺涉及:</p>
24、;<p> 后臺管理首頁中的用戶管理功能,添加多用戶,并可以給予特定的權利,對于超級管理員而言,使網(wǎng)站管理方便,而且簡單。</p><p> 管理網(wǎng)址的功能,利用數(shù)據(jù)庫管理網(wǎng)址,而不是將每個網(wǎng)址都寫在靜態(tài)頁面上,無需每次查看、修改代碼,更加方面管理員管理。</p><p> 搜索引擎管理的功能,針對部分用戶瀏覽器主頁選擇使用搜索引擎主頁的現(xiàn)象,我們將使用更加靈活的搜索方
25、式,以達到用戶在本頁面即可實現(xiàn)更加強大的搜索功能,此外還會提供熱門關鍵字,讓用戶也知道現(xiàn)在流行搜索那些關鍵字,增加用戶使用本頁面提供搜索的樂趣性。</p><p> 城市導航的功能,在城市導航頁面里,相對于首頁,該頁面更加簡潔,而且沒有廣告,頁面的內(nèi)容不再專注于提供多功能內(nèi)容的全國性站點,而是該城市的相關服務性網(wǎng)站,該頁面有利于以后在特定城市的發(fā)展。</p><p> 專題管理功能,這
26、部分是根據(jù)特定時間段里的熱門的網(wǎng)站的一個搜集,如網(wǎng)絡游戲、網(wǎng)絡團購、站長工具等特定人群關注的一個網(wǎng)站的集合,這樣有助于特定用戶在網(wǎng)站發(fā)現(xiàn)好網(wǎng)站,讓用戶在網(wǎng)站去尋找樂趣。</p><p> 廣告管理的功能,為了保證網(wǎng)站能夠獲得一定的回報,在不影響整體效果的前提下,添加一定的廣告。</p><p> 數(shù)據(jù)管理功能,針對數(shù)據(jù)庫實行備份、導入、同步、優(yōu)化、修復、刪除等功能。</p>
27、<p> 模板管理的功能,因為本系統(tǒng)采用MVC架構,實現(xiàn)了程序、模板、頁面相分離的效果,所以具有模板修改的功能。</p><p> 生成靜態(tài)頁面的功能,由于系統(tǒng)所展示頁面有限,而且不會經(jīng)常做出修改,所以前臺均用程序將其生成靜態(tài)的,使頁面能夠更快展示在用戶面前。</p><p> 3)數(shù)據(jù)流程圖(模擬用戶訪問時的數(shù)據(jù)流向)</p><p><
28、b> 4)數(shù)據(jù)庫需求分析</b></p><p> 因為本系統(tǒng)定義的是網(wǎng)址大全,所以必然會收集大量的網(wǎng)址,初步會添加14427條鏈接,所以在此需要數(shù)據(jù)庫對其進行管理。考慮到連接數(shù)之多,我們會對這些鏈接進行一個簡單的分類,而且我們設置了三級。一級為娛樂休閑、生活服務、文化教育、其他分類,這四個欄目。其中娛樂休閑下有30個二級分類,生活服務欄目下有36個二級分類,文化教育欄目下有15個二級分類,
29、其他分類下有15個二級分類,三級頁面是針對每個分類再進行的細分。數(shù)據(jù)庫這部分對應首頁,首頁左邊內(nèi)容(未對首頁進行個性化設置情況下),點擊首頁進入的單獨頁面即為第三級分類;對應后臺網(wǎng)址管理部分;為數(shù)據(jù)庫中的wzdq_site表。</p><p> 同樣因為網(wǎng)址之多,在首頁里設置有站內(nèi)搜索的功能,但這部分所用的表不為上面的wzdq_site表,因為通過后臺后臺添加表時,插入數(shù)據(jù)庫的字段達不到良好的搜索效果,所以針對
30、搜索功能特別增加一個表wzdq_site_search,特別添加字段pinyin,讓用戶輸入拼音時,也能搜到相應的網(wǎng)站。</p><p> 由于本站采用動態(tài)管理網(wǎng)站鏈接,所以除了在wzdq_site表中設置有顯示時間,截止時間外,還建有表wzdq_recycler,以便誤刪,方便恢復。</p><p> 以上為本系統(tǒng)著重強調(diào)的網(wǎng)址鏈接分類方面的數(shù)據(jù)庫需求分析,此外還有表wzdq_adm
31、in_user管理用戶,wzdq_advert 廣告管理,wzdq_city_* 管理城市導航,wzdq_class網(wǎng)址三級分類,wzdq系統(tǒng)資料設置,wzdq_cool *酷站推薦,wzdq_feedback反饋系統(tǒng),wzdq_index_tool首頁實用工具鏈接,wzdq_ipstate統(tǒng)計網(wǎng)站訪問情況,wzdq_plan 后臺計劃任務,wzdq_link友情鏈接,wzdq_search*多功能搜索,wzdq_urladd用戶請求網(wǎng)
32、址收錄,wzdq_zhuanti *專題管理。</p><p> 5)數(shù)據(jù)字典(部分表的字段信息、索引及部分字段注釋)</p><p> wzdq_admin_user</p><p><b> 索引: </b></p><p> wzdq_advert</p><p><
33、;b> 索引: </b></p><p> wzdq_city_cityclass</p><p><b> 索引: </b></p><p> wzdq_city_mingzhan</p><p><b> 索引: </b></p
34、><p> wzdq_config</p><p><b> 索引: </b></p><p> wzdq_feedback</p><p><b> 索引: </b></p><p> wzdq_search</p><p&
35、gt;<b> 索引: </b></p><p> wzdq_searchclass</p><p><b> 索引: </b></p><p> wzdq_urladd</p><p><b> 索引: </b></p>
36、;<p> wzdq_zhuanti</p><p><b> 索引: </b></p><p><b> iv.系統(tǒng)設計部分</b></p><p><b> 1)系統(tǒng)各頁面介紹</b></p><p> 前臺頁面有首頁、網(wǎng)址分類的二級頁面
37、,前臺其他頁面還有用戶意見反饋頁面,其他網(wǎng)站站長申請網(wǎng)址收錄頁面等。后臺所需頁面根據(jù)功能而定,見系統(tǒng)分析部分→后臺功能分析。</p><p><b> 2)頁面邏輯</b></p><p> 前臺除簡單的用戶反饋功能、站長申請收錄網(wǎng)址功能為動態(tài)頁面,其他頁面(主要為首頁、專題頁面、城市導航頁面、內(nèi)容分類頁面)均由系統(tǒng)后臺某程序生成靜態(tài)頁面。作為首頁,訪問網(wǎng)站的第一
38、個頁面,其聯(lián)系著其他頁面:內(nèi)容分類頁面為用戶點擊首頁左邊相應分類進入,用戶反饋功能在首頁底部和內(nèi)容分類頁面左上角位置。網(wǎng)址提交頁面由首頁底部提供的相應鏈接進入。前臺所需要的靜態(tài)內(nèi)容在根目錄下的static文件夾下,public是首頁中需要的諸如鬧鐘、歷史記錄、首頁個性化設置等widget文件。</p><p> 后臺主要思路就是MVC,將模塊、試圖、控制器分開,故后臺頁面邏輯就是將每個功能分成三塊,分別寫入mo
39、dules、controller、tpls三個文件夾內(nèi),同時建立application文件夾,建立每個功能的程序與數(shù)據(jù)庫、smarty等的聯(lián)系,方便調(diào)用。最后就是頁面顯示所需要的靜態(tài)的內(nèi)容,寫入static,包括js、images、css等。</p><p> 3)系統(tǒng)各目錄及文件功能說明:</p><p> 下面將從系統(tǒng)根目錄開始描述各文件夾的作用:</p><p
40、> Admin后臺管理目錄,為安全起見,建議修改目錄名,同時修改文件init.php相應位置</p><p> ├-application目錄下app_tpl.php和app_db功能在controller目錄中起作用,分別為引用定義smarty模板、調(diào)用數(shù)據(jù)庫的作用。其他三個文件分別定義了一些常用的類,同樣在controller目錄下的php有調(diào)用(類太多,在此不一一介紹)。</p>
41、<p> ├-configcfg_constants.php為系統(tǒng)安裝過程中相關常量信息設置,cfg_database為安裝過程對數(shù)據(jù)庫執(zhí)行所設置的相關信息,僅在安裝過程中需要,安裝完成后,刪除無影響。</p><p> ├-controllers為后臺功能模板的php文件,這些文件運用smarty時是通過引入application/app_tpl.php實現(xiàn)的,而application/
42、app_tpl.php中已經(jīng)將smarty類實例化了;此外,這些文件還會調(diào)用數(shù)據(jù)庫,它們是通過引入application/app_db.php實現(xiàn)的,而調(diào)用的其他類,統(tǒng)一寫在application目錄下的其他三個文件里。</p><p> ├-data檢查系統(tǒng)安裝過程中相關文件是否正確、記錄管理員登錄系統(tǒng)的相關信息。</p><p> ├-modules目錄下文件為后臺各相應頁面操
43、作的php文件,定義相關功能所需要的類,部分引入了smarty模板。用smarty調(diào)用tpls/tpls/main目錄下相關模板文件,此外, mod_make_html.php和mod_auth.php兩文件在tpls/tpls/main模板目錄下沒有相對應文件, mod_make_html.php利用smarty相關技術結合php將特定文件生成html;mod_auth.php利用smarty相關技術結合php驗證用戶登錄權限。<
44、;/p><p> ├-static作用同根目錄下的static,為控制系統(tǒng)后臺頁面顯示的css、images、js等文件</p><p><b> ├-tpls</b></p><p> ├-cachesmarty模板技術緩存目錄。</p><p> ├-compilesmarty模板技術編譯時產(chǎn)生的文件目錄。
45、</p><p> ├-tpls系統(tǒng)模板文件夾,admin為后臺頁面的smarty模板文件,main為前臺風格模板文件。</p><p> ├-index.php后臺系統(tǒng)登錄入口,正確登錄后加載控制器,實現(xiàn)在同一頁面調(diào)用不同模板,顯示不同網(wǎng)頁而頁面不跳轉。</p><p> Feedback用戶意見反饋頁面,其中index.php是頁面展示,feed
46、back.php是處理用戶提交信息頁面</p><p> Html系統(tǒng)生成靜態(tài)頁面存放位置,可修改,里面的文件由系統(tǒng)后臺中的“靜態(tài)生成”功能完成</p><p> Public個性化網(wǎng)站顯示樣式的實質(zhì)就是調(diào)用該文件夾下的不同css、images、js等文件</p><p> ├-css存放全站網(wǎng)址鏈接顏色設置的css文件</p>&l
47、t;p> ├-home個性化首頁的外觀(含css、images、js等之類的文件)</p><p> ├-images設置首頁背景的幾張圖片所存放的目錄</p><p> ├-js首頁中各種需要調(diào)用js所存放的目錄</p><p> ├-page個性化各分頁面的外觀(含css、images、js等之類的文件)</p><p
48、> ├-widget包含首頁中的鬧鐘、歷史記錄、個性化設置、天氣等功能</p><p> Static文件作用與public文件相同,僅有些如城市導航等靜態(tài)頁面使用該文件夾內(nèi)的樣式</p><p> Themes通過對相關images、css、js的修改,使頁面呈現(xiàn)不同風格,與用戶對網(wǎng)站風格進行個性化設置不同,這里是網(wǎng)站管理員才能進行的修改、設置</p>
49、<p> url-submit其他網(wǎng)站站長向本系統(tǒng)提交的網(wǎng)址的功能</p><p> index.htm/index.html/kp.htm/kp.html</p><p> 均為靜態(tài)的網(wǎng)站首頁,均由系統(tǒng)后臺中的“靜態(tài)生成”功能完成。</p><p> init.php實質(zhì)就是文件admin/applications/app_init.php
50、</p><p> robert.txt屏蔽網(wǎng)絡爬蟲搜索系統(tǒng)后臺管理頁面</p><p> 總體而言,本系統(tǒng)后臺采用的是MVC架構實現(xiàn)了處理、表現(xiàn)、控制相分離,admin目錄下的modules為M(模型層),tpls為V(視圖層),controller為C(控制層)。而前臺則采用php生成html文件的功能,以期提高網(wǎng)頁訪問速度。</p><p><b&
51、gt; v.系統(tǒng)實施部分</b></p><p> 1)程序框圖(對應于系統(tǒng)分析前兩部分)</p><p><b> 前臺部分:</b></p><p> 首頁截圖(首頁各部分解釋見網(wǎng)站前臺結構)</p><p><b> 分頁截圖</b></p><p&g
52、t;<b> 后臺頁面:</b></p><p><b> 登錄界面</b></p><p> 后臺總體功能概覽,首頁添加一些會經(jīng)常用到的設置選項。在接下來介紹各模塊的時候,由于寫得很明顯,很容易對應前臺頁面各部分,故在接下來的部分中不會一一介紹后臺各設置對應前臺的位置;同樣,后臺主體部分對應于程序相應文件一般有3個,即MVC中的三部分,對
53、應admin目錄下的modules、tpls/admin/tpls、controller三個文件夾下的相應文件,而且通過看文件名就知道對應后臺相應模塊,故在接下介紹后臺模塊時,也省去此部分,僅簡單介紹各模塊對應于數(shù)據(jù)庫相應的表。</p><p> 系統(tǒng)管理模塊:基本設置對應數(shù)據(jù)庫表wzdq_config,計劃任務對應數(shù)據(jù)庫表wzdq_plan,管理員日志對應數(shù)據(jù)庫表wzdq_admin_user。</p&
54、gt;<p> 網(wǎng)址管理部分對應首頁中所有鏈接,此為網(wǎng)址大全由來最初的想法,這部分對應數(shù)據(jù)庫中wzdq_class,wzdq_coolclass,wzdq_coolsite,wzdq_index_tool,wzdq_mingzhan,wzdq_recycler,wzdq_site等表。</p><p> 搜索管理模塊,對應數(shù)據(jù)庫中wzdq _seach,wzdq_searchclass,wzdq
55、_search_keyword等表</p><p> 城市導航模塊,對應于數(shù)據(jù)庫中wzdq_city_class, wzdq_city_coolclass, wzdq_city_coolsite, wzdq_city_id_name, wzdq_city_mingzhan等表</p><p> 專題管理模塊,對應數(shù)據(jù)庫中wzdq_zhuanti,wzdq_zhuanticlass,wz
56、dq_zhuantisite等表。</p><p> 廣告管理對應數(shù)據(jù)庫表wzdq_advert,至于網(wǎng)站廣告形式多樣,而表只有一個的原因是因為廣告形式雖多,但數(shù)量少,而區(qū)分各類廣告應該在那部分顯示是通過表中字段varname來控制的。</p><p> 數(shù)據(jù)管理模塊就是對數(shù)據(jù)庫的操作,程序沒有針對數(shù)據(jù)庫中具體哪一個表。</p><p> 此部分也沒有對應數(shù)據(jù)
57、庫中具體的表,僅是程序對前臺靜態(tài)文件修改,以達到不同顯示風格效果的目的。</p><p> 靜態(tài)生成模塊,也沒有涉及數(shù)據(jù)庫中的表,而是程序對文件的操作知識。</p><p> 2)源程序(在此分析幾個簡單的php文件)</p><p> 1. 根目錄下的feedback反饋系統(tǒng)(頁面截圖如下)</p><p> 在feedback目錄
58、下有index.php文件和feedback文件,以及一些頁面顯示所需要的靜態(tài)網(wǎng)頁方面的素材(在images文件夾里)。Index.php文件的作用就是調(diào)用admin/tpls/tpls/main/default(green)目錄下的url_submit.tpl文件,提供頁面基本顯示作用,對于如何處理用戶提交的數(shù)據(jù),則由feedback.php文件處理,通過feedback文件設置的一系列條件,就會執(zhí)行SQL語句</p>
59、<p> insert ('ylmf_feedback', array('username', 'email', 'content', 'add_time'), array($username, $email, $content, time())))</p><p> feedback.php文件代碼如下:</p&
60、gt;<p><b> <?php</b></p><p> require '../init.php';</p><p> /* 每個 IP 每天最多提交建議次數(shù) */</p><p> define('SUBMIT_ONE_DAY', 3);</p><p>
61、; $error_msg = '';</p><p><b> try</b></p><p><b> {</b></p><p> $username = empty($_POST['username']) ? '' : strip_tags(iconv('
62、;UTF-8', 'GBK', $_POST['username']));</p><p> $email = (isset($_POST['email'])) ? strip_tags(iconv('UTF-8', 'GBK', $_POST['email'])) : '';</p&g
63、t;<p> $content = (isset($_POST['content'])) ? trim(iconv('UTF-8', 'GBK', $_POST['content'])) : '';</p><p> (empty($content)) && $error_msg .= ',意
64、見及建議 ';</p><p> if (!empty($error_msg))</p><p><b> {</b></p><p> throw new Exception($error_msg, 11);</p><p><b> }</b></p><p&
65、gt; $content = htmlspecialchars($content, ENT_QUOTES);</p><p> if (strlen($content) > 600 || strlen($content) < 40)</p><p><b> {</b></p><p> throw new Exceptio
66、n('請將您的描述控制在 20 - 300 字,更多內(nèi)容請您分次提交。', 1);</p><p><b> }</b></p><p><b> // 驗證次數(shù)</b></p><p> $old_cookie = (isset($_COOKIE['fdnum'])) ? (int
67、)$_COOKIE['fdnum'] : 0;</p><p> if ($old_cookie >= SUBMIT_ONE_DAY)</p><p><b> {</b></p><p> throw new Exception('抱歉,24 小時內(nèi)您只能提交 ' . SUBMIT_ONE_DAY
68、 . ' 次反饋信息。謝謝合作!', 2);</p><p><b> }</b></p><p> $old_cookie++;</p><p> if (false === app_db::insert('ylmf_feedback', array('username', 'em
69、ail', 'content', 'add_time'),</p><p> array($username, $email, $content, time())))</p><p><b> {</b></p><p> throw new Exception('抱歉,信息提交失敗,請重試
70、。', 1);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> // 記錄提交次數(shù)</b></p><p> if
71、($old_cookie > SUBMIT_ONE_DAY || !isset($_COOKIE['fdstime']) || $_COOKIE['fdstime'] < 1)</p><p><b> {</b></p><p> setcookie('dfstime', time(), time()
72、+ 86400);</p><p> setcookie('fdnum', $old_cookie, time() + 86400);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b>
73、</p><p> setcookie('fdnum', $old_cookie, time() + 86400 - (time() - $_COOKIE['fdstime']));</p><p><b> }</b></p><p> throw new Exception('<div c
74、lass="success">提交成功,感謝您的反饋! <a href="'. URL .'/">返回首頁</a></div>', 3);</p><p> unset($username, $email, $content);</p><p><b> }</b&
75、gt;</p><p> unset($headers, $body);</p><p><b> }</b></p><p> catch (Exception $e)</p><p><b> {</b></p><p> $error_msg = $e->
76、;getMessage();</p><p> if (!empty($error_msg) && $e->getCode() == 11)</p><p><b> {</b></p><p> $error_msg = '抱歉,信息提交失敗,請輸入 ' . substr($error_msg, 2
77、) . '。';</p><p><b> }</b></p><p> $output = array(</p><p> 'code' => ($e->getCode() < 2) ? 1 : 3,</p><p> 'message' =&
78、gt; iconv('GBK', 'UTF-8', $error_msg),</p><p><b> );</b></p><p> header("content-type:text/html; charset=GBK");</p><p> echo json_encode($ou
79、tput);</p><p><b> }</b></p><p><b> ?></b></p><p> 2. admin/modules目錄下的mod_make_html.php靜態(tài)頁面生成程序</p><p> 同feedback反饋系統(tǒng),后臺里生成靜態(tài)文件功能也有三個文件,其
80、中實現(xiàn)該功能的核心文件為admin/modules目錄下的mod_make_html.php。</p><p> 以生成靜態(tài)首頁為例,此代碼部分如下:</p><p> public static function make_html_index()</p><p><b> {</b></p><p><b
81、> try</b></p><p><b> {</b></p><p><b> //生成普通首頁</b></p><p> $result = self::get_html_index();</p><p> if (empty($result))</p>
82、<p><b> {</b></p><p> throw new Exception('首頁生成失敗', 10);</p><p><b> }</b></p><p><b> // 寫文件</b></p><p> $filenam
83、e = PATH_ROOT . '/index.htm';</p><p> if (false == mod_file::write($filename, $result, "wb+", 0))</p><p><b> {</b></p><p> throw new Exception('
84、寫文件 ' . $filename . ' (首頁)失敗', 10);</p><p><b> }</b></p><p> @chmod($filename, 0777);</p><p> $filename = PATH_ROOT . '/index.html';</p>&l
85、t;p> if (false == mod_file::write($filename, $result, "wb+", 0))</p><p><b> {</b></p><p> throw new Exception('寫文件 ' . $filename . ' (首頁)失敗', 10);<
86、/p><p><b> }</b></p><p> @chmod($filename, 0777);</p><p><b> //生成寬屏首頁</b></p><p> $result = self::get_html_index('kp');</p><
87、p> if (empty($result))</p><p><b> {</b></p><p> throw new Exception('首頁生成失敗', 10);</p><p><b> }</b></p><p><b> // 寫文件</
88、b></p><p> $filename = PATH_ROOT . '/kp.htm';</p><p> if (false == mod_file::write($filename, $result, "wb+", 0))</p><p><b> {</b></p><
89、;p> throw new Exception('寫文件 ' . $filename . ' (首頁)失敗', 10);</p><p><b> }</b></p><p> @chmod($filename, 0777);</p><p> $filename = PATH_ROOT .
90、9;/kp.html';</p><p> if (false == mod_file::write($filename, $result, "wb+", 0))</p><p><b> {</b></p><p> throw new Exception('寫文件 ' . $filename
91、 . ' (首頁)失敗', 10);</p><p><b> }</b></p><p> @chmod($filename, 0777);</p><p> //生成多個首頁,數(shù)據(jù)庫表ylmf_config的yl_mulindex字段,以|分開</p><p> $yl_mulindex =
92、mod_config::get_one_config('yl_mulindex');</p><p> if (!empty($yl_mulindex))</p><p><b> {</b></p><p> foreach (explode('|', $yl_mulindex) as $indexnam
93、e)</p><p><b> {</b></p><p> if (eregi("^([a-z0-9]+).htm([l]?)$", $indexname))</p><p><b> {</b></p><p> $filename = PATH_ROOT .
94、9;/' . $indexname;</p><p> if (false == mod_file::write($filename, $result, "wb+", 0))</p><p><b> {</b></p><p> throw new Exception('寫文件 ' . $fi
95、lename . ' (首頁)失敗', 10);</p><p><b> }</b></p><p> @chmod($filename, 0777);</p><p><b> }</b></p><p><b> }</b></p>
96、<p><b> }</b></p><p> return true;</p><p><b> }</b></p><p> catch (Exception $e)</p><p><b> {</b></p><p> se
97、lf::$error_message = $e->getMessage();</p><p> return false;</p><p><b> }</b></p><p><b> }</b></p><p> 與上一部分feedback反饋系統(tǒng)不同之處在于,此部分不是php對數(shù)
98、據(jù)庫的操作,而是php對文件的操作。如對網(wǎng)站首頁生成的過程中,該php文件先判斷在根目錄下是否存在文件index.html/index.htm/kp.html/kp.htm,如果不存在則生成該文件名的文件,然后調(diào)用函數(shù)get_html_index ($type = '') 向這四個文件寫入相應的代碼,代碼大致內(nèi)容就是在該文件相應位置寫入相應顯示的內(nèi)容。</p><p> 3. 根目錄下的sear
99、ch.php站內(nèi)搜索</p><p> 在數(shù)據(jù)庫分析的過程中,我們已經(jīng)說明了會為站內(nèi)搜索功能單獨建立一張表名為wzdq_site_search的表,所以在此我們需要先建立程序與數(shù)據(jù)庫之間的聯(lián)系,在此我們只需要引入根目錄下的init.php即可,因為init.php文件實質(zhì)就是admin/application/app_init.php文件,app_init.php文件中又引用了app_db.php,該文件的作用
100、就是操作數(shù)據(jù)庫的,其中有一個叫init_mysql的類的作用就是連接數(shù)據(jù)庫,其具體內(nèi)容如下:</p><p> protected static function init_mysql ($is_read = true, $is_master = false)</p><p><b> {</b></p><p> $link =
101、9;link_read';</p><p> if (empty(self::$$link))</p><p><b> {</b></p><p><b> try</b></p><p><b> {</b></p><p> //
102、$link = 'link_read';</p><p> $host = $GLOBALS['database']['db_host'];</p><p> self::$$link = @mysql_pconnect($host, $GLOBALS['database']['db_user'], $GL
103、OBALS['database']['db_pass']);</p><p> if (empty(self::$$link))</p><p><b> {</b></p><p> throw new Exception(mysql_error(), 10);</p><p>&
104、lt;b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if (mysql_get_server_info() > '4.1')</p><p><b> {</b&
105、gt;</p><p> $charset = str_replace('-', '', strtolower($GLOBALS['database']['db_charset']));</p><p> mysql_query("SET character_set_connection=" .<
106、/p><p> $charset . ", character_set_results=" . $charset . ", character_set_client=binary");</p><p><b> }</b></p><p> if (mysql_get_server_info() >
107、; '5.0')</p><p><b> {</b></p><p> mysql_query("SET sql_mode=''");</p><p><b> }</b></p><p> if (@mysql_select_db($G
108、LOBALS['database']['db_name']) === false)</p><p><b> {</b></p><p> throw new Exception(mysql_error(), 11);</p><p><b> }</b></p><
109、;p><b> }</b></p><p><b> }</b></p><p> catch (Exception $e)</p><p><b> {</b></p><p> if (!defined('DEBUG_LEVEL') || !
110、DEBUG_LEVEL)</p><p><b> {</b></p><p> if ($e->getCode() == 10)</p><p><b> {</b></p><p> echo '數(shù)據(jù)庫連接失敗,可能是數(shù)據(jù)庫服務器地址、賬號或密碼錯誤';</p
111、><p><b> }</b></p><p> elseif($e->getCode() == 11)</p><p><b> {</b></p><p> echo '數(shù)據(jù)庫' . $GLOBALS['database']['db_name
112、39;] . '不存在';</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> echo 'Can\'t connect to MySQL server
113、';</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> echo $e->getM
114、essage(), '<br/>', '<pre>', $e->getTraceAsString(), '</pre>';</p><p><b> }</b></p><p> self::log($e->getMessage(),'初始化');<
115、;/p><p><b> exit;</b></p><p><b> }</b></p><p><b> }</b></p><p> return self::$$link;</p><p> 經(jīng)過此步驟,與數(shù)據(jù)庫連接上之后,就是將搜索的范圍
116、確定到數(shù)據(jù)庫中具體的表中的了,在此我們選擇搜索的表為wzdq_site_search表,為了保險起見,先判斷有無此表,如果沒有先創(chuàng)建該表,以免在沒有搜索到相關內(nèi)容時無內(nèi)容提醒,然后就是動態(tài)獲取用戶在搜索框中輸入的內(nèi)容,利用SQL查數(shù)據(jù)庫表中的字段,進行匹配,并將其輸出,具體代碼如下:</p><p> if( !file_exists($lock_data) || date('Ymd', tim
117、e()) > date('Ymd', filemtime($lock_data)) )</p><p><b> {</b></p><p> //函數(shù)設置與客戶機斷開是否會終止腳本的執(zhí)行,true:則忽略與用戶的斷開,false:會導致腳本停止運行,未設置該參數(shù),直接返回當前的設置</p><p> ignore_
118、user_abort(true);</p><p> set_time_limit(3600);</p><p> file_put_contents($update_lock_file, time());</p><p> $create_info = 'CREATE TABLE IF NOT EXISTS `wzdq_site_search` (&
119、lt;/p><p> `id` int(11) NOT NULL,</p><p> `displayorder` INT NOT NULL ,</p><p> `pinyin` VARCHAR( 255 ) NOT NULL ,</p><p> `name` VARCHAR( 255 ) NOT NULL ,</p>
120、<p> `url` VARCHAR( 255 ) NOT NULL ,</p><p> PRIMARY KEY (`id`),</p><p> KEY `displayorder` (`displayorder`)</p><p> ) ENGINE = MYISAM CHARACTER SET gbk COLLATE gbk_chines
121、e_ci;</p><p><b> ';</b></p><p> app_db::query( $create_info );</p><p> app_db::query( ' TRUNCATE TABLE `wzdq_site_search` ' );</p><p> $sql
122、 = "SELECT `id`, `displayorder`, `name`, `url` FROM `wzdq_site` order by `displayorder` ";</p><p> app_db::query($sql);</p><p> $list = app_db::fetch_all();</p><p> for
123、each ($list as $row)</p><p><b> {</b></p><p> if($row['name'] === 'NULL')</p><p><b> {</b></p><p><b> continue;</b&
124、gt;</p><p><b> }</b></p><p> //漢字轉拼音似乎出問題了,先轉utf-8吧,然后在用utf-8的調(diào)用參數(shù)</p><p> $name = iconv('gbk', 'utf-8', $row['name']);</p><p>
125、$pys = mod_pinyin::get($name, 'utf-8');</p><p> $pinyin = $pys['py'].' '.$pys['pinyin'];</p><p> $name = addslashes( $row['name'] );</p><p>
126、; $url = addslashes( $row['url'] );</p><p> app_db::query(" Insert into `wzdq_site_search`(`id`, `displayorder`, `pinyin`, `name`, `url`) Values('{$row['id']}', '{$row[
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 動態(tài)網(wǎng)頁課程設計
- jsp課程設計《動態(tài)網(wǎng)頁設計》
- php+mysql網(wǎng)上購物系統(tǒng)畢業(yè)設計
- php+mysql網(wǎng)上購物系統(tǒng)畢業(yè)設計
- 基于php+mysql技術bbs論壇畢業(yè)設計
- php+mysql學生成績查詢(系統(tǒng))
- 基于php+mysql技術bbs論壇畢業(yè)設計
- php+mysql學生成績查詢
- 基于PHP+MySQL的電商平臺系統(tǒng)的設計與實現(xiàn).pdf
- 基于PHP+MySQL的電子商務系統(tǒng)的設計與實現(xiàn).pdf
- 基于php+mysql的惠賺金融的設計與實現(xiàn)
- 基于php+mysql的寵貝網(wǎng)的設計與實現(xiàn)
- 基于php+mysql的眾籌平臺的設計與實現(xiàn)
- php+mysql學生成績查詢
- 基于PHP+MySQL的寵貝網(wǎng)的設計與實現(xiàn).doc
- 畢業(yè)論文--php+mysql人才招聘管理系統(tǒng)
- 畢業(yè)論文---基于php+mysql的新聞發(fā)布系統(tǒng)的設計與實現(xiàn)
- 畢業(yè)論文-基于php+mysql的學生選課系統(tǒng)的設計與實現(xiàn)
- 基于PHP+MySQL的惠賺金融的設計與實現(xiàn).doc
- 基于PHP+MySQL的眾籌平臺的設計與實現(xiàn).doc
評論
0/150
提交評論