2011-11-02 62 views
8

該代碼總是失敗(即,$result是布爾false):curl超時小於1000ms總是失敗?

 $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $path); 
    curl_setopt($ch, CURLOPT_HEADER, TRUE); 
    curl_setopt($ch, CURLOPT_NOBODY, TRUE); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    $curl_version = curl_version(); 

    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 999); 

    $result = curl_exec($ch); 
    curl_close($ch); 

該代碼總是成功(即,$result是包含標題字符串):

 $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $path); 
    curl_setopt($ch, CURLOPT_HEADER, TRUE); 
    curl_setopt($ch, CURLOPT_NOBODY, TRUE); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    $curl_version = curl_version(); 

    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 1000); 

    $result = curl_exec($ch); 
    curl_close($ch); 

唯一的區別在於我把超時時間從999ms改爲1000ms。

這必須是curl中的錯誤或者我錯過的連接超時文檔中的某種最小值。這是什麼?我的錢在後者上。

回答

12

來自:http://www.php.net/manual/en/function.curl-setopt.php

等待的毫秒數,同時試圖連接。使用0等待無限期。 如果構建libcurl以使用標準系統名稱解析器,那麼連接的該部分仍將使用全秒分辨率超時,允許的最小超時時間爲1秒

+0

哇,我怎麼錯過了?! – Trott

+0

好的,我在文檔中看到了這一點,但我真的不明白它的意思,以及我如何使它的工作範圍小於1000.任何幫助你可以給我,將不勝感激,謝謝! –

+0

你必須爲你自己編譯libcurl,使用'--enable-threaded-resolver',然後編譯curl擴展名以反對它。 –