1

我有一个带有管理后端的 symfony 1.4 应用程序,我想让一些 pdf / 图像仅对经过身份验证的用户可用。身份验证过程由 symfony 处理。

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

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

4

1 回答 1

4

使用X-Sendfile(/ X-Accel-Redirect),nginx 将在 PHP 脚本发送适当的标头并结束后提供文件。这似乎是一个恰当的解释

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

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

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;
  }
}
于 2012-06-20T16:07:16.073 回答