2010-03-12 31 views
0

我有一個PHP頁面,它根據接收到的請求數據向瀏覽器發送一個文件。 getfile.php?get =發送文件A,getfile.php?get = somethingelse發送文件B等等。 這是像這樣做:使用Content-Disposition發送文件:並行附件

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

它的工作原理除了它只能一次發送一個文件。請求的任何其他文件都以線性方式發送。一旦另一個完成,就開始。

如果用戶在下載時請求另一個文件,我該如何獲得並行發送文件?

編輯:我試圖直接使用它們的文件路徑同時下載兩個文件,它的工作原理,所以Apache和瀏覽器似乎都沒有問題。看來PHP是這個問題。我順便在頁面的開頭使用了session_start()。

回答

0

剛剛完成會話並開始下載之前添加session_write_close()似乎解決了問題。

1

這可能歸結於他們的瀏覽器設置,服務器設置,PHP或全部三種。大多數瀏覽器只會同時處理兩個到同一服務器的HTTP連接,排隊其他服務器。如果來自同一瀏覽器的網站數量超過兩個,則許多網絡服務器也將排隊連接。如果您使用會話,PHP可能會將會話中的滿足請求序列化(一次只有一個活動請求)以最小化競爭條件。 (我不知道PHP是否執行此操作;有些則執行此操作。)

其中兩個(服務器和PHP)由您控制;關於瀏覽器的事情並不多。

Something OT,但你可以隨時讓他們選擇多個文件,然後將它們發送回動態創建的zip(或其他容器格式)。