Я хочу использовать этот пример:
https://stackoverflow.com/a/5830599
В значительной степени по этой причине, упомянутой на этой странице.
Я пытаюсь обслуживать более крупные файлы (в общем, 100-200 месяцев) и нужно «выводить» данные в куски, а не читать все в памяти с помощью curl_exec (). Мой поставщик веб-хоста позволяет мне 64 мегабайта памяти, поэтому я не могу сразу прочитать эту информацию.
Какие-нибудь предложения здесь? Заранее спасибо.
Это довольно легко. Все, что вам нужно сделать, это предоставить 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