【问题标题】:PHP download blocks rest of requestsPHP 下载会阻止其余请求
【发布时间】:2011-08-16 11:40:04
【问题描述】:

我正在使用一个非常简单的脚本从我的服务器下载文件:

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($fichero));
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));
ob_clean();
flush();
readfile($file);

它工作正常,但是当浏览器正在下载文件时,我无法浏览该站点或从同一服务器下载其他文件。我必须等到它完成。它发生在 Chrome 和 Firefox 中,我还使用其他方法通过 PHP 下载文件,但所有这些方法都有这个问题......所以我想这是服务器的问题??

提前非常感谢你:)

【问题讨论】:

  • 当您尝试浏览其他页面/下载其他文件时会发生什么?您收到 HTTP 错误(例如 403、404)还是连接挂起?
  • 浏览器尝试加载请求的新页面,直到上一个文件完全下载。
  • 对我来说,这听起来像是服务器的问题,您使用的是什么服务器?要么将其配置为仅接受来自每个主机的一个并发请求,要么每个请求过程阻止服务器的所有执行,直到请求完成 - 更有可能是前者,除非这是为微型设计的一些完全非标准的服务器像路由器这样的环境,甚至它们通常也不会遇到这个问题。编辑:对不起,刚刚看到下面的会话解决方案就是答案,忽略我:-)

标签: php session locking download


【解决方案1】:

这是因为您使用的是 PHP 会话,当一个用户的会话在一个请求中打开时,同一会话无法在另一个请求中打开。

在 readfile() 之前执行 session_write_close()。

【讨论】:

  • 太棒了!我已经解决了一个类似的问题:当运行长 CURL 请求时,网站的其余部分没有响应!
猜你喜欢
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 2022-01-24
  • 2015-09-11
  • 1970-01-01
相关资源
最近更新 更多