WEB - приглашение браузера на загрузку файла...

amiantos

Подскажите, пожалуйста, как сделать, чтобы через какое-то время браузер вываливал окошко с приглашением сохранить/открыть закачиваемый файл.
К примеру, как сделано на SourceForge.net
Много чего с товарищем перерыли.. никак не найдём...
Подскажите, пжлста!

katrin2201

через некоторое время редирект на урл файла
если хочется файл отдавать скриптом, то надо выставить следующие хидеры:

Content-type: application/octet-stream
Content-disposition: attachment; filename="<filename>"
Content-transfer-encoding: binary

Опционально:

Content-length: <length>

laki

javascript location.href через window.setTimeout("changeRate;", 1000);

amiantos

Спасибо! Дело в шляпе :)
Сделал так

<script language="javascript">
window.setTimeout("location.href=\"files/i.zip\"",3000);
</script>

Первым вариантом попробовал через header на php.. он грузит, что написано вне <?php кода ?> прямо голым текстом...

katrin2201

Первым вариантом попробовал через header на php
а ты пользовал пхпшную функцию header?

amiantos

Пробовал

<?php
header("Content-type: application/octet-stream");
header("Content-disposition: attachment; filename=\"i.zip\"");
header("Content-transfer-encoding: binary ");
?>
этот текст грузится в файл

в результате появляется окно для загрузки файла i.zip с текстом "этот текст грузится в файл"..
Этот код можно дополнить функциями построчного чтения из файла i.zip, например... тогда будет скачиваться то что надо... И получится удобный код для подсчёта количества закачек i.zip :)

katrin2201

а, ну да, так и задумано :)

Andbar

Этот код можно дополнить функциями построчного чтения из файла i.zip
только если readfile отключён и то, я бы отдал предпочтение чтению кусками фиксированного размера (по несколько Кб).
Если же хочется закачку реализовать, то надо выставлять:
Content-length: размер-куска-в-байтах
Content-size: размер-файла
Accept-ranges: bytes
а также парсить $_SERVER['HTTP_RANGE'] и читать/отправлять востребованный кусок файла двоично-безопасными функциями.
зы: я вполне мог где-то что-то перепутать.

kruzer25

PHP - гавно!

Andbar

PHP - гавно!
как RFC2616 связано с ПХП? Или под до-диезом есть дефолтная либа для отправки файлов клиенту с докачкой?

katrin2201

Content-length: размер-куска-в-байтах Content-size: размер-файла
тут напутал =)
про второй хидер гугл не в курсе, а про первый грит что это не размер какого то непонятного куска, а полный размер.

356ft85

а это к чему всё? чисто чтоб свой счетчик скачиваний намутить?

Andbar

тут напутал =)
на самом деле конкретно это постоянно путаю, затем и написал п.с.
Короче, Content-length - размер файла, а данные куска указываются в Content-Range (вроде).

kruzer25

как RFC2616 связано с ПХП?
С ПХП связан твой пост.

kruzer25

чисто чтоб свой счетчик скачиваний намутить?
Не просто "свой счётчик скачиваний", а хитрую отдачу файлов.
Например, за деньги.
Например, из какого-то хранилища вроде БД.

Andbar

С ПХП связан твой пост.
лишь косвенно... Соответствующий базовый функционал мало зависит от языка. Другое дело, что могут быть надстройки над функционалом.
Единственное php-specific в моём посте - преобразование заголовков запроса. Тут исправлюсь: клиент посылает серверу примерно такой заголовок:
Range: bytes, start_byte-end_byte

kruzer25

Я просто хотел сказать тебе об этом. А то мало ли, вдруг ты не знаешь?
Я вот раньше тоже не знал.

356ft85

Не просто "свой счётчик скачиваний", а хитрую отдачу файлов.Например, за деньги.Например, из какого-то хранилища вроде БД.
я как то задавал тут такой вопрос. в итоге про за деньги - все сошлись на том что лучше мутить хардлинк, а отдавать будет серв.
про генерацию из БД - жесть =)

kruzer25

в итоге про за деньги - все сошлись на том что лучше мутить хардлинк, а отдавать будет серв.
Как будешь контролировать, что по хардлинку файл не скачает кто не должен?
Один человек заплатил и весь интернет качает в сто потоков.

Dasar

про генерацию из БД - жесть =)
мелкие и средние файлы (картинки, документы и т.д.) довольно часто отдаются из базы.
или это является откровением?

Andbar

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

Andbar

Как будешь контролировать, что по хардлинку файл не скачает кто не должен?
Один человек заплатил и весь интернет качает в сто потоков.
Надо только имя файла угадать, ага. А хардлинк через определённое время будет удалён запускающимся по крону удалятором хардлинков, так что на угадывание у тебя ограниченное время... Ещё его можно по https отдавать чтобы у тебя не было желания поснифать трафик.
Ещё может быть вариант с генерацией ссылки вида http://server/files/client_ip/long-ident-code/filename.ext, при чём ип будет проверяться сервером и автоматически удаляться.

