2012-10-03 38 views
1

我們編寫了一個php/ajax應用程序,該應用程序通過cURL連接到API。我們建立它保持連接不確定,它運行良好,我們很高興,定期使用它,然後轉移到其他項目。儘管設置爲不確定,cURL連接仍會丟失

我們最近重新訪問了它,發現它已經開始以不同的時間間隔超時。我們檢查了腳本尋找可能影響cURL調用的任何內容。沒有。

我們有,並且有,在我們的簡單腳本捲曲這些選項:

$sch = curl_init(); 
curl_setopt($sch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($sch, CURLOPT_URL, $test_url); 
curl_setopt($sch, CURLOPT_WRITEFUNCTION, 'get_data'); 
curl_setopt($sch, CURLOPT_NOSIGNAL, 1); 
curl_setopt($sch, CURLOPT_TIMEOUT,0); 
$output = curl_exec($sch); 

我的理解是,NOSIGNAL和超時選項的作用是什麼讓我們的連接打開。

但它不工作。

我有兩個問題。
1)關於編碼的任何想法,cURL中缺少的任何內容,或者代碼中可能會影響連接的其他位置?什麼會影響連接?
2)如果問題不在編碼中,我們如何檢查上游連接。如何檢測連接實際上被丟棄的位置以及爲什麼?

謝謝您的建議,如果您有任何問題或需要其他信息,請不要猶豫,發佈。

感謝

山姆

回答

0

您需要設置CURLOPT_CONNECTTIMEOUT還有:

curl_setopt($sch, CURLOPT_CONNECTTIMEOUT,0); 

此外,嘗試添加

if (curl_errno($sch) > 0) { 
    error_log(sprintf(
     "Curl error %d: %s for %s\n", 
     curl_errno($sch), 
     curl_error($sch), 
     $test_url 
    )); 
} 

,看看到底什麼是失敗。

+0

謝謝羅斯 - 我們在腳本中沒有connecttimeout,因爲連接沒有問題。問題是保持聯繫。但是我沒有將它插入到我們的腳本中,並且它在30-120秒後仍然斷開連接。我們也有腳本來檢查curl_error。我們感謝您的回答。 – user1715546

+0

它發生在所有的網址上,還是隻發生在某些網址上?什麼是CURL的確切錯誤信息? –

+0

您無意中指出我們正確的方向,我們不再相信cURL有失敗。在試圖打印curl_errors時,我評論說'curl_setopt($ sch,CURLOPT_WRITEFUNCTION,'get_data');'以防止它在執行curl_exec時運行。 CURL連接並保持連接。我們很快就責怪cURL,我們錯了。感謝您對羅斯的幫助,對於我在這件事上沒有盡到盡職調查表示歉意。 – user1715546