2009年7月29日 星期三

PHP cURL 中 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 的關聯

PHP cURL 中 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 的關聯

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 。