Javascript 跟踪服务器端的readfile()进度

Javascript 跟踪服务器端的readfile()进度,javascript,php,Javascript,Php,这是我用来让用户下载文件的PHP代码: $path = "somepath" header('Content-type: application'); header('Content-Disposition: attachment; filename="' . basename($path) . '"'); header('Content-Transfer-Encoding: binary'); readfile($path); 客户端js: windo

这是我用来让用户下载文件的PHP代码:

$path = "somepath"
header('Content-type: application');
header('Content-Disposition: attachment; filename="' . basename($path) . '"');
header('Content-Transfer-Encoding: binary');
readfile($path);
客户端js:

window.location = "/download";

我收到错误报告说,即使在100Mb/s的网络连接上,下载也需要20分钟而不是几秒钟。我怀疑有很大一部分用户会因此而取消下载,但我不知道是否有合适的日志工具。我感兴趣的是,是否可以在服务器端跟踪下载,以了解用户下载速度慢的频率,并记录下载时间和文件下载量?

您可以从记录
readfile
调用前后的当前时间开始。但这只读取文件内容并将其写入输出缓冲区,因此这并不意味着一旦从该调用返回,所有数据都已发送到客户端。您是否能够确定文件的下载量,我不知道-我想这可能需要一个以较小的块读取文件的解决方案,因此,结合
ignore\u user\u abort
,您可以尝试确定当客户端关闭连接时,其中有多少已经发送。您能给我一些
以较小的块读取文件的解决方案的起点吗
?发布的@CBroe链接可能正是您所需要的。在我看来,在块中读取和在块之间记录也是正确的方法。在任何情况下,readfile()的性能都应该等于或优于fread()。如果一些用户下载速度很慢,但正在下载,那么不太可能是代码问题。我要检查的第一件事是看你是否有任何带宽限制机制,可能会影响你的网站(例如,共享主机或廉价VPS)。另外,打开浏览器的开发者扩展(F12键),切换到“网络”选项卡,开始下载并查看其外观。如果启动需要很长时间,可能是因为访问源数据的速度较慢。档案有多大?