使用mod-xsendfile下载PHP文件不会下载整个文件

时间:2013-03-29 11:20:07

标签: php download varnish x-sendfile

我在从我们的网站下载服务时遇到问题。大文件不会完全下载。下载将在两者之间停止...示例this file(大小为cca 172MB)将不会以完整大小下载(还有其他文件)。

我从完全基于PHP的下载脚本切换,该脚本包含在Kohana框架中:

return download::force($filePath);

到mod-xsendfile解决方案。我正在阅读有关基于PHP的下载脚本可能存在的问题,而大型文件和cam over mod-xsendfile是正确的解决方案...好吧看起来没有,我用两种技术得到了相同的结果。我当前使用mod-xsendfile头文件的下载实现如下:

header("X-Sendfile: $filePath");
header("Content-type: application/octet-stream");
header('Content-Disposition: attachment; filename="' . basename($filePath) . '"');

我做错了什么?

更新:

我使用this HTTP sniffer来检查响应标头,如果它有助于解决此问题,那就是结果。

Status: HTTP/1.1 200 OK
Server: Apache  
Set-Cookie: dewesoftsession=63ms5j67kc231pr4bpm8cmg1f7; expires=Sat, 30-Mar-2013 11:36:59 GMT; path=/   
Expires: Thu, 19 Nov 1981 08:52:00 GMT  
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0   
Pragma: no-cache    
Set-Cookie: dewesoftsession=63ms5j67kc231pr4bpm8cmg1f7; expires=Sat, 30-Mar-2013 11:36:59 GMT; path=/   
Content-Disposition: attachment; filename="DEWESoft_FULL_7_0_5.exe" 
Last-Modified: Mon, 24 Sep 2012 12:50:12 GMT    
ETag: "25814de-ac291e9-4ca7207c7fcd9"   
Content-Type: application/octet-stream  
Content-Length: 180523497   
Date: Sat, 30 Mar 2013 09:37:01 GMT 
X-Varnish: 294312007    
Age: 2  
Via: 1.1 varnish    
Connection: close   
X-Varnish-Cache: MISS

1 个答案:

答案 0 :(得分:1)

几天后,我们设法找到导致问题的原因。 Varnish有一个名为send_timeout的启动参数,默认设置为600s。对于大文件下载,您可能会遇到此超时,这将导致下载中断。

因此,增加Varnish的send_timeout参数将帮助您解决此类问题。