使用Content-Disposition:并行附件发送文件

时间:2010-03-12 13:45:00

标签: php http

我有一个PHP页面,根据收到的请求数据将文件发送到浏览器。 getfile.php?get = something发送文件A,getfile.php?get = somethingelse发送文件B,依此类推。 这样做是这样的:

header('Content-Disposition: attachment; filename='. urlencode($filename));
readfile($fileURL);

它可以工作,但它一次只能发送一个文件。请求的任何其他文件以线性方式发送。一旦另一个完成,就会开始。

如果用户在下载文件时请求另一个文件,我如何能够并行发送文件?

编辑:我已经尝试通过直接使用他们的文件路径同时下载两个文件并且它可以工作,因此Apache和浏览器似乎都没有问题。看来PHP就是问题所在。顺便说一下,我在页面开头使用了session_start()。

2 个答案:

答案 0 :(得分:1)

这可能取决于他们的浏览器设置,服务器设置,PHP或全部三种。大多数浏览器只处理两个同时到同一服务器的HTTP连接,排队其他服务器。如果同一浏览器中有两个以上,那么许多Web 服务器也会对连接进行排队。如果您正在使用会话,PHP可能会在会话中序列化完成请求(一次只有一个活动请求)以最小化竞争条件。 (我不知道PHP是否会这样做;有些人会这样做。)

你控制的其中两个(服务器和PHP);关于浏览器,你无能为力。

有些OT,但你可以随时允许他们选择多个文件,然后将它们发回动态创建的zip(或其他容器格式)。

答案 1 :(得分:0)

在我完成会话之后和开始下载之前添加session_write_close()似乎已经解决了这个问题。