使用 CURL/PHP 从 FTP 分块下载以节省内存


Using CURL/PHP to download from FTP in chunks to save memory

我想用这个例子:

https://stackoverflow.com/a/5830599

几乎正是由于本页中提到的原因。

我正在尝试提供更大的文件(通常为 100-200megs),并且需要以块的形式"输出"数据,而不是使用 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