我有一个带有管理员后端的symfony 1.4应用程序,我想只为经过身份验证的用户提供一些pdf /图像。身份验证过程由symfony处理。
如何确保只有经过身份验证的用户才能下载文件,甚至是超过php的memory_limit设置的文件?
我使用的网络服务器是nginx。
答案 0 :(得分:4)
使用X-Sendfile
(/ X-Accel-Redirect
),nginx将在PHP脚本发送适当的标头并结束后为该文件提供服务。 This seems a proper explanation
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;
}
}