2009-10-22 254 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