2009-07-01 2 views
0

Мне было интересно, есть ли какой-либо способ в PHP для передачи внешней загрузки пользователю? То, что я хотел бы сделать со сценарием, зависит от определенных условий, посылает пользователю файл с сервера A или сервера B. Однако я не хочу, чтобы пользователь знал прямой URL-адрес на любом сервере.PHP Pass external Загрузить для пользователя

Ex: посещения пользователя (который находится на сервере C): Адрес http://example.com/download?id=1234 сервер А на файл: Адрес http://servera.com/1234.exe сервер B к файлу: http://serverb.com/1234.exe

Есть ли способ, что когда кто-то посещает http://example.com/download?id=1234, чтобы отправить им загрузку других серверов, не указав пользователю прямой URL-адрес? Я знаю, что могу сделать файл ([внешний файл здесь]). Но я делаю не хочу всю пропускную способность, проходящую через сервер C. Сервер C в значительной степени просто перенаправляет.

Спасибо, Джеймс

ответ

2

Клиент должен знать, на каком-то уровне, на каком сервере они загрузка с, в противном случае они не смогут подключиться к нему.

EDIT:

Если вы не хотите в адресной строке браузера, чтобы изменить, вы можете попробовать использовать заголовок Content-disposition следующим образом:

header("Content-disposition: attachment;filename=1234.exe"); 
//then output the file contents 

Примечание: этот PHP скрипт будет на сервере A и на сервере B. Таким образом, сервер C перенаправляет либо http://servera.com/download.php, либо http://serverb.com/download.php.

+0

Да, я это понимаю, но могу ли я сделать это через заголовки, так что средний пользователь сможет увидеть? –

+0

В качестве функции безопасности браузер будет (или должен) всегда указывать пользователю, с какого сервера он загружает файл. –

+1

Если вы передаете файл через PHP и заголовок 'Content-disposition', браузер, скорее всего, не обновит адресную строку. –

0

гул

Вы можете с помощью NAT или прокси-сервера. Но это будет очень сложно.

Только модификация заголовков, вероятно, не будет работать.

EDIT: Нет, я думаю, вам нужно будет добавить прокси-сервер для всех ваших серверов сразу (например, шлюз).

+0

Как я могу сделать прокси через apache с mod_proxy? Это все равно будет использовать пропускную способность на сервере C. –