2010-11-18 82 views
1

默認情況下,symfony將文件上傳到web/upload文件夾,這樣任何人都可以訪問它們。我需要檢查對文件的每個請求的用戶憑據。我應該怎麼做?使用symfony安全文件管理

回答

5

將您的上傳內容移到您的webroot之外,例如/ data/uploads。在這種情況下,你需要把這個在您的ProjectConfiguration文件:

sfConfig::set('sf_upload_dir' => sfConfig::get("sf_data_dir") . DIRECTORY_SEPARATOR . 'uploads'); 

前提是你總是用sf_upload_dir指定上傳文件夾,您所有的文件都將保存在這裏。

的解決方案的第二部分需要一個新的動作,即得到一個文件名,檢查用戶是否有權訪問它,並返回:

    經由
  • 要麼403錯誤
  • 或文件內容readfile(),設置正確的Content-Type和Content-Lenght標題後。
+0

如何在symfony中正確調用readfile()? – Dziamid 2010-11-18 20:03:45

+0

你把它稱爲任何其他功能 - 沒有「symfony」的方式來做到這一點。 – Maerlyn 2010-11-18 20:21:26

+0

我的意思是,它直接寫入輸出緩衝區,如果你只是簡單地調用它 - 那麼symfony將無法正確輸出標題。我是否必須用ob_start()捕獲輸出並將它傳遞給$ this-> getResponse() - > setContent()? – Dziamid 2010-11-18 23:01:59