900 MB http强制下载很少完成

pat*_*nyo 6 php header http 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();
Run Code Online (Sandbox Code Playgroud)

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

nic*_*nda 3

这可能有几个原因。

你是说服务器资源没问题,但我认为 PHPreadfile()在发送之前将整个文件加载到内存中。幸运的是,文档中有一个很好的解决方案,您绝对应该使用它来防止多次下载时遇到问题:)

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

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

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

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

有些人在标题和下载方面遇到困难,您可以从这里开始(或修复您的情况)

概括:

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

在此之后你应该没事了。即使它仍然会中断,也要恢复...

良好的进展和成功!