cURL循环内存增长

时间:2012-08-15 11:18:39

标签: php linux curl

我在使用cURL的循环中遇到此问题,其中内存以指数方式增长。在这个示例脚本中,它开始使用大约14MB的内存,以28MB结束,使用我的原始脚本并重复到1.000.000,内存增长到800MB,这很糟糕。

PHP 5.4.5
cURL 7.21.0

for ($n = 1; $n <= 1000; $n++){

    $apiCall = 'https://api.instagram.com/v1/users/' . $n . '?access_token=5600913.47c8437.358fc525ccb94a5cb33c7d1e246ef772';

    $options = Array(CURLOPT_URL => $apiCall,
                     CURLOPT_RETURNTRANSFER => true,
                     CURLOPT_FRESH_CONNECT => true
    );

    $ch = curl_init();
    curl_setopt_array($ch, $options);
    $response = curl_exec($ch);
    curl_close($ch);

    unset($ch);
}

3 个答案:

答案 0 :(得分:4)

我想我找到了内存泄漏的修复程序。我在PHP脚本中使用curl lib时遇到了同样的问题。在重复调用curl_exec()函数后,内存就会耗尽。

根据PHP bug report这个内存泄漏可能会在关闭后解除卷曲处理程序的设置,如下一个代码:

...
curl_close($ch);
unset($ch);

答案 1 :(得分:0)

一种解决方案是调用curl(比如说100次),然后刷新页面,这样可以释放内存。

答案 2 :(得分:0)

这已经很晚了,但我建议不要在这个例子中使用curl_close,或者如果你这样做,将它放在for循环之外。

我们有一个类似的问题,卷曲内存在许多循环后开始泄漏。我们使用curl_multi并关闭每个处理程序,这导致我们的记忆变得疯狂。使用curl_init覆盖处理程序似乎绰绰有余。 curl_close似乎存在问题。