900 MB http强制下载很少完成

时间:2012-06-13 00:14:22

标签: php http header download

我已尝试过所有标题。 有和没有内容长度。

问题在于下载量在中途徘徊。但只是大部分时间。

有时它运作得很好。

服务器资源使用很简单。 所有配置文件都没问题。我不打算运行php脚本。

有没有人见过这个?这不是我的错吗?为什么有时候?

$file = "http://domain.com/files/".$item_number.".mov";
header( 'Pragma: no-cache' );
header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
header( 'Content-Description: File Download' );
header( 'Content-Type: application/force-download');
//header ('Content-Type: video/quicktime');//doesnt seem to download at all here
header( 'Content-Length: '.filesize( $file ) );
header( 'Content-Disposition: attachment; filename="'.basename( $file ).'"' );
header( 'Content-Transfer-Encoding: binary' );
readfile( $file ); 
exit();

谢谢你, 对不起,这是我的第一次。

1 个答案:

答案 0 :(得分:3)

这可能有几个原因。

您说服务器资源没问题,但我认为PHP readfile()会在发送之前将整个文件加载到内存中。幸运的是,您应该使用的文档中有一个很好的solution,以防止多次下载时遇到问题:)

另外,您是否将脚本执行时间设置为无限?

接下来是您的服务器设置。也许他们会因某些超时/资源占用原因而关闭连接。

使用Google Chromes开发人员工具来仔细检查您要发送的标头。 PHP自己设置了一些头文件。您应该将session_cache_limiter(false);放在脚本的开头。如果我没记错的话,即使是Expires: Thu, 19 Nov 1981 08:52:00 GMT ......为什么这很糟糕?接下来;)

您可以发送Etag和Last-Modified标头。我总结它是您资源的唯一标识符,可以恢复下载。我认为查找有关这方面的好文章比在这里给你一些句子更好。在您的情况下,您可以使用PHP stat()函数来创建Etag。

有些人在使用标题和下载时遇到困难,你可以开始(或修复你的案例)here

要点:

  • 检查您的PHP /服务器到期/限制/资源设置
  • 请务必发送文件缓冲
  • 可以恢复下载
  • 检查您要发送的标题

在此之后你应该没事。即使它仍然应该重新开始......

良好的进步和成功!

相关问题