我有一个非常简单和标准的PHP强制下载脚本。
我如何检查是否/何时完成下载以便在客户端通知用户?我什至不需要实时显示进度,我只对非常具体的事件感兴趣:“下载完成时”。根据我的研究,由于没有ondownloadready事件,因此似乎必须从服务器端确定它,而且我认为不可能拦截浏览器事件。
ondownloadready
因此,似乎最好的选择是通过某种客户端/服务器端交互比较发送到总字节的字节。我该如何检查从服务器发送的字节以进行PHP强制下载?是否存在某种全局PHP变量来存储我可以使用AJAX ping的这些数据?
<?php header("Content-Type: video/x-msvideo"); header("Content-Disposition: attachment; filename=\"".basename($realpath)."\";"); ... $chunksize = 1 * (1024 * 1024); // how many bytes per chunk if ($size > $chunksize) { $handle = fopen($realpath, 'rb'); $buffer = ''; while (!feof($handle)) { $buffer = fread($handle, $chunksize); echo $buffer; ob_flush(); flush(); } fclose($handle); } else { readfile($realpath); } exit(); ?>
我需要这个的原因:
对于我正在处理的项目,要求下载开始后,页面重定向到(或显示)“请等待下载完成”页面。然后,一旦完成,它应该重定向到(或显示)“您的下载已完成,谢谢”页面。我对其他可以达到相同结果的想法持开放态度。
查看描述解决方案的此Sitepoint论坛帖子。
基本上,一旦while循环中断,您就完成了!
以下是描述使用AJAX轮询检测下载完成时间的完整线程:http : //www.sitepoint.com/forums/showthread.php?t=618233