2014-11-17 2 views
0

У меня есть простой PHP скрипт, который использует CURL, чтобы захватить содержимое URL:PHP не Curl принимая тайм-аутов во внимание

$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_CONNECTTIMEOUT и CURLOPT_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; 
?> 

Cheers, Ika

Смежные вопросы