我在使用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);
}
答案 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似乎存在问题。