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