【问题标题】:Set global CURL timeout设置全局 CURL 超时
【发布时间】:2015-06-18 13:58:33
【问题描述】:

我正在使用专有的第 3 方 Drupal 模块,该模块通过 curl 查询第 3 方服务。该服务最近有点不稳定,这大大减慢了我的页面加载速度,当我有很多流量时,我会达到 max_connections。

这个扩展查询的信息并不重要,但它足够重要,我不能只是删除模块。目前,我通过修补模块以在请求中添加 curl 超时来修复它:

curl_setopt($ch, CURLOPT_TIMEOUT, 1);

但是,我不想留下 hack,因为它会在下次更新时消失,而且由于问题是间歇性的,因此不会在测试中出现。

有没有办法在 php.ini 设置中或通过代码在 PHP 中全局设置超时(我可以放入自定义模块)?

感谢您的帮助,

谢谢

【问题讨论】:

  • 可能是default_socket_timeout,默认是60秒
  • @PKeidel 为我解决了这个问题。请写一个答案,以便我接受。 :)

标签: php curl


【解决方案1】:

PHP 的 CURL 使用 php.ini 设置 default_socket_timeout。默认值为60,单位为秒。

【讨论】:

【解决方案2】:

作者和维护者声明here

使用libcurl时,如果没有设置CURLOPT_CONNECTTIMEOUT,那是什么 默认超时值(以秒为单位)?

没有。

更完整的答案可以在another Stackoverflow question找到:

libcurl 列出了以下连接超时特定设置:

  • CURLOPT_FTP_RESPONSE_TIMEOUT:无默认值(不确定)
  • CURLOPT_TIMEOUT:无默认值(不确定)
  • CURLOPT_TIMEOUT_MS:无默认值(不确定)
  • CURLOPT_CONNECTTIMEOUT:默认为 300 秒
  • CURLOPT_CONNECTTIMEOUT_MS:无默认值
  • CURLOPT_ACCEPTTIMEOUT_MS:默认为 60000 毫秒

PHP 源代码不会覆盖上述任何默认设置:https://github.com/php/php-src/blob/master/ext/curl/interface.c。 PHP 绑定覆盖的唯一相关参数是CURLOPT_DNS_CACHE_TIMEOUT,将默认值从 60 秒更改为 120 秒:https://github.com/php/php-src/blob/a0e3ca1c986681d0136ce4550359ecee2826a80c/ext/curl/interface.c#L1926

所以:不,php-curl 不支持default_socket_timeout 设置。在调查一些客户问题时,我们甚至发现有几台服务器卡住了一天前(甚至几个月前)的 curl 请求。

而且似乎没有办法全局设置超时。

【讨论】:

    猜你喜欢
    • 2016-04-16
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    相关资源
    最近更新 更多