陳道琳
(武漢鐵路局 襄陽供電段,湖北 襄陽441001)
當前電子辦公在企業的應用熱浪滔天, 在基層站段的管理體制中,引入一種利用信息平臺來提升各級部門間信息交互的效率、節省辦公成本、加速標準化管理進程的電子辦公機制是一種促進管理的有效嘗試。
本文對用PHP 和MySQL 兩種開源軟件來實現B/S 結構的信息交互系統展開論述。
本系統以Web 為載體, 允許單位內的各個部門 (通常是管理部門)發布信息,該信息可公開,也可只由指定的部門查看,還可以由相關部門對信息作出反饋,實現辦公中的信息交互,便于各種信息的備案。
(1)信息錄入。 滿足發布信息的部門和反饋信息的部門錄入自己的信息。
(2)存取控制。對訪問者的身份進行識別,為用戶提供與他們的身份相符的存取權限。
(3)用戶管理。 對系統中的用戶信息和相關的權限進行管理。
(4)信息管理。 對已錄入的信息(包括反饋信息)進行管理。
(1)查找。 允許用戶按標題或信息內容查找他們想查看的歷史信息。
(2)指定反饋對象。 允許信息發布者對他們發布的信息專門指定應該作出反饋的部門。
(3)郵件通知。當指定反饋對象后,可以向指定應作出反饋的部門發出相關的提示郵件,通知用戶應該對某個特定的信息作出反饋了。
(4)列表滾動顯示尚未反饋完全的信息和尚未反饋信息的部門。
本系統基于B/S 結構,主要的事務邏輯放在服務器上實現。 采用PHP 作為開發語言,用MySQL 作為后臺數據庫。
PHP 是一種服務器端的HTML 嵌入式腳本語言, 它類似于ASP,然而它的不同之處在于PHP 的開放源碼和跨平臺特性。 PHP 語言類似于C 和Perl,具有強大的數據庫操作功能,它還提供了面向對象特性,為快速開發和軟件復用提供了很好的支持。
MySQL 是一個多用戶、多線程、跨平臺、開源的SQL 數據庫服務器。與其它大型的數據庫如Oracle、DB2、SQL Server 相比,MySQL 自有它的不足之處,如規模小,功能有限,但這絲毫也沒有減少它受歡迎的程度,因為MySQL 的主要目標是快速、健壯和易用。
本系統使用PHP 4.4.0 和MySQL 4.0.28 作為開發工具,理論上可以在任何支持PHP 和MySQL 的平臺上運行, 這里我們在Windows 2000 Server 和Linux 上都做過測試,運行狀態良好。
本系統分為前臺用戶端和后臺管理端。 系統結構圖如圖1 所示。

圖1
前臺用戶端主要顯示已發布的信息列表,能為用戶提供按類型顯示已公布的信息的選擇操作,對尚未反饋完的信息和尚未反饋的部門滾動顯示。 后臺管理端由管理員和信息的發布者使用,管理員和信息發布者擁有不同的權限, 信息發布者可以發布并修改自己發布的信息,還可以指定應作出反饋的部門;管理員還另外擁有用戶及部門管理的權限。
根據2.1 中對系統結構的分析可知,整個系統需要存儲的數據分為信息(包括反饋信息)數據、部門數據和用戶數據三類。 其ER 圖如圖2。

