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)
谢谢,对不起,这是我的第一次.
这可能有几个原因。
你是说服务器资源没问题,但我认为 PHPreadfile()在发送之前将整个文件加载到内存中。幸运的是,文档中有一个很好的解决方案,您绝对应该使用它来防止多次下载时遇到问题:)
另外,您是否将脚本执行时间设置为无限?
接下来是您的服务器设置。也许他们出于某种超时/资源占用的原因关闭了连接。
例如,使用 Google Chrome 开发者工具仔细检查您发送的标头。PHP 自己设置一些标头。您应该将其放在session_cache_limiter(false);脚本的开头。如果我没记错的话,甚至Expires: Thu, 19 Nov 1981 08:52:00 GMT……为什么这很糟糕?接下来的是;)
您可以发送 Etag 和 Last-Modified 标头。我认为它是您的资源的唯一标识符,可以恢复下载。我认为查找有关这方面的好文章比在这里给你一些句子更好。在您的情况下,您可以使用 PHPstat()函数来创建 Etag。
有些人在标题和下载方面遇到困难,您可以从这里开始(或修复您的情况)
概括:
在此之后你应该没事了。即使它仍然会中断,也要恢复...
良好的进展和成功!