PHP cURL 有兩個 option - CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT ,在 PHP: curl_setopt - Manual 的介紹分別是︰
CURLOPT_CONNECTTIMEOUT
The number of seconds to wait whilst trying to connect. Use 0 to wait indefinitely.
CURLOPT_TIMEOUT
The maximum number of seconds to allow cURL functions to execute.
我看完在想的是,那這兩個 option 彼此之間有沒有關係?會不會互相影響?
順手測了一下,答案是會。
CURLOPT_TIMEOUT 要比 CURLOPT_CONNECTTIMEOUT 大,不然設定 CURLOPT_CONNECTTIMEOUT 就沒有意義了。 CURLOPT_TIMEOUT 設定的秒數一到,就算 CURLOPT_CONNECTTIMEOUT 設定的秒數還沒到, cURL 也會被強制中斷。
我測試的方法是設定 CURLOPT_URL 連往不存在的 IP 。設定連往不存在的 Domain 沒法測,因為 cURL 去 DNS 查不到 IP 就不會繼續跑了,還用不到 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 。