PHP cURL:CURLOPT_CONNECTTIMEOUT与CURLOPT_TIMEOUT

2022-08-30 11:07:09

PHP 有两个与超时相关的选项:和 。CURLOPT_CONNECTTIMEOUTCURLOPT_TIMEOUT

PHP网站上的描述有点模糊。有什么区别?

举一个真实的例子:假设您正在通过cURL将GET vars发送到URL,并且您希望接收XML回,这将与连接到服务器所需的最大时间以及将XML发送回所需的最大时间有关?CURLOPT_CONNECTTIMEOUTCURLOPT_TIMEOUT


答案 1

CURLOPT_CONNECTTIMEOUT不是CURLOPT_TIMEOUT所代表的时间片段

如果CURLOPT_CONNECTTIMEOUT设置为 3 秒,CURLOPT_TIMEOUT 设置为 4 秒,则执行最多可能需要 7 秒。

我通过模拟缓慢的服务器连接(iptables丢弃)来测试这一点。


答案 2

CURLOPT_CONNECTTIMEOUT是允许与服务器建立连接的最大时间(以秒为单位)。可以将其设置为 0 以禁用此限制,但这在生产环境中是不可取的。

CURLOPT_TIMEOUT是将限制单个 cURL 扩展函数调用的执行的最长时间(以秒为单位)。请注意,此设置的值应包括CURLOPT_CONNECTTIMEOUT的值。

换句话说,CURLOPT_CONNECTTIMEOUT是CURLOPT_TIMEOUT表示的时间段,因此CURLOPT_TIMEOUT的值应大于CURLOPT_CONNECTTIMEOUT的值。

CURLOPT_CONNECTTIMEOUT和CURLOPT_TIMEOUT之间的差异


推荐