2014-11-17 55 views
0

我有一個使用捲曲搶URL內容的簡單的PHP腳本:PHP捲曲不採取暫停時間到

$curlOptions = [ 
    CURLOPT_URL => $url, 
    CURLOPT_CUSTOMREQUEST => 'GET', 
    CURLOPT_HEADER => TRUE, 
    CURLOPT_FOLLOWLOCATION => TRUE, 
    CURLOPT_MAXREDIRS => 5, 
    CURLOPT_CONNECTTIMEOUT => 3, 
    CURLOPT_TIMEOUT => 5, 
    CURLOPT_NOBODY => TRUE, 
    CURLOPT_RETURNTRANSFER => TRUE, 
]; 

$curl = curl_init(); 
curl_setopt_array($curl, $curlOptions); 
$curlResult = curl_exec($curl); 
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
curl_close($curl); 

然而,在某些情況下,我清楚地看到20秒以上eventhough持續時間我指定了較低的超時值CURLOPT_CONNECTTIMEOUTCURLOPT_TIMEOUT

如何在指定的值處使cURL超時?

UPDATE:

所有捲曲的是需要20秒才能完成返回0。它的「身份」可能是DNS問題,即它無法解析主機。我會假設CURLOPT_CONNECTTIMEOUT會照顧這個?

+0

做你試過CURLOPT_TIMEOUT_MS? –

+0

我嘗試過'CURLOPT_TIMEOUT_MS'設置爲5000,但似乎沒有區別。 – Luke

+0

嘗試重置Curl「curl_reset($ ch);」並超過設置超時 –

回答

0

看來你的代碼完美工作。 我創建了一個簡單的睡眠頁面,您可以檢查它(獲取睡眠時間作爲輸入)。

如果您發現代碼沒有超時的情況,我建議檢查狀態代碼,並查看代碼是否掛在其他部分(可能不是捲曲本身)。

<?php 

    $url = "http://funnify.me/sleep.php?sleep=12"; // time in seconds 

    $curlOptions = [ 
     CURLOPT_URL => $url, 
     CURLOPT_CUSTOMREQUEST => 'GET', 
     CURLOPT_HEADER => TRUE, 
     CURLOPT_FOLLOWLOCATION => TRUE, 
     CURLOPT_MAXREDIRS => 5, 
     CURLOPT_CONNECTTIMEOUT => 8, 
     CURLOPT_TIMEOUT => 8, 
     CURLOPT_NOBODY => TRUE, 
     CURLOPT_RETURNTRANSFER => TRUE, 
    ]; 


    $curl = curl_init(); 
    curl_setopt_array($curl, $curlOptions); 
    $curlResult = curl_exec($curl); 
    $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
    curl_close($curl); 

    echo $status; 
?> 

乾杯, 伊卡