我正在编写一个必须强制下载文件的服务。
我知道可以使用PHP设置HTTP-headers,然后使用readfile-function发送文件。但我认为这不是发送较大文件的好方法,因为它需要大量的服务器性能,并且会超过PHP脚本的最大执行时间。
那么,是否可以使用PHP发送HTTP-headers (我必须根据mysql-database中的条目对其进行修改)。然后让Apache发送文件正文?我必须补充说,我也可以使用perl脚本,但我也看不到在cgi脚本中这样做的可能性。谢谢。
发布于 2011-10-16 16:58:08
我找到了这个链接:http://jasny.net/articles/how-i-php-x-sendfile/。X-Sendfile是一个模块,它似乎完全允许我想要做的事情。它重定向HTTP-response的正文,并让Apache处理一切。我刚刚安装并试用了它,它工作得很好。
发布于 2011-10-16 03:11:38
如果事先知道下载的位置和/或文件类型,则可以使用apache严格执行此操作:
<Location /downloads>
SetEnvIf Request_URI ".attachment-extension$" FILENAME=$0
Header set "Content-disposition" "attachment; filename=%{FILENAME}"
</Location>发布于 2011-10-16 03:49:55
,因为它需要大量的服务器性能
我不相信这是真的。只要将文件发送到客户端是脚本在终止之前做的最后一件事,那么从PHP发送文件和让Apache直接处理文件之间的CPU/RAM性能差异应该是最小的。
除非您的服务器上有非常多的Gbps带宽,并且硬盘设置非常快,否则在遇到服务器系统资源问题之前很久就会遇到带宽问题。
诚然,这个讨论很大程度上是基于猜测(因为我对你的主机设置一无所知),所以YMMV。
将超过PHP脚本的最大执行时间
所以就打电话给set_time_limit(0);吧。这就是它的作用。
https://stackoverflow.com/questions/7779956
复制相似问题