2012-08-15 62 views
5

我有一个使用cURL循环的问题,内存以指数级增长。在这个示例脚本中,它开始使用大约14MB的内存并以28MB结束,使用我的原始脚本并重复到1.000.000,内存增长到800MB,这是不好的。cURL循环内存增长

PHP 5.4.5
卷曲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); 
} 
+0

你试过'curl_multi_init'吗?也许它有帮助。 http://tr.php.net/manual/en/function.curl-multi-init.php – 2012-08-15 14:21:35

+0

我尝试curl_multi,这是同样的问题,即使它更慢。 – user1173536 2012-08-16 07:30:41

回答

0

一个解决办法是打电话卷曲少(比如100次),然后刷新页面,这可以允许内存被释放。

4

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

根据PHP bug report此内存泄漏可以是固定的关闭它,就像下面的代码后取消设置卷曲处理程序:

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

谢谢,但这是在我的代码中,并没有效果。记忆仍在增长 – user1173536 2012-08-16 05:05:18

0

这是晚了,但我建议不要在这种情况下使用curl_close,或者如果你那么,把它放在for循环之外。

我们有一个类似的问题,在多次循环之后,卷曲内存开始泄漏。我们正在使用curl_multi并关闭每个单独的处理程序,这导致我们的内存崩溃。用curl_init覆盖处理程序似乎绰绰有余。似乎curl_close有问题。