Потоковый ответ от запроса CURL, не дожидаясь его завершения - PullRequest
5 голосов
/ 03 декабря 2011

У меня на сервере есть скрипт PHP, который отправляет запрос на изображение другому серверу.

Доступ к сценарию осуществляется так же, как к обычному источнику изображения, например:

<img src="http://example.com/imagecontroller.php?id=1234" />

Браузер -> Сценарий -> Внешний сервер

Сценарий выполняет запрос CURL на внешний сервер.

Можно ли "перенаправить" ответ CURL непосредственно обратно клиенту (браузеру), когда он получен на сервере?

Предположим, мой сценарий находится на медленном сервере с общим хостингом, а внешний сервер работает быстро (CDN). Есть ли способ отправить ответ обратно клиенту, и мой сценарий не является узким местом? Было бы замечательно, если бы моему серверу не пришлось ждать загрузки всего изображения в память, прежде чем начать ответ клиенту.

Ответы [ 3 ]

9 голосов
/ 02 апреля 2016

Передайте флаг -N / --no-buffer на curl. Это делает следующее:

Отключает буферизацию выходного потока. В нормальной работе В ситуациях, curl будет использовать стандартный буферный поток вывода, который будет иметь эффект, что он будет выводить данные кусками, а не обязательно именно тогда, когда данные поступают. Использование этой опции отключите эту буферизацию.

Обратите внимание, что это отрицательное имя параметра задокументировано. Вы можете таким образом использовать --buffer для принудительного применения буферизации.

1 голос
/ 03 декабря 2011

Ознакомьтесь с ответом Паскаля Мартина на несвязанный вопрос, в котором он обсуждает использование CURLOPT_FILE для потоковой передачи ответов скручивания. Его объяснение обработки « Управление строкой длиной 30 миллионов символов » должно работать в вашем случае.

Надеюсь, это поможет!

0 голосов
/ 03 декабря 2011

Не с curl, вы можете использовать fsocket для потоковой передачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...