PHP下载文件:在浏览器中显示进度

问题描述:

我的网站上的用户可以下载文件。有时这些文件非常大,我希望用户在浏览器中看到下载进度条。PHP下载文件:在浏览器中显示进度

我用下面的代码给用户一个文件:

header('Content-Type: text/xml'); 
header('Content-Disposition: attachment; filename='.$fileName); 
header('Pragma: no-cache'); 
header('Content-Transfer-Encoding: binary'); 
header('Pragma: public'); 
header('Content-Length: '.filesize($fullFileName)); 
header("Content-Description: File Transfer"); 

$fileHandler = fopen($fullFileName, 'r'); 
while(!feof($fileHandler)){ 
    echo fread($fileHandler, 2048); 
} 
fclose($fileHandler); 

当我运行该脚本的浏览器(Firefox)的冻结一段时间,我可以看到装载彩色圆圈和保存/打开对话框的文件后,才出现。当我点击“保存”按钮时,文件几乎立即被下载到我的电脑(文件相当大 - 50 Mb)。

我想有像这样的下载系统site。当您点击任何链接时,立即出现保存/打开对话框。之后,您可以在浏览器中看到下载进度。

是否有任何特殊的标题在浏览器中显示进度条?我应该如何更改我的代码?

+0

我使用的是Chrome浏览器,并且在下载问题的网站上我没有看到任何特殊的内容。没有什么,头文件,明智的,你可以发送,以使浏览器显示一些不错的下载进度条。我认为这里的问题是你的电脑或多或少,没有别的。 – 2014-09-23 23:00:42

+0

@ N.B.我不明白为什么在我点击链接并看到“保存文件”对话框的时候,我的网站上有一段时间间隔?我相信代码有问题。它看起来像浏览器等待,直到在显示对话框窗口之前全文件被传送的那一刻。 – Tamara 2014-09-23 23:06:48

+0

我在使用Firefox时遇到了问题,在通知我开始之前下载了整个文件。我怀疑这与标题有什么关系(它不可能 - 没有任何意义),它可能是你的计算机(hdd分区已满或者只是慢/老硬盘问题)或firefox的下载机制(再次,不知道它是因为什么我没有那么多)。 – 2014-09-23 23:15:06

我用下面的代码,并在Firefox它给我的下载时间和进度:

// send headers first 
header('Content-type: application/octet-stream'); 
header('Content-Transfer-Encoding: binary'); 
header('Content-disposition: attachment; filename='.$FileName); 
header("Content-Length: ".filesize($Path)); 
// then use an easy way to flush and end all output buffers 
while (@ob_end_flush()); 
// flush file 
readfile($Path); 

,如果你正确指定Content-Length它应该工作。我在代码中发现的唯一有点奇怪的是Content-Type: text/xml标题。请注意,我使用Content-type: application/octet-stream