圖2
圖2 中的ER 圖并不是整個系統的完整的實體聯系模型描述,因為關于用戶信息的存儲我們會用到php_lib_login (一個PHP 庫) 庫提供的關于用戶信息,其中部門實體的登錄名會和php_lib_login 庫中的用戶名關聯,形成外部鍵。
根據2.2 中對數據庫邏輯結構的分析,可知在MySQL 數據庫中我們需要建立能存儲信息及其反饋信息、指定反饋記錄、部門信息相關的表項,幾個主要表的結構如下:
(1)maintext /* 信息記錄*/
{
id varbinary, type tinyint, allow tinyint, time varbinary, ipaddr varbinary, plant tinyint, content blob
}
(2)slavetext /* 反饋信息記錄*/
{
slaveid varbinary, id varbinary, plant tinyint, time varbinary,ipaddr varbinary, content blob
}
(3)plants /* 部門信息記錄*/
{
sid tinyint, sname varbinary, pid tinyint, pname varbinary,loginuser varbinay, inuse tinyint default 1, priviledge tinyint
}
(4)feedback /* 指定反饋的記錄*/
{
id varbinary, dept tinyint, plant tinyint, send tinyint default 0,back tinyint default 0
}
本系統程序的幾個主要代碼片斷如下:
(1)全局變量
需要被多個PHP 腳本共同使用的變量和常會被修改的變量放在config.php 文件中,幾個主要的變量如下:
$database /* 數據庫名*/
$title_page /* 每頁顯示的信息標題數*/
$login_space /* 用戶登錄后的最大的睡眠時間*/
$lenmax /* 信息內容的最大長度*/
$echomax /* 反饋信息內容的最大長度*/
$mailhost /* 郵件服務器地址*/
(2)身份識別
通過獲取遠程訪問者的IP 地址,將這個IP 地址與系統中允許訪問的IP 地址作比較,便能得知遠程訪問者是否在許可的范圍以內。 代碼片斷如下:
$ips = get_allow_ip( ); //返回允許訪問的IP 地址列表
$allow = check_ip($_SERVER[‘REMOTE_ADDR’], $ips);
(3)用戶登錄及部門權限
用戶登錄不只是驗證用戶名和口令,還包括對已登錄用戶進行記帳、對用戶登錄失敗的次數的統計、對特定地址上的用戶的禁止等操作。 PHP 另一個流行的原因是有很多高質量的免費的開源的PHP 庫供我們使用,php_lib_login 就是這樣一個包含了登錄用戶的許多特性的PHP 庫。 使用php_lib_login 來實現用戶登錄的驗證非常簡單,只需調用一個php_lib_login 庫函數即可:
lib_login_show_login_form($error);
當用戶登錄后,繼續調用php_lib_login 的一個庫函數:
$user = lib_login_protect_page( );
即可獲取當前已登錄用戶的用戶名并賦值給變量$user, 然后將$user 與plants 表中的loginuser 字段相關聯即可獲取當前登錄用戶所屬部門的權限。
(4)發布信息與反饋
實現發布信息與反饋時要注意兩點:
①當用戶提交時要對
②對正要錄入的信息和反饋的信息進行檢查,不能讓用戶輸入附帶有PHP 腳本的內容,因為這可能會對系統造成毀滅性破壞。 我們通過PHP 提供的strip_tags( )函數來剝離其中的PHP 標簽后再將信息插入數據庫。
(5)郵件發送
每個部門對應的電子郵件地址存儲在php_lib_login 庫的tbl_users 表中,我們可從中獲取我們需要的郵件地址。
類似于php_lib_login, 我們通過引入一個第三方的PHP 庫——PHPMailer 來發送電子郵件通知被指定的部門對指定的信息作出反饋。 發送郵件的代碼片斷如下:
$mail = new PHPMailer; //建立一個新的PHPMailer 對象
$mail->IsSMTP( ); //使用SMTP 發送郵件
$mail->Host = $mailhost; //設置郵件服務器
$mail->Subject = $title; //設置郵件標題
$mail->IsHTML(true); //使用HTML 格式
$mail->Body = html_body( ); //設置郵件內容
$mail->send( ); //發送郵件
本系統在我們單位已經穩定運行了五個月,現在主要為安全管理部門發布在檢查工作中發現的關于安全問題的信息,并督令相關部門整改作出回應而使用。這是用信息手段改進傳統的安全檢查通報工作的一個有益的嘗試,簡化了作業流程,節約了辦公成本,提高了辦公效率。
[1]Luke Welling, Laura Thomson. PHP 與MySQL Web 開發權威指南[M].中國電力出版社,2002.
[2]Bryan Pfaffenberger, Bill Karow. HTML 4 實用大全[M].中國水利水電出版社,2001.