我在编写一个必须强制下载文件的服务。将HTTP响应正文重定向到文件
我知道使用PHP设置HTTP标头然后使用readfile函数发送文件的可能性。但我认为这不是发送较大文件的好方法,因为它需要大量的服务器性能,并且PHP脚本的最大执行时间会被超出。
所以有可能使用PHP发送HTTP头(我必须根据mysql数据库中的条目修改它们),然后让Apache发送文件正文? 我必须补充一点,我也可以使用perl脚本,但我也没有看到在cgi脚本中这样做的可能性。 谢谢。
我在编写一个必须强制下载文件的服务。将HTTP响应正文重定向到文件
我知道使用PHP设置HTTP标头然后使用readfile函数发送文件的可能性。但我认为这不是发送较大文件的好方法,因为它需要大量的服务器性能,并且PHP脚本的最大执行时间会被超出。
所以有可能使用PHP发送HTTP头(我必须根据mysql数据库中的条目修改它们),然后让Apache发送文件正文? 我必须补充一点,我也可以使用perl脚本,但我也没有看到在cgi脚本中这样做的可能性。 谢谢。
我找到了这个链接:http://jasny.net/articles/how-i-php-x-sendfile/。 X-Sendfile是一个模块,它似乎完全允许我想要做的事情。它重定向HTTP响应的主体,并让Apache处理所有事情。我刚刚安装并尝试它,它工作正常。
可如果下载的位置和/或文件类型是提前知道的严格与Apache做到这一点:
<Location /downloads>
SetEnvIf Request_URI ".attachment-extension$" FILENAME=$0
Header set "Content-disposition" "attachment; filename=%{FILENAME}"
</Location>
,因为这将需要大量的服务器性能
我不相信这是事实。只要将文件发送到客户端是脚本终止之前的最后一件事情,从PHP发送文件和让Apache直接处理它的CPU/RAM性能差异应该是最小的,如果有的话。
除非您的服务器上的Gbps带宽数量非常大,且硬盘安装速度非常快,否则在遇到服务器系统资源问题之前,您会遇到带宽问题。无可否认,这个讨论主要基于猜想(因为我对你的主机设置一无所知),所以YMMV。
的PHP脚本的最大执行时间将超过
所以就叫set_time_limit(0);
。那是什么。
我需要根据mysql数据库中的条目修改头文件。这是不可能的这个代码,正是这是我的问题,Apache无法强制下载所有人。 –
有没有时候想要下载文件作为附件加载?如果数据库条目需要下载,您可以将用户转发到文件名并让apache代替严格使用php。 –
我确实需要服务器端语言,因为我需要修改content-type-header,并且必须将这些文件保存为附件。 –