所以我在一些地方和网站上看到过,文件下载似乎没有指定 Content-Length,所以下载会继续,直到服务器停止发送数据。
现在我想知道当我通过 PHP 脚本发送动态生成的文件以供下载时,如何使用 PHP 实现类似的功能。
我做了一些研究,但实际上找不到任何东西。
(作为一个具体的例子:我想让用户下载一个 ZIP 文件,而它仍在构建中。)
那么,如何在服务器端不知道下载时间长的情况下创建动态长下载?
如前所述,您可以跳过发送Content-Length
标头。这个功能可以派上用场:
function force_download($file){
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
//header('Content-Length: ' . filesize($file)); <--- Don't send length
readfile($file);
}