文件下载与应用程序授权

时间:2012-06-20 15:55:59

标签: php nginx symfony-1.4

我有一个带有管理员后端的symfony 1.4应用程序,我想只为经过身份验证的用户提供一些pdf /图像。身份验证过程由symfony处理。

如何确保只有经过身份验证的用户才能下载文件,甚至是超过php的memory_limit设置的文件?

我使用的网络服务器是nginx。

1 个答案:

答案 0 :(得分:4)

使用X-Sendfile(/ X-Accel-Redirect),nginx将在PHP脚本发送适当的标头并结束后为该文件提供服务。 This seems a proper explanation

greg0ire>这是我使用symfony 1.4和nginx的实现:

  1. 在web
  2. 下创建名为“secure”的目录
  3. 像这样配置nginx:
  4. 创建symfony路线
  5. 创建一个symfony动作
  6. Nginx配置

    location /secure/ {
        internal;
      }
    

    Symfony路由

    SecureDownload:
      url: /anything-you-want-but-secure/:filename
      options:
        segment_separators: ['/'] # filenames often contain dots
      params:
        module: YourModule
        action: secureDownload
    

    Symfony行动

    <?php
    class SecureDownloadAction extends sfAction
    {
      public function execute($request)
      {
        $this->getResponse()->setHttpHeader(
          "X-Accel-Redirect",
          "/secure/" . $request->getParameter('filename'));
        $this->getResponse()->setHttpHeader(
          "Content-Disposition",
          "attachement; filename=". $request->getParameter('filename'));
        return sfView::HEADER_ONLY;
      }
    }