我正在编写一个必须强制下载文件的服务。
我知道使用PHP设置HTTP标头然后使用readfile-function发送文件的可能性。但我认为这不是发送大文件的好方法,因为它需要大量的服务器性能,并且会超出PHP脚本的最大执行时间。
因此可以使用PHP发送HTTP标头(我必须根据mysql数据库中的条目修改它们。)然后让Apache发送文件体? 我必须补充一点,我也可以使用perl脚本,但我也没有看到在cgi脚本中执行此操作的可能性。 感谢。
答案 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将处理所有内容。我刚刚安装并尝试了它,它工作正常。