使用CURL / PHP从块中下载以保存内存

时间:2013-01-29 04:48:00

标签: php curl download

我想使用这个例子:

https://stackoverflow.com/a/5830599

几乎是因为本页提到的原因。

我正在尝试提供更大的文件(一般为100-200megs)并且需要以块的形式“输出”数据,而不是使用curl_exec()在内存中读取所有数据。我的网络托管服务提供商只允许64兆内存,所以我不能一次阅读那么多信息。

这里有什么建议吗?提前谢谢。

1 个答案:

答案 0 :(得分: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