我有一个文件夹,其中包含我的 ZF 应用程序可以向已登录用户吐出的上传文档。我希望他们能够使用类似的链接http://server/documents/filename.pdf
并下载文件,但我希望有一个控制器DocumentsController
,使现有用户 cookie 能够验证他们是否已登录并有权下载文件。我不想像不需要那样使用 URL http://server/documents/index/id/1
,尽管这不是一个糟糕的选择。
问问题
1501 次
2 回答
3
您可以使用 X-SendFile 来获得最佳性能。它由 Apache (mod_xsendfile)、Lighttpd 和 Nginx 支持。该请求首先由一个 php 进程处理,该进程放置一个特殊的标头(X-Sendfile 或 Nginx 的 X-Accel-Redirect),当脚本结束时,Web 服务器接管并像静态文件一样发送文件。它更快并且使用更少的内存。
要将所有请求重定向到您的控制器,您需要在引导程序中编写自定义路由:
protected function _initRouter()
{
$router = Zend_Controller_Front::getInstance()->getRouter();
$documentRoute = new Zend_Controller_Router_Route(
'document/:filename',
array(
'action' => 'xsendfile',
'controller' => 'documents'
),
array(
'filename' => '\..+$'
)
);
$router->addRoute('document', $documentRoute );
return $router;
}
您可以使用此操作助手来处理 x-sendfile 标头:http ://www.zfsnippets.com/snippets/view/id/27并且您需要有代码来检查用户是否经过身份验证。
于 2010-10-05T08:11:08.267 回答