PHP:默认 cURL 超时值

Posted

技术标签:

【中文标题】PHP:默认 cURL 超时值【英文标题】:PHP: Default cURL timeout value 【发布时间】:2012-05-05 17:44:34 【问题描述】:

什么是默认的 php cURL 超时值?我可以从编码中获得价值吗?

【问题讨论】:

【参考方案1】:

libcurl 中没有。 http://curl.haxx.se/mail/lib-2003-05/0097.html

【讨论】:

感谢您的发现。有权威答案吗?【参考方案2】:

默认如下:

CURLOPT_FTP_RESPONSE_TIMEOUT:无限期 CURLOPT_TIMEOUT:无限期 CURLOPT_TIMEOUT_MS:无限期 CURLOPT_CONNECTTIMEOUT:300 秒 CURLOPT_CONNECTTIMEOUT_MS:无限期 CURLOPT_ACCEPTTIMEOUT_MS:60 秒

上一个答案(供参考):

我的理解是 CURL 遵循 default_socket_timeout 除非被 CURLOPT_TIMEOUT/CURLOPT_CONNECTTIMEOUT 覆盖。

$socket_timeout = ini_get('default_socket_timeout'); // timeout in seconds

【讨论】:

你能备份一下吗?我在 PHP curl 绑定 (github.com/php/php-src/blob/master/ext/curl/interface.c) 中找不到任何可以证明这一点的东西。我还尝试将我的default_socket_timeout ini 设置设置为 1 并下载了一个大文件,但 curl 从未超时——这意味着仍在使用默认值 0(无限期)。然后我在 curl 句柄上显式设置了一秒的 CURLOPT_TIMEOUT 值,尝试下载相同的文件,我注意到连接在 1 秒后肯定被切断了。 @MichaelDowling 的评论提供了更多信息和证据来回答这个问题。 这些开发者 appear to agree - CURL 不尊重 PHP 的 default_socket_timeout 嘿猛禽......当你有时间......这个答案显然是不正确的(虽然它是一个很好的第一次尝试)并且道林斯的答案是正确的。您(或具有足够管理能力的人)能否将其改为接受的答案?【参考方案3】:

这取决于您所说的超时设置。

cURL 提供了各种特定于连接超时设置的选项。其中一些选项有一个设定的限制,而其他选项则允许转移花费无限的时间。为了了解哪些值有默认设置,哪些没有,需要查看 libcurl 的 curl_easy_setopt() 函数:http://curl.haxx.se/libcurl/c/curl_easy_setopt.html

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 会将 CURLOPT_TIMEOUT 设置为 default_socket_timeout ini 设置中指定的值。我无法在 PHP 源代码中找到任何支持此声明的内容,并且我无法通过下载 default_socket_timeout 设置为 1 秒的非常大的文件来触发 cURL 超时。

【讨论】:

默认超时为 0(零),这意味着在传输过程中它永远不会超时。 curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html 是的。这就是我的回答:CURLOPT_TIMEOUT: No default (indefinite)

以上是关于PHP:默认 cURL 超时值的主要内容,如果未能解决你的问题,请参考以下文章

CURL超时时间设置

MySQL连接超时自动断开连接应该怎样处理

php使用curl设置超时的重要性

PHP cURL 随机超时,收到 100% 的正文

在PHP中设置Curl的超时

检查PHP curl请求是否已超时