2012-06-13 94 views
0

我們的文件託管在RapidShare上,我們希望通過我們自己的網站提供服務。基本上,當用戶請求http://site.com/download.php?file=whatever.txt時,腳本應該將文件從RapidShare流式傳輸給用戶。從遠程服務器上提供大量文件下載

我無法左右讓我頭上的唯一的事情就是如何正確地流呢。我想使用cURL,但我不確定是否可以從RapidShare中以塊的形式讀取下載內容,然後將它們回顯給用戶。到目前爲止,我想到的最好方式是使用fopen,fread,將文件塊回顯給用戶,刷新並重復該過程直到整個文件被傳輸。

我知道的PHP readfile()功能藏漢的,但是那會是最好的選擇?請記住,這些文件的大小可以是幾GB,雖然我們有16GB RAM的服務器,但我希望儘可能降低內存使用量。

謝謝你的任何建議。

回答

2

HTTP有一個名爲「範圍」標頭,基本上可以讓你得到一個文件的任何大塊(知道你已經知道了文件大小),但由於PHP是不是多線程知道,我沒有看到使用它的任何好處。

據我所知,如果你不想佔用你所有的RAM,去的唯一方法是兩步路。

首先,流使用fopen()/fread()(或任何PHP功能,使用戶使用流)遠程文件,在小塊分割的讀(2048位可以足夠),寫/結果附加到tempfile(),然後通過閱讀臨時文件「回顯」給您的用戶。

這樣,即使文件2若要將,基本上消耗了2048位,因爲只有塊和文件的處理是在內存中。

你也可以寫一些類型的代理經理的緩存並保留已經下載的文件,以避免如果一個文件被下載大量遠程讀取過程(並保持本地給定時間)。

+0

想'fopen'和'fread'將是最好的解決方案。但是將其寫入臨時文件是必要的嗎?我的印象是,只要我爲HTTP下載發送正確的頭文件(附件頭文件和什麼不是),然後只是回顯文件塊,我應該沒問題?謝謝你的建議。 :) –

+0

不,實際上,如果你真的迴應它沒關係,但是,如果由於某些原因你的用戶斷開連接,你需要重新啓動程序。 –

相關問題