执行curl_close()一次或多次之间的区别?

时间:2010-10-03 13:05:50

标签: php curl

什么时候需要关闭curl连接并释放它消耗的资源?

为什么我会问这个问题,因为我被告知,PHP垃圾收集器会完成所有这些操作,有时无需关闭数据库连接或调用__destruct方法来释放资源。< / p>

从那时起,我真的开始思考我需要在哪里调用呢?目前我对这个问题很感兴趣,因为我为curl编写了一个小型库,我想了解何时需要使用curl_close()函数。

谢谢大家的讨论和解释。

3 个答案:

答案 0 :(得分:9)

100次curl_exec的结果(获取缓存避免的URL):

在每个循环中执行:

for ($i = 0; $i < 100; ++$i) {
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, "http://www.google.com/?rand=" . rand());
    curl_exec($c);
    curl_close($c);
}
  

8.5秒

仅执行一次:

$c = curl_init();
for ($i = 0; $i < 100; ++$i) {
    curl_setopt($c, CURLOPT_URL, "http://www.google.com/?rand=" . rand());
    curl_exec($c);
}
curl_close($c);
  

5.3秒

决策:习惯于在任务中始终使用最佳代码。 (source

答案 1 :(得分:5)

据我所知。 GC仅清除不再使用/引用的资源。 当curl变量超出范围时,它将被清理。 但这可能只发生在脚本完成后,或者会话被销毁时(取决于范围)。

但为了安全起见,请遵循常识..当它不再需要时关闭它。

答案 2 :(得分:-1)

取决于。在我的情况下,因为我在自定义CurlClient构造函数

中初始化curl实例
$this->ch = curl_init();

然后使用相同的$curlClient对象进行多个api调用,关闭实例

curl_close($this->ch);

会影响其他API调用。使用相同对象的方法不起作用,所以我没有关闭它。