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。当您点击任何链接时,立即出现保存/打开对话框。之后,您可以在浏览器中看到下载进度。
是否有任何特殊的标题在浏览器中显示进度条?我应该如何更改我的代码?
答
我用下面的代码,并在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
。
我使用的是Chrome浏览器,并且在下载问题的网站上我没有看到任何特殊的内容。没有什么,头文件,明智的,你可以发送,以使浏览器显示一些不错的下载进度条。我认为这里的问题是你的电脑或多或少,没有别的。 – 2014-09-23 23:00:42
@ N.B.我不明白为什么在我点击链接并看到“保存文件”对话框的时候,我的网站上有一段时间间隔?我相信代码有问题。它看起来像浏览器等待,直到在显示对话框窗口之前全文件被传送的那一刻。 – Tamara 2014-09-23 23:06:48
我在使用Firefox时遇到了问题,在通知我开始之前下载了整个文件。我怀疑这与标题有什么关系(它不可能 - 没有任何意义),它可能是你的计算机(hdd分区已满或者只是慢/老硬盘问题)或firefox的下载机制(再次,不知道它是因为什么我没有那么多)。 – 2014-09-23 23:15:06