Forum Webscript.Ru
Программирование => PHP => Тема начата: CGVictor от 16 Января 2004, 09:35:19
-
Господа Мастера, помогите pls.
Задача в следующем: скрипту передается адрес (полный URL, возможно с передачей параметров "file?query"... с этим я разберусь). По переданному адресу (при прямом обращении из браузера) происходит скачивание файла.
Можно ли как-нибудь извратиться, чтобы передать этот файл в браузер клиента от имени скрипта?
Дело в том, что я хочу немного преобразовать скачиваемый файл, а именно: сжать его по GZ, заменить MIME-тип (надо мне так) и т.п.
Мне сначала пришла в голову идея просто закачать файл на сервер через fsock, но этот номер не пройдет (хостер матом ругается... еще бы!).
Что делать - не знаю.
Кто что думает по этому поводу?
-
CGVictor Читаешь файл например в $file_content. Определяешь его mime тип. Шлеш header(\'Content-Type:...\') а потом print $file_content;
-
Так в том дело, что если я читаю файл к себе в скрипт, то я это делаю при помощи fsock. Это - крайне нежелательно (хостер кричит, что заставит меня платить за весь тот траффик, который я этим подниму в его каналах. В принципе, он прав).
Может, есть какой-нибудь хеадер (header :) ), при помощи которого файл все равно закачается, но использования fsock в скрипте не будет?
-
header(\'Location:\'.$file_name); перенаправит юзера на файл, но чтобы зажать его тебе в любом случае нужно прочитать на сервак его.
-
Есть ли где-нибудь подробное русское читабельное описание поля HTTP-заголовка Content-disposition?
-
http://forums.webscript.ru/showthread.php?threadid=3052 уже видел. Интересно.
RFC читал. Ничего интересного и полезного.
-
Сори, не то...
-
смешная тема.
-
2RomikChef
Чем же??
-
CGVictor:
RFC читал. Ничего интересного и полезного.
Вот это вообще можно в рамочке повесить.
А после вот этого
CGVictor:
хостер кричит, что заставит меня платить за весь тот траффик, который я этим подниму в его каналах.
я вообще не вижу ни малейшего смысла в топике.
Ну и смысл самого первого сообщения доходит до меня с трудом.CGVictor:
По переданному адресу (при прямом обращении из браузера) происходит скачивание файла.
а какое еще бывает обращение браузера? Кривое? что значит - прямое? Прямое КУДА? к твоему скрипту или к адресу, который передан? И туда и туда можно.
Если первое - то трафик. Если второе - то скрипт не при делах.
Я не представляю себе, чем надо думать, чтобы этого не сообразить.
"прямое обращение к другому серверу, но от имени скрита", "надо файл заархивировать скриптом, но ТАК, ЧТОБЫ СКРИПТ ЕГО НЕ СКАЧИВАЛ " - давненько я такого бреда не читал.
-
>RFC читал. Ничего интересного и полезного
Может не то читал?
http://krez.com.ua/techdoc/rfc/rfc/rfc1806.html
ЗЫ. RFC неинтересным не бывает :)
-
Diesel
Thanks!!!!!!! Странно, на rfceditor он не отмечен как активный... И вообще у него Status:Experimental...
RomikChef
Обьясняю в меру возможностей: надо получить файл не используя fsock.
я вообще не вижу ни малейшего смысла в топике.
Ну и смысл самого первого сообщения доходит до меня с трудом
Ты подумать не пробовал? Говорят, помогает...
Если бы ответ на вопрос лежал на поверхности - я бы его на форуме не задавал.
-
CGVictor:
Обьясняю в меру возможностей: надо получить файл не используя fsock.
Да, невелики твои возможности. 6 слов, из которых одно - несуществующее. Я-то думал, что это у тебя были временные трудности, а сейчас вижу, что ты весь такой.
сочувствую.
Ну, попробуй тогда "в меру возможностей" пояснить, а зачем тебе понадобилось такое извращение?
И, заодно, расскажи, чем тебе поможет другой способ в экономии трафика. Этот последний вопрос лично меня больше всего интересует. А ты его как-то обходишь стороной.
-
Diesel , может быть ты мне пояснишь, как этот рфц поможет товарищу в альтернатином способе скачивания, при котором трафик не расходуется? Весьма любопытно.
-
RomikChef
Ну вот, можно же общаться без наездов!
Спасибо за сочуствие, кстати.
Итак, зачем понадобилось извращение:
Нашел хостера, он вроде собирается хостить сайт нахаляву (т.е. плачу не я). Они с заказчиком вроде планируют договориться.
Мне нужно получить файл на его хост, преобразовать и послать пользователю. У хостера способностей, по всей видимости, еще меньше, чем у меня :), т.к. он выставил следующее условие: никакого использования сокетов (fsockopen) нет и быть не может. Причем после некоторого времени общения с хостером я понял, что дело не в экономии траффика, а просто кто-то ему по большой дружбе сказал запретить клиентам использовать упомянутые сокеты. Так он и сделал. Зачем так надо - то ли объяснить забыли, то ли он сам не интересуется...
Вот такое положение дел.
Поэтому я ищу обходные пути. И был бы очень благодарен тому, кто объяснил бы принцип действия content-disposition. Пока я за RFC еще не брался, поэтому не уверен, что это то, что мне надо.
P.S.Да... Об обращениях:
http://path.to/file.ext - прямое обращение
http://my.host/script.php?url=http://path.to/file.ext - косвенное... или кривое.
-
CGVictor:
был бы очень благодарен тому, кто объяснил бы принцип действия content-disposition
а я был бы очень благодарен тому, кто мне объяснит, каким образом ты хочешь его натянуть на свою задачу.
CGVictor:
Поэтому я ищу обходные пути
попробуй file или file_get_contents
если не сработает, то можешь расслабиться и заняться чем-нибудь другим.
-
каким образом ты хочешь его натянуть на свою задачу
Пока сам не знаю. Похоже, это все-таки не то.
Что характерно: на хосте ПХП настроен так, что fOpen открывает ссылки. Может, это можно как-то использовать? А то у меня уже идеи кончились...
можешь расслабиться и заняться чем-нибудь другим
ОК!!! :)
-
CGVictor:
что fOpen открывает ссылки
ну так какая проблема? открыл-считал.
-
RomikChef
Не знаю...
Еще можно попробовать include(\'path.to.remote.file\'), но над этим еще работать и работать.
Короче: всем спасибо.
-
CGVictor:
include(\'path.to.remote.file\'),
вот над этим работать ВООБЩЕ даже думать не моги!
Если мозгов не хватает понять, для чего служит команда инклюде, то тогда и не лезь ее пихать, куда не надо!
-
RomikChef
Но согласись, она откроет файл, закачает его и (как ей и положено), вставит в сценарий... Ладно, попробую сначала fOpen, а там посмотрим.
-
CGVictor , ты уверен, что у тебя сервер не подохнет, пытаясь выполнить какую-нибудь мп3шку, как рхр-файл???
-
сначала напиши здесь, что ты понял весь идиотизм затеи с инклюде, а потом можешь закрывать тему.
-
CGVictor
Может я ошибаюсь, но весь протокол HTTP основан на работе с сокетами.
Будешь ты вызывать fsockopen, fopen, readfile или ещё что - в любом случае сервер должен будет создать сокетное соединение. Другое дело, если хостер просто запретил тебе использовать функцию fsockopen. В таком случае, если директива allow_url_fopen отключена в настройках сервера, можешь попробовать использовать curl, если он там есть.
Хотя единственный аргумент для запрещения исходящих сокетных соединений с сервера, который я знаю - это экономия трафика. И в таком случае что бы ты не использовал, всё равно получишь по ушам от хостера.
-
CGVictor
Твоя задача (не платить за траффик и заархивировать файл) - нерешаема.
Хоть ты curl используй, хоть fsockopen/fopen/include/file_get_contents/... (и так далее) все равно будет открываться сокет и твой скрипт будет скачивать файл.
-
Макс, он уже сказал ниже, что трафик вроде не при чем.
Хотя, конечно, фиг его разберет, но тему трафика стоит оставить пока в покое.