Forum Webscript.Ru

Программирование => PHP => Тема начата: CGVictor от 16 Января 2004, 09:35:19

Название: Файл с другого сервера
Отправлено: CGVictor от 16 Января 2004, 09:35:19
Господа Мастера, помогите pls.

Задача в следующем: скрипту передается адрес (полный URL, возможно с передачей параметров "file?query"... с этим я разберусь). По переданному адресу (при прямом обращении из браузера) происходит скачивание файла.

Можно ли как-нибудь извратиться, чтобы передать этот файл в браузер клиента от имени скрипта?

Дело в том, что я хочу немного преобразовать скачиваемый файл, а именно: сжать его по GZ, заменить MIME-тип (надо мне так) и т.п.

Мне сначала пришла в голову идея просто закачать файл на сервер через fsock, но этот номер не пройдет (хостер матом ругается... еще бы!).

Что делать - не знаю.
Кто что думает по этому поводу?
Название: Файл с другого сервера
Отправлено: Diesel от 16 Января 2004, 09:45:31
CGVictor Читаешь файл например в $file_content. Определяешь его mime тип. Шлеш header(\'Content-Type:...\') а потом print $file_content;
Название: Файл с другого сервера
Отправлено: CGVictor от 16 Января 2004, 09:49:24
Так в том дело, что если я читаю файл к себе в скрипт, то я это делаю при помощи fsock. Это - крайне нежелательно (хостер кричит, что заставит меня платить за весь тот траффик, который я этим подниму в его каналах. В принципе, он прав).

Может, есть какой-нибудь хеадер (header :) ), при помощи которого файл все равно закачается, но использования fsock в скрипте не будет?
Название: Файл с другого сервера
Отправлено: Diesel от 16 Января 2004, 10:04:47
header(\'Location:\'.$file_name); перенаправит юзера на файл, но чтобы зажать его тебе в любом случае нужно прочитать на сервак его.
Название: Файл с другого сервера
Отправлено: CGVictor от 16 Января 2004, 10:13:47
Есть ли где-нибудь подробное русское читабельное описание поля HTTP-заголовка Content-disposition?
Название: Файл с другого сервера
Отправлено: CGVictor от 16 Января 2004, 10:18:17
http://forums.webscript.ru/showthread.php?threadid=3052 уже видел. Интересно.

RFC читал. Ничего интересного и полезного.
Название: Файл с другого сервера
Отправлено: Diesel от 16 Января 2004, 10:21:03
Сори, не то...
Название: Файл с другого сервера
Отправлено: Меняздесьдавнонет от 16 Января 2004, 12:04:16
смешная тема.
Название: Файл с другого сервера
Отправлено: CGVictor от 16 Января 2004, 13:54:06
2RomikChef
Чем же??
Название: Файл с другого сервера
Отправлено: Меняздесьдавнонет от 16 Января 2004, 14:16:01
Цитировать
CGVictor:
RFC читал. Ничего интересного и полезного.

Вот это вообще можно в рамочке повесить.

А после вот этого
Цитировать
CGVictor:
хостер кричит, что заставит меня платить за весь тот траффик, который я этим подниму в его каналах.

я вообще не вижу ни малейшего смысла в топике.

Ну и смысл самого первого сообщения доходит до меня с трудом.
Цитировать
CGVictor:
По переданному адресу (при прямом обращении из браузера) происходит скачивание файла.

а какое еще бывает обращение браузера? Кривое? что значит - прямое? Прямое КУДА? к твоему скрипту или к адресу, который передан? И туда и туда можно.
Если первое - то трафик. Если второе - то скрипт не при делах.
Я не представляю себе, чем надо думать, чтобы этого не сообразить.
"прямое обращение к другому серверу, но от имени скрита", "надо файл заархивировать скриптом, но ТАК, ЧТОБЫ СКРИПТ ЕГО НЕ СКАЧИВАЛ " - давненько я такого бреда не читал.
Название: Файл с другого сервера
Отправлено: Diesel от 16 Января 2004, 14:39:08
>RFC читал. Ничего интересного и полезного
Может не то читал?
http://krez.com.ua/techdoc/rfc/rfc/rfc1806.html

ЗЫ. RFC неинтересным не бывает :)
Название: Файл с другого сервера
Отправлено: CGVictor от 19 Января 2004, 14:47:16
Diesel
Thanks!!!!!!! Странно, на rfceditor он не отмечен как активный... И вообще у него Status:Experimental...

RomikChef
Обьясняю в меру возможностей: надо получить файл не используя fsock.
Цитировать
я вообще не вижу ни малейшего смысла в топике.
Ну и смысл самого первого сообщения доходит до меня с трудом

Ты подумать не пробовал? Говорят, помогает...

Если бы ответ на вопрос лежал на поверхности - я бы его на форуме не задавал.
Название: Файл с другого сервера
Отправлено: Меняздесьдавнонет от 19 Января 2004, 14:54:34
Цитировать
CGVictor:
Обьясняю в меру возможностей: надо получить файл не используя fsock.

Да, невелики твои возможности. 6 слов, из которых одно - несуществующее. Я-то думал, что это у тебя были временные трудности, а сейчас вижу, что ты весь такой.
сочувствую.

