2010-11-18 51 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