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 超时值的主要内容,如果未能解决你的问题,请参考以下文章