2014-02-06 66 views
2

我希望能夠去mydoma.in/tunnel.php?file=http://otherdoma.in/music.mp3,然後獲取流式傳輸到客戶端的數據http://otherdoma.in/music.mp3通過PHP調整鏈接數據?

我試圖通過Header();這樣做,但它重定向而不是「調整」數據。

我怎樣才能做到這一點?

回答

0

有你的PHP腳本拉遠程內容:

$data = file_get_contents($remote_url); 

然後就是吐了出來:

echo $data; 

或者乾脆:

echo file_get_contents($remote_url); 

您可能需要添加一些標題來指示內容類型。

或者,你可以配置一個類似nginx的代理 - 這將允許你重寫特定的URL到遠程站點,然後將它們作爲本地服務器,無需編碼。

+0

使用的file_get_contents將需要下載整個文件,第一個吧?我正在尋找可以「流」它的東西。 nginx的東西看起來很有趣 - 我使用nginx,並且我很熟悉它,但我只知道基本的配置文件。我假設我將不得不使用重寫和這些代理規則,我將如何去做? –

+0

是file_get_contents將首先下載整個文件。提供的nginx鏈接給出了例子。如果你沒有注意到它是一個鏈接,我只是強調它。 –

+0

我明白你的意思,我只是不知道如何配置nginx來代理在url中指定的url(I.E.'domain.com/tunnel/ {URL}'會代理'{URL}')。 –

0

如果它們很小,則可以使用file_get_contents()。否則,你應該使用cURL。你會想要從變量「file」中獲取URL。然後使用PHP將它保存到本地臨時位置。然後,使用header()將自己定向到本地文件。刪除臨時文件是唯一的問題,因爲沒有辦法確定您是否完成下載。因此,您可能可以睡眠或延遲文件刪除,但是您可能會發現使用cron作業稍後清理所有臨時文件是更好的選擇。

1

使用cURL流媒體:

<?php 

$url = $_GET["file"]; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_BUFFERSIZE, 256); 

curl_exec($ch); 
curl_close($ch); 

?> 
+0

請問不要先下載整個文件?我想盡可能少地保留在硬盤上。 –

+0

我認爲每個256字節,它刷新到標準輸出(在這種情況下是網頁瀏覽器)。它不應該使用超過CURLOPT_BUFFERSIZE字節的內存。 – KikoV

+0

啊,我會試試看。這聽起來像一個很好的解決方案:) –