(中海油能源發(fā)展股份有限公司 工程技術(shù)分公司, 天津300452)
由于海上油田生產(chǎn)環(huán)境的特殊性,現(xiàn)場工作人員需長期在遠離陸地的海上平臺工作,并且現(xiàn)場及陸地需要電氣、儀表、機械、安全等各專業(yè)人員協(xié)同作業(yè)。目前,各專業(yè)工作人員與陸地管理人員的日常工作溝通只能依靠電話或郵件完成,不能實現(xiàn)在同一網(wǎng)絡(luò)平臺上的即時溝通,降低了工作時效,因此有必要基于MySQL數(shù)據(jù)庫和計算機網(wǎng)絡(luò)架設(shè)一個海上油田網(wǎng)絡(luò)論壇,在確保信息安全的同時,為海上平臺各專業(yè)協(xié)同工作和問題溝通提供開放、便捷、及時的交流環(huán)境。網(wǎng)絡(luò)論壇是互聯(lián)網(wǎng)上的一種電子信息服務(wù)系統(tǒng),它提供一塊公共的電子白板,每個用戶都可以在其中發(fā)布信息或提出看法。像日常生活中的黑板報一樣,網(wǎng)絡(luò)論壇按不同的主題分成很多個布告欄,使用者可以閱讀他人關(guān)于某個主題的最新看法,也可以將自己的想法毫無保留地貼到公告欄中。海上油田網(wǎng)絡(luò)論壇就是一個基于數(shù)據(jù)庫和互聯(lián)網(wǎng)技術(shù)構(gòu)建的用于海上油田與陸地日常工作和技術(shù)問題交流的網(wǎng)絡(luò)平臺。其軟件結(jié)構(gòu)形式就是基于數(shù)據(jù)庫技術(shù)構(gòu)建的一套具有交互功能的動態(tài)網(wǎng)頁系統(tǒng)。目前,制作動態(tài)網(wǎng)頁的主流技術(shù)有很多,如ASP、PHP、JSP等。本文主要介紹在Windows系統(tǒng)和Apache服務(wù)器環(huán)境下利用HTML語言、PHP技術(shù)和MySQL數(shù)據(jù)庫進行海上油田網(wǎng)絡(luò)論壇的設(shè)計以及快速搭建。
論壇的設(shè)計環(huán)境在Windows操作系統(tǒng)下搭建,采用Apache服務(wù)器作HTTP服務(wù)器[1],花生殼軟件作動態(tài)IP域名解析,域名主要為網(wǎng)上瀏覽作準備。論壇使用MySQL數(shù)據(jù)庫作后臺支持,使用phpMyAdmin軟件作MySQL數(shù)據(jù)庫的管理工具[2],使用FrontPage和Dreamweaver軟件作論壇的HTML頁面設(shè)計,使用UltraEdit軟件作PHP程序編寫[3],接著規(guī)劃并設(shè)計海上油田生產(chǎn)工作的相關(guān)討論版塊,最終完成海上油田生產(chǎn)工作論壇的設(shè)計,在整體優(yōu)化后,測試論壇并投入使用。
開發(fā)工具的具體信息如下:(1) PHP。一種在服務(wù)器端執(zhí)行的嵌入HTML文檔的腳本語言,版本號:5.1.2。(2)MySQL。一個數(shù)據(jù)庫服務(wù)器軟件,版本號:5.0.19。(3)Apache。一個HTTP服務(wù)器軟件,版本號:2.0.55。(4)花生殼。一套集桌面式域名管理與動態(tài)域名解析等功能為一體的客戶端軟件,版本號:3.5。(5)phpMyAdmin。用于管理整個MySQL服務(wù)器,也可以管理單個數(shù)據(jù)庫,版本號:2.8.0.1。(6)FrontPage。一款網(wǎng)頁設(shè)計軟件,版本號:2003。(7)Dreamweaver。一款網(wǎng)頁設(shè)計軟件,版本號:8.0。(8)UltraEdit。一個文本編輯器,可以直接編輯十六進制文件,版本號:12.00a。
圖1 論壇系統(tǒng)的基本結(jié)構(gòu)框圖
目前流行的網(wǎng)站構(gòu)架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作為操作系統(tǒng),Apache作為Web服務(wù)器,MySQL作為數(shù)據(jù)庫,PHP作為服務(wù)器端腳本解釋器。這4個軟件都遵循GPL的開放源碼軟件,使用這種方式可建立一個穩(wěn)定的網(wǎng)站系統(tǒng)。需注意的是,論壇在設(shè)計之初須在計算機中安裝并配置一個設(shè)計環(huán)境。在硬件方面僅需1臺計算機,普通辦公計算機的硬件配置即可滿足要求,但必須能夠接入公司網(wǎng)絡(luò)。由于Windows系統(tǒng)更易于日常操作,因此本次設(shè)計在Windows+Apache+PHP+MySQL環(huán)境下完成。
分析海上油田作業(yè)人員的需求,將網(wǎng)絡(luò)論壇分為用戶管理、信息展示、編輯操作、數(shù)據(jù)統(tǒng)計等4個功能模塊。圖1為論壇系統(tǒng)的基本結(jié)構(gòu)框圖。
(1) 用戶管理模塊。針對海上油田生產(chǎn)作業(yè)人員的組織架構(gòu),將用戶管理模塊分為用戶注冊、登錄、注銷、在線狀態(tài)等4個基本功能,可在論壇首頁上查看人員在線或離線狀態(tài)。注冊信息包括姓名、職務(wù)崗位、所屬專業(yè)、辦公室、房間號、辦公電話、郵箱等。注冊信息示例如表1所示。
表1 注冊信息示例
(2) 信息展示模塊。主要由單井作業(yè)項目、專業(yè)技術(shù)討論、日常生產(chǎn)交流等3個子板塊構(gòu)成。單井作業(yè)項目板塊以井號劃分子板塊,每個單井子版塊包括鉆完井、修井、措施作業(yè)等3個主題。當作業(yè)項目開始時,項目負責人可在該主題下發(fā)布相關(guān)作業(yè)信息,并將與該作業(yè)相關(guān)的專業(yè)人員列入此主題下的討論組中,當此主題下有新消息發(fā)布時,直接在組內(nèi)成員的論壇頁面中發(fā)出新消息提醒,組內(nèi)成員可直接點擊消息進入該主題進行交流。專業(yè)技術(shù)討論板塊主要以各專業(yè)劃分板塊,包括安全、電氣、儀表、機械、工藝流程、生產(chǎn)。各專業(yè)技術(shù)人員可針對日常工作中遇到的專業(yè)技術(shù)問題自由發(fā)布主題進行討論交流,也可將一些專業(yè)知識文檔上傳到此板塊供大家學(xué)習(xí)。日常生產(chǎn)交流板塊是以平臺為單位建立的工作板塊,所有與該平臺生產(chǎn)生活相關(guān)的工作人員都可在此板塊發(fā)布信息。該板塊主要用于發(fā)布一些通知公告、日常工作安排等信息,幫助油田管理者與各專業(yè)人員在日常生產(chǎn)生活中及時有效地溝通。
(3) 編輯操作模塊。主要為所有論壇用戶提供信息查詢、發(fā)布、編輯修改等功能。在信息發(fā)布功能中還包括文檔、圖片、網(wǎng)址鏈接、郵箱鏈接等信息的上傳發(fā)布。
(4) 數(shù)據(jù)統(tǒng)計模塊。主要利用MySQL數(shù)據(jù)庫對論壇用戶信息、發(fā)布的信息提供存儲和查詢功能。
本論壇設(shè)計共編寫17個網(wǎng)頁文件,其中3個為html文件、14個為php文件。具體功能界面設(shè)計如下:
(1) 論壇界面。采用框架頁方式進行設(shè)計。首頁左側(cè)為目錄窗口,嵌入mulu.php文件,顯示用戶登錄狀態(tài)、論壇版塊和功能選項等。論壇主版塊按海上油田生產(chǎn)工作類別分為單井作業(yè)項目、專業(yè)技術(shù)討論、日常生產(chǎn)交流,其中單井作業(yè)項目板塊包括鉆完井、修井、措施作業(yè)等3個主題,專業(yè)技術(shù)討論板塊包括安全、電氣、儀表、機械、工藝流程和生產(chǎn)等6個主題。右側(cè)為瀏覽窗口,嵌入window.php文件顯示左側(cè)目錄的相應(yīng)內(nèi)容。
(2) 會員功能。會員功能包括用戶的注冊、登錄、離開等。會員功能文件信息如表2所示。
表2 會員功能文件信息
(3) 用戶登錄狀態(tài)顯示。用戶登錄狀態(tài)將在目錄頁中顯示。
(4) 論壇數(shù)據(jù)統(tǒng)計。包括注冊用戶資料統(tǒng)計、帖子數(shù)量統(tǒng)計等。論壇數(shù)據(jù)統(tǒng)計文件為#php。
(5) 分類版塊顯示模塊。包括論壇的版塊類別(mulu.php)、版塊中的帖子主題顯示(bantitle.php)、主題下的帖子內(nèi)容顯示(index.php)。
(6) 發(fā)帖、回復(fù)、修改。各功能文件信息如表3所示。
表3 發(fā)貼、回復(fù)、修改功能文件信息
(7) 論壇版權(quán)信息。顯示論壇的版本及版權(quán)信息,包括論壇管理員的聯(lián)系方式等。一個功能強大的論壇,不但需擁有一般論壇所應(yīng)具有的基本功能,而且還應(yīng)擴展一些輔助功能,如自定義風格界面、設(shè)立發(fā)帖積分等。
圖2 論壇系統(tǒng)與數(shù)據(jù)庫和服務(wù)器之間的關(guān)系圖
論壇將存儲大量的文字信息,數(shù)據(jù)庫建設(shè)也是論壇設(shè)計的重點。論壇所有的資源可被有秩序地分類存儲在數(shù)據(jù)庫中,以便隨時調(diào)用。通過數(shù)據(jù)庫可有效管理論壇數(shù)據(jù),方便進行數(shù)據(jù)的寫入與讀取,并且能夠提高數(shù)據(jù)的讀寫效率。用戶注冊和發(fā)表帖子是對數(shù)據(jù)庫資料進行寫入和修改操作,登錄和瀏覽帖子是對數(shù)據(jù)庫資料進行查詢和讀取操作。論壇系統(tǒng)與數(shù)據(jù)庫和服務(wù)器之間的具體關(guān)系如圖2所示。本論壇采用MySQL數(shù)據(jù)庫作支持。
圖3 PhpMyadmin的主界面
論壇數(shù)據(jù)庫設(shè)計可使用用戶數(shù)據(jù)表“user”和帖子數(shù)據(jù)表“gbook”完成。使用phpMyAdmin可便捷地建立所需數(shù)據(jù)庫和數(shù)據(jù)表,其步驟是:在瀏覽器中輸入“http://localhost/phpmyadmin/”進入phpMyAdmin的主界面,如圖3所示;在“創(chuàng)建一個新的數(shù)據(jù)庫”下方空格輸入所需創(chuàng)建的數(shù)據(jù)庫名字,點擊創(chuàng)建按扭,本論壇創(chuàng)建一個名為“data”的數(shù)據(jù)庫;點擊左側(cè)目錄欄中剛創(chuàng)建的數(shù)據(jù)庫,繼續(xù)創(chuàng)建數(shù)據(jù)表,在創(chuàng)建表的輸入框中輸入表的名稱和“Number of fields”字段數(shù)目即可創(chuàng)建一個新表,本論壇一共創(chuàng)建兩個數(shù)據(jù)表,分別是“user”表和“gbook”表;創(chuàng)建數(shù)據(jù)表后,還需為每個字段設(shè)置其所記錄數(shù)據(jù)的類型、長度、屬性等。
“user”表用于記錄注冊用戶的資料,包含10個字段。表4為“user”表的各字段名稱、類型、長度和功能。
表4 user表字段屬性
“gbook”表用于記錄論壇帖子的數(shù)據(jù),包含10個字段。表5為“gbook”表的各字段名稱、類型、長度和功能。
表5 gbook表字段屬性
兩個表中的“id”字段的額外設(shè)置均為“auto_increment”,表示自增。字段類型有容量不同的“INT”整數(shù)型、“VARCHAR”字符串型、“TEXT”文本型、“DATETIME”日期時間型等。至此,論壇數(shù)據(jù)庫建立完成。
圖4 論壇首頁
2.4.1 論壇首頁設(shè)計
論壇首頁index.htm文件采用框架頁設(shè)計,并放置在網(wǎng)站根目錄下,其他文件全部放置在網(wǎng)站根目錄的“gb”文件夾內(nèi)。論壇首頁的左側(cè)嵌入目錄頁,即mulu.php文件,目錄頁顯示論壇各版塊及各功能頁面的鏈接,并且使用Cookie技術(shù)在目錄頁中顯示用戶的登錄狀態(tài)。首頁界面設(shè)計如圖4所示。
瀏覽器與Web服務(wù)器之間使用HTTP協(xié)議進行通信,當某個用戶發(fā)出頁面請求時,Web服務(wù)器只進行簡單響應(yīng),然后關(guān)閉與該用戶的連接。 當一個請求發(fā)送到Web服務(wù)器時,無論其是否是第一次來訪,服務(wù)器都會將其當作第一次來訪對待。為了彌補這個缺陷,Netscape開發(fā)了Cookie工具保存某個用戶的識別信息。Cookie是一種Web服務(wù)器通過瀏覽器在訪問者的硬盤上存儲信息的手段[4]。Netscape Navigator使用一個名為cookies.txt的本地文件保存從所有站點接收的Cookie信息;IE瀏覽器把Cookie信息保存在 “C:windowscookies”目錄下。當用戶再次訪問某個站點時,服務(wù)端將要求瀏覽器查找并返回先前發(fā)送的Cookie信息,以識別這個用戶。Cookie給網(wǎng)站和用戶帶來的便利很多:
(1) Cookie能使站點跟蹤特定訪問者的訪問次數(shù)、最后訪問時間以及訪問者進入站點的路徑。
(2) Cookie能告訴在線廣告商廣告被點擊的次數(shù),從而可以更精確地投放廣告。
(3) Cookie有效期限未到時,Cookie能使用戶在不鍵入密碼和用戶名的情況下進入曾經(jīng)瀏覽過的一些站點。
(4) Cookie能幫助站點統(tǒng)計用戶個人資料以實現(xiàn)各種各樣的個性化服務(wù)。
在PHP中使用“setcookie(‘ncookie’,"$name")”函數(shù)可將登錄的用戶名設(shè)置成名為ncookie的Cookie,這樣在需要用到Cookie的頁面中使用“$ncookie=$_cookie[‘ncookie’]”便可調(diào)用已被設(shè)置的Cookie。
論壇首頁的右側(cè)嵌入瀏覽窗口頁window.php,其中包含論壇登錄頁面welcome.htm和論壇帖子主題頁面bantitle.php,頁面嵌套采用require()函數(shù)實現(xiàn)。
2.4.2 用戶注冊頁面設(shè)計
用戶的注冊需要兩個文件實現(xiàn),即注冊頁面和執(zhí)行頁面。注冊頁面是一個HTML表單頁面,命名為zhuce.htm,表單主要包括:姓名、密碼、性別、QQ或MSN、Email。HTML表單語句是,所有表單語句都需放在這之間[5];例如:
所有表單內(nèi)容被傳遞到zhuceinput.php文件中進行處理。zhuceinput.php文件需對表單內(nèi)容的字符長度、用戶名是否被注冊、密碼輸入是否一致等作判斷。判斷字符串長度需使用計算字符串長度的函數(shù)strlen()和if…else語句;判斷用戶名是否被注冊需查詢數(shù)據(jù)庫的“user”表中的“name”字段,并使用while循環(huán)語句進行逐項查詢。當用戶輸入內(nèi)容無誤時,將資料寫入數(shù)據(jù)庫的“user”表中,其中包括非輸入內(nèi)容,如注冊IP和注冊時間等信息。由于以后將有很多文件需要查詢和寫入數(shù)據(jù)庫,因此可將連接數(shù)據(jù)庫的程序?qū)懭?個php文件,即連接數(shù)據(jù)庫的頭文件,命名為db_data.inc.php,方便以后直接在程序中調(diào)用。
2.4.3 用戶登錄頁面設(shè)計
用戶登錄頁面文件被命名為welcome.htm,其主要內(nèi)容為一個輸入用戶名和密碼的表單,登錄頁面被包含在論壇首頁中。用戶所輸入的用戶名和密碼將被傳遞到denglu.php文件中作處理。denglu.php文件需對用戶名是否已經(jīng)登錄、用戶名是否是已注冊用戶和密碼輸入是否正確作判斷。這里仍需使用if…else語句和while語句,并且需查詢“user”表中的“name”字段,在檢查用戶名是否已經(jīng)登錄時需檢查Cookie是否存在。如果用戶登錄成功則需設(shè)定Cookie值,并刷新左側(cè)目錄頁以顯示剛剛登陸的用戶名的在線狀態(tài),用“”實現(xiàn),該刷新語句并不是PHP語言,其中contents為將被自動刷新的框架頁名稱。
2.4.4 用戶注銷處理
當正在登錄狀態(tài)的用戶點擊離開論壇時,論壇需對用戶做注銷處理,設(shè)計一個名為exit.php的文件。用戶點擊離開則鏈接到exit.php文件,只需要將Cookie的值清空并自動刷新目錄頁即可,清空Cookie用“setcookie(‘ncookie’)”實現(xiàn),其中ncookie為登錄時設(shè)置的Cookie名稱。
圖5 主題顯示界面
(1) 帖子主題顯示頁面設(shè)計。帖子主題顯示頁面文件被命名為bantitle.php,主要顯示:主題的標題、主題的作者、最后回復(fù)者、發(fā)表新帖的鏈接,并且實現(xiàn)最后發(fā)表的帖子和最新被回復(fù)帖子的置頂。與帖子有關(guān)的顯示內(nèi)容都從數(shù)據(jù)庫中的“gbook”表查詢。主題顯示界面如圖5所示。
(2) 帖子內(nèi)容顯示頁面設(shè)計。帖子內(nèi)容顯示頁面文件被命名為index.php,主要顯示:帖子標題、帖子的作者、回復(fù)帖子的鏈接。帖子的標題、內(nèi)容、作者信息都需從數(shù)據(jù)庫中的“gbook”表查詢,將回復(fù)的帖子和所回復(fù)的主題帖子內(nèi)容顯示在同一個頁面的實現(xiàn)方法:在回復(fù)帖子時,將所回復(fù)的主題帖子的“idp”字段內(nèi)容轉(zhuǎn)存入回復(fù)帖子的“titleid”字段,這樣只需查詢并顯示“idp”字段值和“titleid”值均為主題帖的“idp”字段的內(nèi)容即可。帖子還有修改功能,但只允許修改當前登錄用戶所寫的帖子,此時只需判斷Cookie 與帖子的“name”字段是否一致即可。
(1) 發(fā)表帖子和回復(fù)帖子頁面設(shè)計。發(fā)表帖子和回復(fù)帖子的頁面基本相同,首先判斷用戶是否登錄。頁面只需要兩個表單,即帖子主題和帖子內(nèi)容。兩個頁面的主要不同是發(fā)表帖子將“gbook”表中的“titleid”字段值設(shè)置為0,回復(fù)帖子將“titleid”字段設(shè)置為所回復(fù)主題的“idp”字段值。這樣就可以將“titleid”值作為查詢數(shù)據(jù)庫的依據(jù)以區(qū)別主題帖與回復(fù)帖。發(fā)表帖子文件被命名為liuyan.php,回復(fù)帖子文件被命名為huifu.php。
(2) 發(fā)表帖子和回復(fù)帖子處理程序設(shè)計。發(fā)表帖子和回復(fù)帖子均使用input.php文件,這個文件首先將傳遞來的“titleid”值寫入相應(yīng)帖子的“titleid”字段,然后通過“titleid”字段的值判斷帖子是發(fā)表的新主題帖還是回復(fù)帖,再作相應(yīng)處理。如果是發(fā)表的新帖子,主要將此帖的“id”字段值寫給“idp”字段保存。如果是回復(fù)的帖子,先將此帖的“id”字段值寫給“idp”字段保存,然后將此回復(fù)帖的“id”字段值加1后寫給所回復(fù)的主題帖子的“id”字段,這樣保證剛剛回復(fù)的主題帖子的“id”值最大,主題帖按照“id”字段值由大到小排列,解決回復(fù)后主題置頂?shù)膯栴}。
(3) 修改帖子的頁面及處理程序設(shè)計。修改帖子頁面也是一個表單頁面,只需將數(shù)據(jù)庫查詢出的信息設(shè)置為表單的初值,修改后提交,程序連接到修改處理程序,進行數(shù)據(jù)庫資料的修改。修改帖子頁面文件命名為xiugai.php,修改處理程序文件命名為xiugaiok.php。
海上油田網(wǎng)絡(luò)論壇設(shè)計為海洋石油平臺工作人員構(gòu)建了公司內(nèi)部的網(wǎng)絡(luò)信息交流平臺,在確保信息安全的同時實現(xiàn)了多用戶同時在線即時交流。在系統(tǒng)設(shè)計之初的環(huán)境搭建過程中,需注意軟件的正確設(shè)置,并且在編程過程中需隨時注意所用語句和語法的正確性,否則不但會降低程序執(zhí)行效率,而且會增加查錯難度。本論壇設(shè)計能夠?qū)崿F(xiàn)海上油田各專業(yè)人員的日常工作溝通所需的基本功能,包括用戶注冊、登錄、發(fā)帖、回帖、修改帖等。帖子回復(fù)置頂、用戶登陸認證等問題也通過程序得到了有效解決。用戶在此論壇上能夠找到與各自在海上油田生產(chǎn)工作相關(guān)的討論版塊,隨時進行問題討論。