2011-10-15 25 views
2

我在编写一个必须强制下载文件的服务。将HTTP响应正文重定向到文件

我知道使用PHP设置HTTP标头然后使用readfile函数发送文件的可能性。但我认为这不是发送较大文件的好方法,因为它需要大量的服务器性能,并且PHP脚本的最大执行时间会被超出。

所以有可能使用PHP发送HTTP头(我必须根据mysql数据库中的条目修改它们),然后让Apache发送文件正文? 我必须补充一点,我也可以使用perl脚本,但我也没有看到在cgi脚本中这样做的可能性。 谢谢。

回答

0

我找到了这个链接:http://jasny.net/articles/how-i-php-x-sendfile/。 X-Sendfile是一个模块,它似乎完全允许我想要做的事情。它重定向HTTP响应的主体,并让Apache处理所有事情。我刚刚安装并尝试它,它工作正常。

0

可如果下载的位置和/或文件类型是提前知道的严格与Apache做到这一点:

<Location /downloads> 
    SetEnvIf Request_URI ".attachment-extension$" FILENAME=$0 
    Header set "Content-disposition" "attachment; filename=%{FILENAME}" 
</Location> 
+0

我需要根据mysql数据库中的条目修改头文件。这是不可能的这个代码,正是这是我的问题,Apache无法强制下载所有人。 –

+0

有没有时候想要下载文件作为附件加载?如果数据库条目需要下载,您可以将用户转发到文件名并让apache代替严格使用php。 –

+0

我确实需要服务器端语言,因为我需要修改content-type-header,并且必须将这些文件保存为附件。 –

0

,因为这将需要大量的服务器性能

我不相信这是事实。只要将文件发送到客户端是脚本终止之前的最后一件事情,从PHP发送文件和让Apache直接处理它的CPU/RAM性能差异应该是最小的,如果有的话。

除非您的服务器上的Gbps带宽数量非常大,且硬盘安装速度非常快,否则在遇到服务器系统资源问题之前,您会遇到带宽问题。无可否认,这个讨论主要基于猜想(因为我对你的主机设置一无所知),所以YMMV。

的PHP脚本的最大执行时间将超过

所以就叫set_time_limit(0);。那是什么。