将HTTP响应的主体重定向到文件

时间:2011-10-15 18:57:48

标签: php apache http-headers download force-download

我正在编写一个必须强制下载文件的服务。

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

因此可以使用PHP发送HTTP标头(我必须根据mysql数据库中的条目修改它们。)然后让Apache发送文件体? 我必须补充一点,我也可以使用perl脚本,但我也没有看到在cgi脚本中执行此操作的可能性。 感谢。

3 个答案:

答案 0 :(得分:0)

如果下载的位置和/或文件类型提前知道,您可以使用apache严格执行此操作:

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

答案 1 :(得分:0)

  

因为它需要很多服务器性能

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

除非您的服务器上具有非常大的Gbps带宽并且设置速度非常快,否则在遇到服务器系统资源问题之前很久就会遇到带宽问题。

不可否认,这次讨论主要基于猜想(因为我对你的托管设置一无所知),所以YMMV。

  

将超出PHP脚本的最长执行时间

所以只需致电set_time_limit(0);。这就是它的用途。

答案 2 :(得分:0)

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