今天為了WGM的專案裡的檔案功能問題傷透了腦筋, 為什麼呢!?
因為在一般做法, 上傳只是單純在表單Post以後, 程式接收開始處理, 完成後再進行相關的檔案搬移及管理, 再存入關聯資料來連結住檔案(或是放入DB也行), 但是目前遇到了一個極大的問題, 其中為了讓表單更現代化也是其中之一, 最主要的問題發生在, 當有使用者上傳了50MB或100MB的檔案時, 怎麼辦呢?? 就算把MaxUpload開放, 如果不在區域網本地端上傳, 一個80M的檔案會傳到天荒地老, 並等待伺服器回應, 這時...AJAX就很重要了..!!!

接下來, 當然就會想到用進度條來做好了, 目前在xAjax或jQuery上, 都是輕而易舉的, 但是, 問題來了, 本人使用的AJAX技術是源自於andot兄的PHPRPC, 主要是為了主程式輕盈短小, 又可以完全自己Code我要的function, 但是在檔案傳輸上, 因為JS無法取得使用者端電腦資訊, 所以似乎變得不可行, 在訪問了許多資料及PHPRPC愛好者(QQ群: 4927045), 發現只有一位王總曾使用PHPRPC + Flash完全了此項作業, 慘!! 我最不想碰的就是AS, 所以....只能另找他法了!!!

首先找到的是在PHP 4.x時使用的UploadProgressMeter (Google Search), 但是找到的資料說明非常不完全, 而且可供下傳的都是使用PHP 4.x Patch的方式, 我所有的主機都已經使用了PHP 5.2以上了, 後來也提到要安裝HTML_AJAX :

If you want to use the code you need to:
Install HTML_AJAX (pear install HTML_AJAX-alpha)
Download PAFUPMU and install it somewhere accessible.
Add the code to your page using demo.php as an example.

這樣又變得非常之不方便, 所以...我就開始找尋其它資料, 居然被本人發現到, 在PHP 5.2.x後, 已經被納入標準擴充模組了, 這個消息真的是很大快人心, 所以當下開始尋找資料...好了...讓我們開始實現這個作法吧!!!

Step 1:
首先, 要先安裝pear(PHP Extension and Application Repository), 也就是PHP延伸及擴充程式庫, 安裝的方式非常容易, 本人採用Lynx瀏覽器方式來安裝
先安裝Lynx
# yum install lynx

接下來安裝Pear
# lynx -source http://pear.php.net/go-pear | php

安裝時會有數個詢問項, 如果您熟悉安裝資訊及路徑, 您可以依需求自行變更, 如果不清楚, 請全部直接按Enter跳過即可!! 安裝完成後即可開始使用 pear擴充指令來安裝相關的PECL安裝包!!!
相關文件可查詢官方網站 : http://pecl.php.net/index.php

接下來直接安裝由Pear封裝的UploadProgress的擴充套件!!!
PECL : UploadProgress Package (http://pecl.php.net/package/uploadprogress)

指令 Example:
# pear install 檔案包本機位址檔案包網路路徑

ps. 如果您是由5.1.6升級成5.2.4時, 請注意, 因為RPM的DB資料還是舊有的PHP 5.1.6的記錄,  即使使用了 rpmdb -rebuild 重建也無效, 所以還是會造成PHP版本不符而無法升級擴充套件, 可能是因為RPM包沒有移除就直接用編譯方式安裝所致, 本人實在不太敢強制移除RPM包資料, 所以我改用以下指令來強制安裝!!!

# pear install -f 檔案包本機位址檔案包網路路徑

經過測試, 運作正常, 且phpinfo(); 及程式顯示都正常, 即然正常, 那就不要去動他了, 等待高手教學吧..= =" 

ps. 請注意Document有註明

DescriptionPHP 5.2 is needed


如果您的PHP版本未達5.2(含)或以上時, 請您進行升級至5.2.x, 本人等下有空再補寫一篇由PHP 5.1.6升級至5.2.4的文件記錄下來, 以免遺忘, 為什麼呢...因為FC5預設就是PHP 5.1.6, 我是用FC7所以沒有問題, FC5的使用者就很需要的, 其它的PHP 4.x --> PHP 5.2.x資料就一堆了, 所以不需要再提供了..^^

請參考: PHP 5.1.6 升級至 PHP 5.2.4 實作手記

安裝完成後, 打開您伺服器上的php_info(); 來看, 您就會看到您的PHP已經支援了UploadProgress進度條的支援了, 至於如何使用進度條的範例, 將會在下一篇上說明, 請大家多多利用!!!

架設環境:
OS: Linux Fedora Core 7 i386
PHP: PHP 5.2.4