Drupal File System 檔案上傳的四個重要觀念

  • 4838
  • 0
  • 2011-02-12

[觀念一]Upload模組中並沒有檔案上傳的PHP程式碼,[觀念二]Drupal檔案系統模式分為Public和Private兩種,[觀念三]資料夾不會自動建立,[觀念四]不可刪除.htaccess檔

有網站接案經驗的人一定常聽到這樣的需求。

老闆說:“我要一個網站,不會太難就是要一個網站一些簡單的介紹。”

OS:”恩沒問題,用Drupal就可以很快的搞定。”

老闆又說:”喔對,希望有一個後臺讓我可以隨時修改、PO新聞。”

OS:”這很簡單,Drupal本來就有內建的內容管理介面。”

老闆再說:”還有還有,我希望新聞可以提供附件的功能,像XXX網站那樣,新聞的後面就可以下載附件。”

OS:”那就需要用到Drupal的Upload模組了。”

今天就來談談Drupal世界的檔案系統。

 

[觀念一]Upload模組中並沒有檔案上傳的PHP程式碼

Upload模組是Drupal的核心模組之一,主要功能是提供檔案上傳的介面。注意喔!提供的是介面。其檔案上傳功能是由Drupal File API提供,位置在Drupal網站資料夾中的include/file.inc。Upload模組的職責在運用Files API把檔案上傳介面實作出來。

Upload模組做的事情是在啟用Upload模組之後,當使用者擁有upload files權限時,在使用者呼叫的node中產生檔案上傳的表單(Form)

 

[觀念二]Drupal檔案系統模式分為Public和Private兩種

Public的檔案系統顧名思義就是Open的,任何人只要知道檔案的連結網址(URL)就可以下載檔案。在Public模式下,Drupal會一律把檔案上傳到Administer->Site configuration->File system裡面所設定的資料夾中(如圖一)。並在資料庫中持續追蹤檔案的URLs(如圖二)。

 

clip_image002

圖(一) Administer->Site configuration->File system 檔案將被上傳到這個資料夾

 

clip_image004

圖(二) Drupal資料庫中的files資料表,Url=example.com/[filepath]/[filename]

 

在Public模式下,使用者傳來一個檔案下載的請求時,將視為一個靜態的檔案直接由WEB SERVER透過HTTP協定傳送。不需執行額外的身分判斷等等PHP程式邏輯,因此網站效能會比較好。

Private檔案系統相對於Public模式,當使用者發出下載檔案的請求時,Drupal會對使用者的權限進行比對,提供較高的安全性。而這個安全性的代價則是Drupal要執行額外的比對工作、資料庫查詢,因此網站的效能會受影響。

 

[觀念三]資料夾不會自動建立

在Administer->Site configuration->File system設定檔案上傳的目的地資料夾時,要注意這個資料夾必須已經存在,並且PHP對此資料夾有writable的權限(在windows下就是資料夾沒有被設定成唯讀)。

 

[觀念四]不可刪除.htaccess

Drupal會自動在檔案上傳的目的地資料夾中產生一個.htaccess檔,這個檔案可以保護網站不被上傳或執行一些Apache已知的惡意程式。有興趣的讀者可以參考這篇http://forum.slime.com.tw/thread151945.html