PHP公告系統2.0版XD

2010/05/22修正:原本的檔案中在管理介面時,訊息管理的上一頁/下一頁會有問題,這次已經修正,請下載後更新admin.php(/)、display/get messageServer.php(PHP/)三個檔案即可

另外,PHP公告系統一定會改版,所以如果想看到最新的版本介紹(Skydrive上的檔案一定是放最新版的),請點選這個連結:https://kelunyang.wordpress.com/tag/php%E5%85%AC%E5%91%8A%E7%B3%BB%E7%B5%B1/

從半年前釋出之後,現在利用春假的時間完成了第一個修正版,這次的改動還蠻大的,不過由於修正的目的是要把model端鬆綁,這樣以後就可以隨意在任何一個SQL的DB下切換來源,然後因應想玩LDAP,所以把驗證機制也鬆綁,改成可以用任何一個設定好的方式作使用者驗證,所已花了將近一周再改寫XD

先提供一下基本資料

  • 程式名稱:PHP公告系統
  • 版本號:2.0
  • 釋出日期:2010/04/12

這一次主要更動都建立在PHP 5.2以上的版本,所以沒有PHP 5.2就不能執行,PHP 5.1目前測試得安裝pecl裡的json_encode和json_decode才能用(http://pecl.php.net/package/json),列表一下這次的變更XD

  • 使用PHP 5.1之後內建的PDO物件存取資料庫,這樣改寫MySQL就很簡單XD
  • 使用PHP 5.2之後內建的zip函式庫製作壓縮檔
  • 驗證模組獨立出來,所以可以由目前提供的LDAP、XML、SQLite、MySQL 選一種用 (暫時不支援MsSQL因為微軟給PDO的driver還在實驗狀態)
  • 資料模組獨立出來,能選的項目和上面的差不多
  • 修正了管理頁面
  • 子單位
  • 權限實作完成
  • 全域公告修正
  • 請特別注意,拜託拿IE7以上的瀏覽器去看管理頁面!雖然用IE6不會不能操作

測試主機在:http://www.nyko.com.tw/XMLBulletin/index.php
請自己去「註冊帳號」,不過註冊到的帳號是權限最低的那種,要使用完整版還是下載後安裝吧

要下載的人一樣請點這邊XD
image

跳轉後看開發心得XD

可能還有一些功能沒有實作,這部分等暑假再說

  • 公告有效日期(多數單位用不到)
  • 搜尋公告(XML搜尋效能不佳,可能不考慮)
  • 多國語言(等我翻譯好吧XD)

接著寫一下開發心得XD

  • SQLite

這一次開發使用SQLite是我第二次用SQLite,整體來說非常好用,比起兩年前那種一堆很不堪用的SQLite manger,Firefox外掛SQLite manager就好很多,他是一個firefox的外掛,所已裝好之後到https://addons.mozilla.org/zh-TW/firefox/addon/5817下載就可以用了,因為Firefox也是用sqlite當作資料庫,所以還蠻順暢的

SQLite並不適合負擔大量的存取,但是一般的網站和免費空間如果主機都裝到PHP 5.2以上,輕量的負擔下SQLite是很適合的,又可以省下一筆租資料庫的錢,只是SQLite檔案沒有密碼,要記得用.htaccess拒絕下載xd
image

  • PDO

這一次使用PDO物件還真的幫助開發不少,不過一開始得先摸熟PDO,他的語法像這樣:

$this->MessageObj = new PDO(“sqlite:".$path."/data/bulletin.sqlite");
$query = $this->MessageObj->prepare(“SELECT * FROM attachments WHERE messageid = :qs AND name = :rn");
$query->bindParam(“:qs",$this->serial,PDO::PARAM_INT);
$query->bindParam(“:rn",$filename,PDO::PARAM_STR);
$query->execute();
$fileq = $query->fetch(PDO::FETCH_OBJ);

然後就會拿到一個用欄位當作屬性的PHP物件,可以用力如$fileq->id來存取,整個就比過去用mysql函式簡單很多,而且不會整支程式都充滿MySQL專屬函式,另外他bind參數的時候可以宣告參數類型,這樣就能避免SQL Injection,同樣的語法(只要都是SQL),就把new PDO那段中宣告使用sqlite driver改成mysql****就會變成mysql了,只是一般主機預設是不打開PDO的MySQL驅動,要去php.ini裡面打開

  • 權限

這次設定了大概8種權限,從完全存取到只能發公告都有,而除了完全存取是所有人的集合之外,每一個權限都是分立的,所以一個人可以有只能發公告和調整系統變數兩種看起來很不一樣的權限XD

  • 鬆綁

哈哈不得不說我覺得寫這套公告系統對PHP功力提升有幫助,以下是本程式中的model class繼承關係XD
image
所以驗證的項目都交給Auth的子女們處理,而因為所有的model都繼承自己的父母(例如xmlMess繼承自mess),所以在Controller呼叫的時候一樣呼叫MessageClass->setMessage就好了,簡單又愉快XD

為了達到比較好的繼承和寫作效率,所以程式裡所有的include都改用程式的根目錄為基準,而在不同的頁面中利用dirname(__FILE__)就可以找到這個檔案所在的目錄,再用一次dirname問的話就會往上翻一層,於是就不會亂掉了

所以其實在系統執行中是可以切換Auth和Model的資料來源的,例如安裝時選好要用xml當資料庫,也可以切換到sqlite或未來其他的模組,但是考慮到這樣切換資料庫就等於被歸零了,不如重灌來的方便,所以沒有把切換功能作在管理介面裡

  • 管理頁面調整XD

調整成這樣:
image

看起來應該會清爽很多,不過這樣改的主要目的是如果某人權限不夠,載入模組時就會自動被拋棄XD

大概就這樣了,最後請注意,這個版本和上個版本資料庫schema差異頗大,如果你公告不多,請手動剪下/貼上內容重建會比較好,然後為了避免collision,用sqlite資料庫比較妥當XD

使用上有問題或建議歡迎回報囉~

廣告

8 thoughts on “PHP公告系統2.0版XD

  1. 你好:

    你所做的系統很好用,謝謝!

    有一個問題是,如何提高附加檔案的大小上限?
    似乎如果超過上限就傳不上去了?

    再次感謝!

  2. 您好,PHP預設的上傳檔案限制應該是8M或是更小
    您可以修改php.ini裡的post_max_size,把它改成小於2048M以下的任何一個你希望的值,應該就可以了
    喔對,最近發現了一個權限錯誤,如果不修正可以造成使用者可以自己提升自己的權限,建議您重新下載公告系統,之後將PHP/setaccountService.php蓋掉原本的檔案,這樣就可以避免這個錯誤

  3. hello 你好~
    我解壓縮後將XMLBulletin資料夾放在我AppServ\www資料夾下,打開firefox輸入http://localhost/XMLBulletin/index.php 後一直在跑空白網頁的狀態,圖如網址 http://i.imgur.com/WhMWx.png …想請問該如何才能使用呢?感謝!

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s