2009-10-22 193 views
2

我有一个PHP文件提供一个文件,但问题是无论使用什么浏览器,如果您点击2个链接转到2个单独的文件,第二个下载不会启动,直到第一个做完了!有任何想法吗?使用PHP下载文件 - 一次只下载一个文件!

下载代码

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

示例链接

  • 链接1:的download.php downloadfile = 1个
  • 链路2:?的download.php downloadfile = 2
+3

你确信Apache不限制并发连接数?有些安装可以做到 – 2009-10-22 21:53:29

+0

什么是服务器的操作系统?你使用的是Apache吗?你max_concurrant_settings是什么样的? – 2009-10-22 21:54:18

+0

服务器是运行Apache的Linux服务器。哪里可以找到max_concurrent_settings设置? – 2009-10-22 22:08:59

回答

5

Ther这可能是不同的原因。

  • 您正在使用会话。因此,一次只允许一个脚本修改会话。所以下载B只能在下载A完成后才能启动。您是否在浏览器A中下载A并同时在浏览器B中下载B,同时尝试两次下载?检查描述为session_write_close

  • 其他一些HTTP问题,即你的浏览器无法打开到服务器的多个连接,但重复使用一个单一的连接,当然,这种方式必须等到第一个请求完成。

  • 一些OS/Web服务器设置只允许使用全部或每个主机开放的并发连接数量非常有限

+1

我已经尝试了2个浏览器在同一时间,似乎工作正常。真的不知道什么可能导致这种情况,因为它发生在Firefox和Safari。 – 2009-10-22 22:14:42

+0

@Bisbo ..我认为关于session_write_close的第一点应该解决你的问题..我建议你在你开始发送文件内容之前先将它放置。 – 2009-10-23 00:11:14

+1

啊辉煌!我在完成使用会话后使用了session_write_close(),它的工作非常完美!非常感谢你的帮助!是真的窃听我:-) – 2009-10-23 09:27:10