我有一个带有管理后端的 symfony 1.4 应用程序,我想让一些 pdf / 图像仅对经过身份验证的用户可用。身份验证过程由 symfony 处理。
我如何确保只有经过身份验证的用户才能下载文件,甚至超过 php 的 memory_limit 设置的文件?
我使用的网络服务器是 nginx。
我有一个带有管理后端的 symfony 1.4 应用程序,我想让一些 pdf / 图像仅对经过身份验证的用户可用。身份验证过程由 symfony 处理。
我如何确保只有经过身份验证的用户才能下载文件,甚至超过 php 的 memory_limit 设置的文件?
我使用的网络服务器是 nginx。
使用X-Sendfile
(/ X-Accel-Redirect
),nginx 将在 PHP 脚本发送适当的标头并结束后提供文件。这似乎是一个恰当的解释。
greg0ire > 这是我使用 symfony 1.4 和 nginx 的实现:
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;
}
}