2014-02-06 2 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, и я знаком с ним, но я знаю только основные файлы конфигурации. Я предполагаю, что мне придется использовать rewrite и эти правила прокси-сервера, как я могу это сделать? –

+0

Да file_get_contents сначала загрузит весь файл. Приведенная ссылка nginx дает примеры. Я просто выделил его, если вы не заметили, что это ссылка. –

+0

Я понимаю, что вы имеете в виду, я просто не знаю, как настроить nginx на прокси url, указанный в URL-адресе (I.E. 'domain.com/tunnel/ {URL}' будет прокси {URL} '). –

0

Если они маленькие, вы можете использовать file_get_contents(). В противном случае вы, вероятно, должны использовать cURL. Вы захотите cURL URL-адрес из файла «get» переменной get. Затем сохраните его в локальном временном расположении с помощью 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 байтов, он сбрасывается на stdout (в этом случае - webbrowser). Он не должен использовать больше байтов памяти CURLOPT_BUFFERSIZE. – KikoV

+0

А, я попробую это. Это звучит как прекрасное решение :) –