kruzer25

Надо только имя файла угадать, ага.
Почему "угадать"?
Человек, который заплатил за скачивание - отдаст ссылку всему интернету.
Ещё может быть вариант с генерацией ссылки вида http://server/files/client_ip/long-ident-code/filename.ext, при чём ип будет проверяться сервером и автоматически удаляться.
А отсюда - один шаг до активного скрипта, который сам всё это будет реализовывать, а не полагаться на функциональность сервера.

Andbar

А отсюда - один шаг до активного скрипта, который сам всё это будет реализовывать, а не полагаться на функциональность сервера.
на счёт ссылки я перепутал - ип в неё не следует включать, он будет добавляться к урлу апачевым урл_реврайтером. Думаю, быстрее скрипт не сделает. А если я буду качать в пять потоков (я ведь заплатил за такую возможность то запущенные пять экземпляров скрипта только ради одного клиента - это многовато. Если стоит не апач, а какой-нить нгинкс, то там что-то такое организовать тоже не проблема.
Почему "угадать"?
Человек, который заплатил за скачивание - отдаст ссылку всему интернету.
И будет она работать только у тех, кто с ним за одним натом сидит. А в этом случае он и так поделится с окружающими.

356ft85

Человек, который заплатил за скачивание - отдаст ссылку всему интернету.
тот же depositfiles от этого много не потеряет, даже если крон будет чистить хардлинки каждый час я думаю =)

kruzer25

даже если крон будет чистить хардлинки каждый час
Круто.
Я заплатил деньги, но у меня очень медленный интернет, и я не успел выкачать весь файл за один час.

laki

и я не успел выкачать весь файл за один час.
убей себя. ты неудачник

kruzer25

Какое нахуй "убей себя"? Я вообще-то деньги за это скачивание заплатил.
Как ты думаешь, долго ли в цивилизованном мире проживёт компания, говорящая "заплатите-ка нам деньги за скачивание файла... ок; так, у вас не получилось скачать файл - ну и идите нахуй, вы неудачники, ваши проблемы нас уже не ебут"?

laki

рапидшаре докачку на премиуме не поддерживает, живет и хорошо себя чувствует ;)

laki

Я вообще-то деньги за это скачивание заплатил.
че качал-то ? оплата по смс ?

356ft85

Какое нахуй "убей себя"? Я вообще-то деньги за это скачивание заплатил.Как ты думаешь, долго ли в цивилизованном мире проживёт компания, говорящая "заплатите-ка нам деньги за скачивание файла... ок; так, у вас не получилось скачать файл - ну и идите нахуй, вы неудачники, ваши проблемы нас уже не ебут"?
а долго ли проживет сервис, написанный на PHP с использованием readfile?

kruzer25

а долго ли проживет сервис, написанный на PHP с использованием readfile?
Тут в последних постах рекомендовали не readfile, а binary-safe функции чтения с промоткой.

psm-home

Для раздачи файлов тошным (=сидящим на медленных соединениях) клиентам обычно используют reverse proxy, типа nginx. Если сделать отдачу контента с использованием "binary-safe функции чтения с промоткой" PHP, то все это дело загнется под нагрузкой, имхо.

Andbar

Тут в последних постах рекомендовали не readfile, а binary-safe функции чтения с промоткой.
если поддержка докачки не требуется, то readfile должно быть быстрее, т.к. при этом не выполняется пхп-код. Но суть не в этом. Действительно, скачивание через пхп (и, скорее всего, не только через пхп) имеет смысл лишь в отдельных специфических случаях.

kruzer25

если поддержка докачки не требуется, то readfile должно быть быстрее, т.к. при этом не выполняется пхп-код.
А если не требуется?
Но суть - действительно не в этом.
Ты тут пытаешься сэкономить на спичках.
В большинстве случаев время, затраченное на пхп (или что-нибудь другое) будет совершенно мизерным с тем временем, которое уйдёт собственно на работу с диском.

kruzer25

Кстати, насчёт медленной работы с диском - не знаю, реализовано ли это в каком-нибудь nginx-е, но ты можешь реализовать свою очередь запросов к диску (файлы-то качает сразу много пользователей) и за счёт большой латентности (на нагрузке это почти никак не скажется, а пользователям пофигу) нехило так поднять производительность дисковых операций (если, конечно, у тебя не флэшка).

valodyr

Такой бред здесь написан ;)

pitrik2

рапидшаре докачку на премиуме не поддерживает, живет и хорошо себя чувствует ;)
на бесплатном поддерживает а на премиум нет?
фигня какая-то

evgen5555

Очевидно, у завхоза не было премиума на рапиде. Либо он о какой-то другой рапиде пытается пролечить.

laki

опера не докачивает. может руки не оттуда ;)

evgen5555

Да ты прикалываешься по ходу!

laki

на зацени если не веришь
http://books01.1gb.ru/1.avi

pitrik2

похоже на глюк оперы
я оттуда флешгетом качал - все ок было
Оставить комментарий
Имя или ник:
Комментарий: