5

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

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);
}
4

3 回答 3

4

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

根据PHP 错误报告,此内存泄漏可能会在关闭 Curl 处理程序后修复,如下代码:

...
curl_close($ch);
unset($ch);
于 2012-08-15T14:27:51.307 回答
1

这已经很晚了,但我建议不要在这种情况下使用 curl_close ,或者如果您这样做,请将其放在 for 循环之外。

我们遇到了类似的问题,即 curl 内存在多次循环后开始泄漏。我们正在使用 curl_multi 并关闭每个单独的处理程序,这导致我们的记忆变得疯狂。用 curl_init 覆盖处理程序似乎绰绰有余。curl_close 似乎有问题。

于 2013-04-04T00:41:04.490 回答
0

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

于 2012-08-15T14:19:16.420 回答