0

我有一小段代码可以帮助下载文件。但是在文件下载期间该站点没有打开/工作,但是当我在其他浏览器上打开该站点时,它就可以工作了。我不知道文件下载期间浏览器发生了什么。这是我用来下载 zip 文件的标头:

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");                        
header("Content-Description: File Transfer");
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=\"".$zipname."\"");
header("Content-Transfer-Encoding: binary");
//header("Content-Length: ".filesize($directory_location . '/' . $zipname));

ob_end_flush();


readfile($directory_location . '/' . $zipname);
ob_end_clean();

即使我不知道如何调试它,所以我从我的代码中得到了弱点。

4

1 回答 1

1

因此,由于您使用的是会话:

当您的下载脚本正在运行时,“打开”会话会阻止其他脚本访问该会话。

session_write_close在将文件内容流式传输到客户端之前修复该问题。只需在检查完您需要在会话中检查的任何内容之后调用它,并且在脚本的耗时部分开始之前 - 这将释放会话上的锁定,以及在下载脚本时调用的其他脚本running 可以再次访问会话。

于 2013-11-06T08:56:36.580 回答