2009-08-14 51 views
1

我們編寫了一個腳本,用於從外部服務器提取數據。如果服務器出現故障,我們不希望我們的服務器等待數據,因爲我們處理了大量數據,而且我們不希望它陷入停滯狀態。爲了解決這個問題,如果超過幾百毫秒,我們會試圖超時。如何在PHP5 curl調用上設置超時?已發佈的CURL選項似乎不起作用

我發現了一些文件說CURLOPT_TIMEOUT_MS和CURLOPT_CONNECTTIMEOUT_MS應該在我的版本的PHP和libcurl中的可用,但它似乎並不被超時,即使我的超時設置爲1毫秒。

$url = "http://www.cnn.com; 

      $ch = curl_init(); 
      curl_setopt($ch, CURLOPT_URL, $url); 
      curl_setopt($ch, CURLOPT_HEADER,0); //Change this to a 1 to return headers 
      curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
      curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1); 
      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 1); 

      $data = curl_exec($ch); 

      curl_close($ch); 

有沒有人知道我們做錯了什麼或另一種方式做到這一點?

回答

2

看到這個在unresponsive dns server and curl multi timeouts not working

」 ......我們已經取得了一些時間,其中一個 網站,我們拉的信息已 DNS服務器不響應當 這種情況發生在捲曲 設定的超時。 (php綁定)不能作爲 工作,它會在1分鐘後超時14 秒,「無法解析主機: www.yahoo.com(找不到域名)」 爲了在測試環境中做到這一點,我們 修改/etc/resolv.conf有一個 名稱服務器不存在 (nameserver 1.1.1.1)。沒有母校什麼 它們被設置在

(CURLOPT_CONNECTTIMEOUT, CURLOPT_CONNECTTIMEOUT_MS 
, CURLOPT_TIMEOUT, CURLOPT_TIMEOUT_MS) 

他們不超時的時候,我們不能讓 到DNS服務器。我使用curl_multi ,因爲我們有多個來源 ,我們從相同的 時間獲取信息。下面的例子使一個 呼叫例如簡單。並且作爲 注意事項curl_errno不會返回 錯誤代碼,即使存在 錯誤。不知道爲什麼......「