這篇只是當作 comment 用,因為我實在沒有邊 coding 邊寫 comment 的習慣。
狀況提要
幫某個團體架設的 ftp 站,以 pure-ftpd 管理,並使用 utf-8 編碼。但使用成員大多不熟悉 ftp client 使用,就算會用也因為編碼問題常常看到亂碼。
想法
於是上個週末用一個晚上試著寫寫看能不能利用 Web browser 實做 ftp 瀏覽 (read only) 的功能。我知道 Apache 有 Options Indexes 的功能,搭配基本的認證可以達到限定特定使用者存取,但因此法的帳號密碼會被瀏覽器 cache 住,且也無法登出,所以才想自行動手。
作法
先用 Perl (cgi like) 實做 file listing 與 directory traversal 的基本操作,再以 PHP session 檢查使用者是否已登入,決定是否開放頁面存取。
問題解決
- 使用 Apache mod_rewrite 蓋掉PHP內部的 get method sending,使瀏覽網址與實際使用 ftp 時所見目錄路徑一致。
- ftp 實際檔案位置不應放在網頁伺服器根路徑下,否則知道檔案路徑的人就能抓到檔案。下載檔案時使用 PHP readfile() 處理。但 readfile 遇到大檔案時有 buffer 限制,要注意一下。
- 承上,因為放不同路徑,所以檔案讀取權限要設定一下,讓 ftp 與 www server 能同時讀取檔案。(該伺服器架在 Fedora 上,設權限時其實遇到了些懸疑困難,我到現在還是不知道為什麼。後來是用有點 dirty 的方法解掉。)
- 避免未登入使用者得知Perl程式路徑而直接讀取,該 script 不放在 cgi-bin 目錄下,而是另外存放,以 PHP system() 呼叫。
改進
- 使用 Tinyurl 的服務,讓每個網頁、檔案都能取得縮址,方便到其他地方(BBS, …)貼上與團體內部分享。
- Perl script 部份有空應該改用 Apache mod_perl 處理。
- 有時間再加個上傳功能吧,但上面提到的檔案權限問題其實有點棘手。
後記
早知道這篇寫得那麼落落長,我當初就應該乖乖地寫 comment…
Screenshot:
Pingback: Slim Browser 5.00.073 | AboutBrowsers.info