PHP可恢复下载.浏览器不希望显示进度


php resumable download. Browser do not want to show a progress

首先:我试图找到一个解决方案,使用堆栈溢出"类似的问题"和谷歌。也许我只是没有看到,但是……

我写了一个强制文件下载的PHP类。并给出一个标题'accept ranges: bytes'。

我做错了什么?浏览器(Google Chrome)显示我零进度和下载速度0 kb/秒(我通过sleep()函数降低速度)。。但是在浏览器完成下载后-一会儿显示我100%的进度。为什么浏览器不想流畅地显示它的进度?

文件下载软件与此完美地工作:显示正确的进度,并可以与暂停'恢复下载工作。本软件日志:

[17:27:50.347] Thread main : task started
[17:27:50.348] Thread main : thread 1 started
[17:27:50.348] Thread main : thread started
[17:27:50.349] Thread main : connecting
[17:27:50.350] Thread main : localhost:80
[17:27:50.351] Thread main : localhost:80
[17:27:50.351] Thread main : GET /fs-debug.png HTTP/1.1
               Thread main : User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.77.4 (KHTML, like Gecko) Version/7.0 Safari/537.77.4    
               Thread main : Host: bonell
               Thread main : Pragma: no-cache
               Thread main : Accept: */*
               Thread main : Connection: close
               Thread main : Cache-Control: no-cache
               Thread main : Referer: http://bonell/
[17:27:51.464] Thread main : HTTP/1.1 200 OK
               Thread main : Date: Mon, 14 Sep 2015 14:27:50 GMT
               Thread main : Server: Apache
               Thread main : X-Powered-By: PHP/5.3.28
               Thread main : Last-Modified: Mon, 14 Sep 2015 12:41:16 GMT
               Thread main : Cache-Control: no-cache, must-revalidate
               Thread main : Expires: Mon, 14 Sep 2015 14:27:50 GMT
               Thread main : Cache-Control: post-check=0,pre-check=0
               Thread main : Cache-Control: max-age=0
               Thread main : Pragma: no-cache
               Thread main : Connection: close
               Thread main : Content-Transfer-Encoding: Binary
               Thread main : Content-disposition: attachment; filename="tst.png"
               Thread main : Accept-Ranges: bytes
               Thread main : Content-Length: 27314
               Thread main : Content-Type: image/png
[17:27:51.465] Thread main : saved to /Users/LINKeR/Downloads/fs-debug.1.png.folx/fs-debug.1.png
[17:27:51.466] Thread main : saved to /Users/LINKeR/Downloads/fs-debug.1.png.folx/fs-debug.1.png
[17:27:54.392] Thread main : socket closed
[17:27:54.393] Thread main : thread completed
[17:27:54.393] Thread main : thread 1 completed
[17:27:54.394] Thread main : task stopped

之后,我点击"resume download",它就工作了:

[17:34:17.379] Thread main : GET /fs-debug.png HTTP/1.1
               Thread main : User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.77.4 (KHTML, like Gecko) Version/7.0 Safari/537.77.4
               Thread main : Host: bonell
               Thread main : Pragma: no-cache
               Thread main : Accept: */*
               Thread main : Connection: close
               Thread main : Cache-Control: no-cache
               Thread main : Referer: http://bonell/
[17:34:19.420] Thread main : HTTP/1.1 200 OK
               Thread main : Date: Mon, 14 Sep 2015 14:34:17 GMT
               Thread main : Server: Apache
               Thread main : X-Powered-By: PHP/5.3.28
               Thread main : Last-Modified: Mon, 14 Sep 2015 12:41:16 GMT
               Thread main : Cache-Control: no-cache, must-revalidate
               Thread main : Expires: Mon, 14 Sep 2015 14:34:18 GMT
               Thread main : Cache-Control: post-check=0,pre-check=0
               Thread main : Cache-Control: max-age=0
               Thread main : Pragma: no-cache
               Thread main : Connection: close
               Thread main : Content-Transfer-Encoding: Binary
               Thread main : Content-disposition: attachment; filename="tst.png"
               Thread main : Accept-Ranges: bytes
               Thread main : Content-Length: 27314
               Thread main : Content-Type: image/png
[17:34:19.421] Thread main : socket closed
[17:34:19.421] Thread main : Checking Size
[17:34:19.422] Thread main : connecting
[17:34:19.423] Thread main : localhost:80
[17:34:19.423] Thread main : localhost:80
[17:34:19.424] Thread main : GET /fs-debug.png HTTP/1.1
               Thread main : User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.77.4 (KHTML, like Gecko) Version/7.0 Safari/537.77.4
               Thread main : Host: bonell
               Thread main : Pragma: no-cache
               Thread main : Accept: */*
               Thread main : Connection: close
               Thread main : Cache-Control: no-cache
               Thread main : Range: bytes=4096-
               Thread main : Referer: http://bonell/
[17:34:19.462] Thread main : HTTP/1.1 206 Partial Content
               Thread main : Date: Mon, 14 Sep 2015 14:34:19 GMT
               Thread main : Server: Apache
               Thread main : X-Powered-By: PHP/5.3.28
               Thread main : Last-Modified: Mon, 14 Sep 2015 12:41:16 GMT
               Thread main : Cache-Control: no-cache, must-revalidate
               Thread main : Expires: Mon, 14 Sep 2015 14:34:19 GMT
               Thread main : Cache-Control: post-check=0,pre-check=0
               Thread main : Cache-Control: max-age=0
               Thread main : Pragma: no-cache
               Thread main : Connection: close
               Thread main : Content-Transfer-Encoding: Binary
               Thread main : Content-disposition: attachment; filename="tst.png"
               Thread main : Accept-Ranges: bytes
               Thread main : Content-Range: bytes 4096-27313/27314
               Thread main : Transfer-Encoding: chunked
               Thread main : Content-Type: image/png
[17:34:19.463] Thread main : saved to /Users/LINKeR/Downloads/fs-debug.1.png.folx/fs-debug.1.png

这个问题已经在评论中得到了回答,但我将在这里报告它以供将来参考。

看起来Chrome,即使有所有正确的标题(Content-LengthAccept-Ranges: bytes),禁用进度报告和下载恢复小文件。