2 个想法(未验证):
第一的:
不要在您的页面上放置指向文件(您要下载的文件)的常规链接,而是放置诸如 .../dowanload.php 之类的链接,这些链接可能看起来像这样:
<?php
// download.php file
session_start(); // if needed
$filename = $_GET['filename']);
header( 'Content-type: text/plain' ); // use any MIME you want here
header( 'Content-Disposition: attachment; filename="' . htmlspecialchars($filename) . '"' );
header( 'Pragma: no-cache' );
// of course add some error handling
$filename = 'c:/php/php.ini';
$handle = fopen($filename, 'rb');
// do not use file_get_contents as you've said files are up to 4GB - so read in chunks
while($chunk = fread($handle, 1000)) // chunk size may depend on your filesize
{
echo $chunk;
flush();
// write progress info to the DB, or session variable in order to update progress bar
}
fclose($handle);
?>
这样您就可以密切关注您的下载过程。同时,您可以使用 AJAX 将进度信息写入 DB/session var 并从 DB/session var 更新进度条读取状态,当然还要轮询读取进度信息的脚本。
这非常简化,但我认为它可能会按您的意愿工作。
第二:
Apache 2.4 内置了 Lua 语言:
我敢打赌,您可以尝试编写 LUA Apache 处理程序来监控您的下载 - 将进度发送到数据库并使用 PHP/AJAX 从数据库获取进度信息来更新进度条。
同样 - 有 perl 甚至 python 的模块(但不是 win)