2011-08-16 55 views
2

我從我的服務器使用一個非常簡單的腳本下載文件的其餘部分:PHP塊下載請求

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,但與他們所有人我有這個問題...所以我想這是一個問題在服務器??

非常感謝你提前:)

+0

當您嘗試瀏覽其他頁面/下載其他文件時會發生什麼?您是否收到HTTP錯誤(例如403,404)或連接是否掛起? – DaveRandom

+0

瀏覽器嘗試加載請求的新頁面,直到完全下載前一個文件。 – Curri

+0

聽起來像服務器對我來說有問題,你在用什麼服務器?要麼它被配置爲只接受來自每個主機的一個併發請求,要麼每個請求過程阻止服務器的所有執行,直到請求完成 - 更有可能是前者,除非這是一個完全非標準的服務器,專爲微小環境如路由器,甚至他們通常不會遇到這樣的問題。編輯:對不起,只是看到下面的會議解決方案是答案,不理我:-) – DaveRandom

回答

15

這是因爲你使用的PHP會話,而一個用戶會話中一個請求被打開,同一會話不能在其他請求開放。

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

+0

這工作!謝謝:) – Curri

+0

對不起,我不能投票你的答案:) – Curri

+0

@Curri我有你的代表upvoted :-) – DaveRandom