繁体   English   中英

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

[英]Redirect body of HTTP response to file

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

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

那么有可能使用PHP发送HTTP标头(我必须根据mysql数据库中的条目进行修改),然后让Apache发送文件正文吗? 我必须补充一点,我也可以使用perl脚本,但是在cgi-script中也看不到这样做的可能性。 谢谢。

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

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

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

我认为情况并非如此。 只要将文件发送到客户端是脚本在终止之前要做的最后一件事,那么从PHP发送文件和直接让Apache处理文件之间的CPU / RAM性能差异就应该很小。

除非您的服务器上具有非常快速的HDD设置,否则您的服务器上会有大量的Gbps带宽,否则很久就会遇到带宽问题,然后再遇到服务器系统资源问题。

诚然,此讨论主要基于推测(因为我对您的托管设置一无所知),因此YMMV。

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

所以只需调用set_time_limit(0); 那是为了什么。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM