PHP:默认的cURL超时时间值

71

PHP cURL的默认超时时间是多少?我能从编码中获取这个值吗?

3个回答

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

默认超时时间是0(零),这意味着在传输过程中永不超时。 http://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html - diyism
2
是的,这在我的回答中有提到:CURLOPT_TIMEOUT:没有默认值(无限期) - Michael Dowling

41

默认情况如下:

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

以前的答案(供参考):

我的理解是,除非使用CURLOPT_TIMEOUT/CURLOPT_CONNECTTIMEOUT进行覆盖,否则CURL遵循default_socket_timeout。

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

8
你能证实这个吗?我在 PHP curl 绑定文件(https://github.com/php/php-src/blob/master/ext/curl/interface.c)里没有找到任何证明。我还尝试将我的 default_socket_timeout ini 设置为 1 并下载一个大文件,但是 curl 没有超时——这意味着仍然使用默认值 0(无限制)。然后我在 curl 句柄上显式设置了 CURLOPT_TIMEOUT 值为一秒钟,尝试下载同样的文件,我注意到连接确实在 1 秒钟后被切断了。 - Michael Dowling
5
@MichaelDowling 的评论提供了更多信息和证据来回答这个问题。 - Jeremy Lindblom
3
这些开发者似乎都认同 - CURL并不遵循PHP的default_socket_timeout - Alex
1
嘿Raptor...你有时间的话...这个答案显然是错误的(虽然它是一个不错的第一次尝试),而Dowling的答案是正确的。你能否(或者有足够管理员权限的人)将其设为被接受的答案呢? - ftrotter

10

谢谢你的发现。有权威的答案吗? - Raptor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接