6

我已经尝试了所有的标题。有和没有内容长度。

问题是下载过程中途出现了问题。但只是大多数时候。

有时它工作得很好。

服务器资源使用是微不足道的。所有配置文件都很好。我在运行时不运行 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();

谢谢,对不起,我是第一次。

4

1 回答 1

3

这可能有几个原因。

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

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

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

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

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

有些人在标题和下载方面苦苦挣扎,您可以从这里开始(或解决您的问题)

概括:

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

在这之后你应该没事。恢复即使它仍然应该中断......

良好的进步和成功!

于 2012-06-13T01:23:46.523 回答