Я хочу использовать этот пример:

https://stackoverflow.com/a/5830599

В значительной степени по той самой причине, которая указана на этой странице.

Я пытаюсь обслуживать файлы большего размера (100-200 мегабайт в целом), и мне нужно «выводить» данные в кусках вместо того, чтобы читать их все в памяти с помощью curl_exec (). Мой провайдер веб-хостинга позволяет мне использовать только 64 мегабайта памяти, поэтому я не могу прочитать столько информации за один раз.

Есть предложения здесь? Заранее спасибо.

2
G D 29 Янв 2013 в 08:47

1 ответ

Лучший ответ

Это довольно просто. Все, что вам нужно сделать, это предоставить cURL обратный вызов для обработки данных по мере их поступления.

function onResponseBodyData($ch, $data)
{
    echo $data;
    return strlen($data);
}

curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'onResponseBodyData');

Возвращение длины данных из вашего обратного вызова очень важно. Он показывает, сколько данных вы обработали. Если вы вернете значение, отличное от длины переданных данных (например, 0), запрос будет прерван.

Теперь убедитесь, что у вас не включена буферизация вывода, и настройте сервер так, чтобы не буферизовать весь ответ перед отправкой. Он будет работать "из коробки" в большинстве конфигураций.

Вы можете найти больше примеров здесь: http://curl.haxx.se/libcurl/ php / examples / callbacks.html.

1
Brad 29 Янв 2013 в 08:52
Кажется, это помогает. Большое спасибо. Мне просто нужно еще немного поиграть с ним и запустить его в производство.
 – 
G D
29 Янв 2013 в 09:57