2011-11-02 5 views
8

Questo codice sempre fallisce (cioè, $result è booleano false):timeout di curl inferiore a 1000 ms non riesce sempre?

 $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); 

Questo codice riesce sempre (cioè $result è una stringa contenente l'header):

 $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); 

L'unica differenza è che Ho cambiato il timeout da 999 ms a 1000 ms.

Questo deve essere un bug in arricciatura o una sorta di minimo nella documentazione per i timeout di connessione che ho perso. Cos'è questo? I miei soldi sono su quest'ultimo.

risposta

12

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

Il numero di millisecondi di attesa durante il tentativo di connessione. Usa 0 per aspettare indefinitamente. Se libcurl è stato creato per utilizzare il resolver del nome di sistema standard, quella parte della connessione utilizzerà comunque la risoluzione full-second per i timeout con un timeout minimo consentito di un secondo.

+0

Wow, come mi sono perso ?! – Trott

+0

Ok, ho visto questo nella documentazione ma non capisco davvero cosa significhi e come posso farlo funzionare con un valore inferiore a 1000. Qualsiasi aiuto tu possa darmi sarebbe apprezzato, grazie! –

+0

Devi compilare libcurl per te, usando '--enable-threaded-resolver' e poi compilare l'estensione curl per php contro di essa. –