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

1 23
siv1987
На сайте с 02.04.2009
Offline
427
#21
Robin_Bad:
Про буферизацию там кстати ни слова не сказано.

А откуда берется результат при ретурнтрансфере? Может быть там не буфер памяти, может быть дисковый кеш. Может быть то и другое.

Robin_Bad:
При неустановленном CURLOPT_RETURNTRANSFER curl_exec() весь вывод выплёвывает на экран, а сама функция возвращает true

ТСу это и нужно. Ему не нужен результат, ему нужен потоковый вывод для записи в файле.

Про то, что файл скачивается целиком потом отдается клиенту там кстати тоже ни слова не сказано.

Robin_Bad
На сайте с 24.12.2007
Offline
85
#22
siv1987:
А откуда берется результат при ретурнтрансфере? Может быть там не буфер памяти, может быть дисковый кеш. Может быть то и другое.

Нет, ну оно понятно, что внутри функции оно где-то есть конечно.

siv1987:

ТСу это и нужно. Ему не нужен результат, ему нужен потоковый вывод для записи в файле.

Тоже верно, но суть в том, что пока curl_exec() всю свою работу не завершит, скрипта ТС'а пользователю ничего отдавать не начнёт. Поэтому если в первом звене этой связки будет какой-то затуп, пользователю тоже придётся ждать окончания операции. А если делать всё это на неблокирующих сокетах, то первый же полученный от ТОГО сервера байт будет "прозрачно" переброшен пользователю. Но это лишняя работа - писать всё это на PHP, когда Apache или nginx от природы умеют это делать и делают это явно лучше.

siv1987
На сайте с 02.04.2009
Offline
427
#23
Robin_Bad:
но суть в том, что пока curl_exec() всю свою работу не завершит, скрипта ТС'а пользователю ничего отдавать не начнёт.

Как ни странно, но вывод идет потоком сразу. (у меня по крайней мере так. Да и у ТСа судя по всему аналогично)

Robin_Bad
На сайте с 24.12.2007
Offline
85
#24
siv1987:
Как ни странно, но вывод идет потоком сразу. (у меня по крайней мере так. Да и у ТСа судя по всему аналогично)

Наверное, сильно зависит от настроек сервера. А у меня вот не получается так сделать.

DavyJohnes
На сайте с 05.01.2011
Offline
84
#25
siv1987:
Как ни странно, но вывод идет потоком сразу. (у меня по крайней мере так. Да и у ТСа судя по всему аналогично)

+1, у меня абсолютно так же работает.

https://handy-tools.io (https://handy-tools.io) - Набор полезных утилит для всех!
W
На сайте с 29.04.2012
Offline
4
whi
#26

ээ, если правильно понял суть происходящего: потоком сразу куда - в файл, на экран (в похапэ нет понятие экран, есть stdout и это правильно) или во временный буфер, который будет зависеть от memory_limit ? ;)

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

siv1987
На сайте с 02.04.2009
Offline
427
#27
whi:
ээ, если правильно понял суть происходящего: потоком сразу куда - в файл, на экран

Угу, на "экран"

1 23

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