什么时候需要关闭curl连接并释放它消耗的资源?
为什么我会问这个问题,因为我被告知,PHP垃圾收集器会完成所有这些操作,有时无需关闭数据库连接或调用__destruct
方法来释放资源。< / p>
从那时起,我真的开始思考我需要在哪里调用呢?目前我对这个问题很感兴趣,因为我为curl编写了一个小型库,我想了解何时需要使用curl_close()
函数。
谢谢大家的讨论和解释。
答案 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
构造函数
$this->ch = curl_init();
然后使用相同的$curlClient
对象进行多个api调用,关闭实例
curl_close($this->ch);
会影响其他API调用。使用相同对象的方法不起作用,所以我没有关闭它。