Ну, попробуй тогда "в меру возможностей" пояснить, а зачем тебе понадобилось такое извращение?
И, заодно, расскажи, чем тебе поможет другой способ в экономии трафика. Этот последний вопрос лично меня больше всего интересует. А ты его как-то обходишь стороной.
Название: Файл с другого сервера
Отправлено: Меняздесьдавнонет от 19 Января 2004, 14:56:39
Diesel , может быть ты мне пояснишь, как этот рфц поможет товарищу в альтернатином способе скачивания, при котором трафик не расходуется? Весьма любопытно.
Название: Файл с другого сервера
Отправлено: CGVictor от 19 Января 2004, 15:08:15
RomikChef
Ну вот, можно же общаться без наездов!

Спасибо за сочуствие, кстати.

Итак, зачем понадобилось извращение:

Нашел хостера, он вроде собирается хостить сайт нахаляву (т.е. плачу не я). Они с заказчиком вроде планируют договориться.

Мне нужно получить файл на его хост, преобразовать и послать пользователю. У хостера способностей, по всей видимости, еще меньше, чем у меня :), т.к. он выставил следующее условие: никакого использования сокетов (fsockopen) нет и быть не может. Причем после некоторого времени общения с хостером я понял, что дело не в экономии траффика, а просто кто-то ему по большой дружбе сказал запретить клиентам использовать упомянутые сокеты. Так он и сделал. Зачем так надо - то ли объяснить забыли, то ли он сам не интересуется...

Вот такое положение дел.

Поэтому я ищу обходные пути. И был бы очень благодарен тому, кто объяснил бы принцип действия content-disposition. Пока я за RFC еще не брался, поэтому не уверен, что это то, что мне надо.

P.S.Да... Об обращениях:
http://path.to/file.ext - прямое обращение
http://my.host/script.php?url=http://path.to/file.ext - косвенное... или кривое.
Название: Файл с другого сервера
Отправлено: Меняздесьдавнонет от 19 Января 2004, 15:18:40
Цитировать
CGVictor:
был бы очень благодарен тому, кто объяснил бы принцип действия content-disposition

а я был бы очень благодарен тому, кто мне объяснит, каким образом ты хочешь его натянуть на свою задачу.

Цитировать
CGVictor:
Поэтому я ищу обходные пути

попробуй file или file_get_contents
если не сработает, то можешь расслабиться и заняться чем-нибудь другим.
Название: Файл с другого сервера
Отправлено: CGVictor от 19 Января 2004, 15:21:28
Цитировать
каким образом ты хочешь его натянуть на свою задачу

Пока сам не знаю. Похоже, это все-таки не то.

Что характерно: на хосте ПХП настроен так, что fOpen открывает ссылки. Может, это можно как-то использовать? А то у меня уже идеи кончились...

Цитировать
можешь расслабиться и заняться чем-нибудь другим

ОК!!! :)
Название: Файл с другого сервера
Отправлено: Меняздесьдавнонет от 19 Января 2004, 15:43:38
Цитировать
CGVictor:
что fOpen открывает ссылки

ну так какая проблема? открыл-считал.
Название: Файл с другого сервера
Отправлено: CGVictor от 19 Января 2004, 15:50:06
RomikChef
Не знаю...
Еще можно попробовать include(\'path.to.remote.file\'), но над этим еще работать и работать.

Короче: всем спасибо.
Название: Файл с другого сервера
Отправлено: Меняздесьдавнонет от 19 Января 2004, 16:02:41
Цитировать
CGVictor:
include(\'path.to.remote.file\'),

вот над этим работать ВООБЩЕ даже думать не моги!
Если мозгов не хватает понять, для чего служит команда инклюде, то тогда и не лезь ее пихать, куда не надо!
Название: Файл с другого сервера
Отправлено: CGVictor от 19 Января 2004, 16:08:25
RomikChef
Но согласись, она откроет файл, закачает его и (как ей и положено), вставит в сценарий... Ладно, попробую сначала fOpen, а там посмотрим.
Название: Файл с другого сервера
Отправлено: Меняздесьдавнонет от 19 Января 2004, 16:22:45
CGVictor , ты уверен, что у тебя сервер не подохнет, пытаясь выполнить какую-нибудь мп3шку, как рхр-файл???
Название: Файл с другого сервера
Отправлено: Меняздесьдавнонет от 20 Января 2004, 01:25:21
сначала напиши здесь, что ты понял весь идиотизм затеи с инклюде, а потом можешь закрывать тему.
Название: Файл с другого сервера
Отправлено: FreeSpace от 20 Января 2004, 01:53:40
CGVictor
Может я ошибаюсь, но весь протокол HTTP основан на работе с сокетами.
Будешь ты вызывать fsockopen, fopen, readfile или ещё что - в любом случае сервер должен будет создать сокетное соединение. Другое дело, если хостер просто запретил тебе использовать функцию fsockopen. В таком случае, если директива allow_url_fopen отключена в настройках сервера, можешь попробовать использовать curl, если он там есть.

Хотя единственный аргумент для запрещения исходящих сокетных соединений с сервера, который я знаю - это экономия трафика. И в таком случае что бы ты не использовал, всё равно получишь по ушам от хостера.
Название: Файл с другого сервера
Отправлено: Макс от 20 Января 2004, 02:25:27
CGVictor
Твоя задача (не платить за траффик и заархивировать файл) - нерешаема.
Хоть ты curl используй, хоть fsockopen/fopen/include/file_get_contents/... (и так далее) все равно будет открываться сокет и твой скрипт будет скачивать файл.
Название: Файл с другого сервера
Отправлено: Меняздесьдавнонет от 20 Января 2004, 02:40:06
Макс, он уже сказал ниже, что трафик вроде не при чем.
Хотя, конечно, фиг его разберет, но тему трафика стоит оставить пока в покое.