2009-02-12 3 views
0

Я уже задал этот вопрос, но на этот раз я хочу знать, могу ли я достичь этого через PHP, поскольку Javascript не справился с этим.Переименование файла на другом сервере, так как пользователь загружает его [2] - с помощью PHP

У меня есть ссылка на файл на другом сервере. Если я предоставляю эту ссылку своим пользователям, заголовки выталкиваются, чтобы загрузить этот файл с этого сервера.

Есть ли способ захватить эти заголовки и файл и перенаправить загрузку пользователю? Я хотел бы сделать это, чтобы изменить имя файла загрузки, так как оно равно always 'file.zip'.

Возможно ли это с помощью PHP?

Благодарим за помощь.

ответ

1

Вы можете сделать это, и вы можете сделать это несколькими способами.

1) (просто) скопируйте файл на свой сервер и переименуйте его. Укажите ссылки для загрузки на эту копию.
2) (сложнее) Создайте файл-заглушку php, вызывается, читает файл с удаленного сервера в php и передает содержимое на выход скрипта. Это потребует от вас установки соответствующих заголовков и т. Д., А также настройки вашего веб-сервера для анализа через PHP.

Серьезно, я бы с вариантом 1. (предполагается, что вы имеете законное право служить содержание и т.д.)

+0

Не могли бы вы вдаваться в детали более подробно с части 2 - :). Я мог бы отдать это! Благодарю. – Abs

+0

Прошло много времени с тех пор, как я сделал что-либо в PHP, но в основном, задал заголовок типа контента в соответствии с вашим выходным файлом; открыть поток, чтобы прочитать удаленный файл, а затем вывести содержимое в браузер. Примечание. Это удвоит использование полосы пропускания, поскольку файл должен войти, а затем выйти. – ZombieSheep

+0

А я вижу, По соображениям пропускной способности я поеду с опцией 1! – Abs

2

Вы можете загрузить файл на свой сервер с помощью curl и подать его правильно (с заголовком Content-Disposition). Пока вы используете HTTP, нет способа отправить только заголовок и позволить другому серверу напрямую передавать контент клиенту.

+0

Одно исключение: вы можете проверить, что ftp поддерживается сервером происхождения. Если да, вы можете попробовать настроить специализированный ftp-сервер, который обрабатывает только управляющее соединение и позволяет передавать данные с другого сервера. Однако я сомневаюсь, что это стоит усилий. –

1

Может быть, вы можете использовать сценарий, аналогичный следующему:

<?php 
    header("HTTP/1.1 301 Moved Permanently"); 
    header("Location: http://www.example.com/the_path/file.zip"); 
    header('Content-Disposition: attachment; filename="alternate_filename.zip"'); 
    exit(); 
?> 
+1

Нет. Протестировано с помощью GNU Wget 1.11.3, Epiphany 2.18.2 (Gecko 1.8) и Opera 9.52 для Linux: во всех трех случаях при загрузке использовалось реальное имя файла «file.zip». –

+0

Ops, поскольку вы указали, что контент-расположение не применяется к внешнему серверу ... – Eineki

 Смежные вопросы

  • Нет связанных вопросов^_^