设置全局CURL超时

时间:2015-04-13 09:43:36

标签: php curl

我正在使用专有的第三方Drupal模块,通过curl查询第三方服务。这项服务最近变得有点松懈,这使我的页面加载速度变慢了很多,当我有大量的流量时,我正在使用max_connections。

此扩展程序查询的信息并不重要,但重要的是我不能只删除该模块。目前,我通过修补模块来修复它,为请求添加一个卷曲超时:

curl_setopt($ch, CURLOPT_TIMEOUT, 1);

但是,我不想将黑客留在原地,因为它会在下次更新时消失,因为问题是间歇性的,它不会出现在测试中。

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

感谢任何帮助,

由于

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:0)

作者和维护者声明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 请求。

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