我已尝试过所有标题。 有和没有内容长度。
问题在于下载量在中途徘徊。但只是大部分时间。
有时它运作得很好。
服务器资源使用很简单。 所有配置文件都没问题。我不打算运行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();
谢谢你, 对不起,这是我的第一次。
答案 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
要点:
在此之后你应该没事。即使它仍然应该重新开始......
良好的进步和成功!