文件下载时,服务器不响应请求!有解决方案吗

时间:2011-04-05 17:16:09

标签: php download

目前使用的PHP代码是:

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/octet-stream");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($file));
header("Content-Disposition: attachment; filename=\"" . basename($file) . "\"");
header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");
ob_clean();
flush();
readfile($file);

但是当我下载某个文件时,网站就会停止运行。浏览器正在发送请求但它没有从服务器获得任何响应。它们处于挂起模式,直到下载完成,但一旦下载完成,服务器就会发送响应并且网站会再次开始运行。你能为此解决一下吗?

1 个答案:

答案 0 :(得分:7)

如果您使用的是基于文件的会话,则可能是您遇到问题的原因:当脚本为给定用户打开会话时,其他脚本(对于同一用户)将不会允许打开同一个会话,以防止并发写入。

典型解决方案:在执行不需要会话保持打开的大量操作之前关闭会话。


有关此问题的更多信息,请参阅session_write_close()函数的文档(引用相关句子的一部分)

  

会话数据被锁定以防止   并发写入只有一个脚本可能   随时进行会话。