[PHP, CURL] Задержка отдачи файла юзеру.

12 3
DavyJohnes
На сайте с 05.01.2011
Offline
84
3708

Имеется php скрипт (my.com/dl.php) который отдает файл, находящийся в другом месте в интернете (other.com/file.rar), юзеру. Схема простая, делаю curl'ом запрос к удаленному файлу, изменяю заголовки скрипта так что бы содержимое интерпретировалось как скачка

header("Content-type:".$ct.";");

header("Content-Disposition: attachment; filename=".$title.";");
header("Content-Length:".$size.";");

и в конце концов echo результат curl Запроса. Все работает отлично, когда удаленный файл относительно маленьких размеров, в противном же случае, перед появлением диалога загрузки файла проходит время, достигающее порой минуты (при размере файла > 500 MB). Т.е. к скрипту обращаешься, он думает некоторое время и только потом вылезает диалог загрузки файла. Я знаю что данное поведение не нормально, т.к. если обратиться напрямую к удаленному файлу, диалог загрузки появляется моментально независимо от размера файла. Где грабли?

https://handy-tools.io (https://handy-tools.io) - Набор полезных утилит для всех!
SX
На сайте с 15.07.2008
Offline
79
#1

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

DavyJohnes
На сайте с 05.01.2011
Offline
84
#2
SpaceX:
видать задержка из-за скачивания удалённого файла на сервер - перед тем как отдать его пользователю...

Исходя из этого, можно сделать предположение, что скрипт сначала скачивает некоторую часть файла а лишь потом начинает отдавать её юзеру. Собственно тогда вопрос, как заставить скрипт отдавать файл сразу, т.е. по сути работать в режиме прокси.

siv1987
На сайте с 02.04.2009
Offline
427
#3
SX
На сайте с 15.07.2008
Offline
79
#4

попробуйте через сокеты...

siv1987
На сайте с 02.04.2009
Offline
427
#5
DavyJohnes:
Исходя из этого, можно сделать предположение, что скрипт сначала скачивает некоторую часть файла а лишь потом начинает отдавать её юзеру. Собственно тогда вопрос, как заставить скрипт отдавать файл сразу, т.е. по сути работать в режиме прокси.

Как-то так http://www.php.net/manual/ru/function.curl-setopt.php#52675

DavyJohnes
На сайте с 05.01.2011
Offline
84
#6

Здесь я только уяснил как можно записать в файл, минуя буфер, а как выдать пользователю на страницу я не понял.

---------- Добавлено 18.09.2012 в 23:27 ----------

А тут я тоже не много не понял. Тем не менее цели я достиг, помогло RETURNTRANSFER=>0. Спасибо! Я так понял вы мне именно на это указывали? Если нет то видимо на BINARYTRANSFER, что, как показал эксперимент, ни к чему не привело)

siv1987
На сайте с 02.04.2009
Offline
427
#7
DavyJohnes:
Тем не менее цели я достиг, помогло RETURNTRANSFER=>0. Я так понял вы мне именно на это указывали? Если нет то видимо на BINARYTRANSFER, что, как показал эксперимент, ни к чему не привело)

Конкретно ни на что, пример скрипта как скачивать файл. RETURNTRANSFER вообщето либо совсем не нужен, либо == 0. Он таки как раз записывает ответ в строку, вместо того чтобы его сразу отдавать юзеру.

SX
На сайте с 15.07.2008
Offline
79
#8

а зачем к себе качать потом отдавать?

при большом трафе - накладно не будет? да и нагрузка...

DavyJohnes
На сайте с 05.01.2011
Offline
84
#9
SpaceX:
а зачем к себе качать потом отдавать?
при большом трафе - накладно не будет? да и нагрузка...

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

SX
На сайте с 15.07.2008
Offline
79
#10

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

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий