【问题标题】:difference between executing curl_close() once or frequently?一次或频繁执行 curl_close() 的区别?
【发布时间】:2011-04-20 11:24:39
【问题描述】:

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

我为什么要问这个问题,很简单,因为有人告诉我,PHP 垃圾收集器会完成所有这些工作,有时不需要关闭数据库连接或调用__destruct 方法来释放资源。

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

谢谢大家的讨论和解释。

【问题讨论】:

标签: php curl


【解决方案1】:

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

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

【讨论】:

  • @Eugene - 你出门后不关前门吗? ;)
  • @Christian Sciberras 视情况而定。
  • @Christian Sciberras - 很好的比较。
  • 如果我有一扇门在我离开时会自动关闭,那么不,我不会手动关闭它们。
  • @RoboRobok 如果它会自毁你的房子,那真是一扇地狱之门;或者我们应该说 - '一点点家务'。
【解决方案2】:

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)

【讨论】:

    【解决方案3】:

    视情况而定。就我而言,因为我在自定义 CurlClient 构造函数中初始化 curl 实例

    $this->ch = curl_init();
    

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

    curl_close($this->ch);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      相关资源
      最近更新 更多