2011-11-02 10 views
8

このコードは常に(すなわち、$resultブールfalseである)の失敗:カール・タイムアウトは1000ms未満では常に失敗しますか?

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

このコードは常に(すなわち、$resultがヘッダを含む文字列である)成功:

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

唯一の違いは、ということですタイムアウトを999msから1000msに変更しました。

これは、カールのバグか、私は逃した接続タイムアウトのドキュメントにおける最小のいくつかの並べ替えのどちらかでなければなりません。どちらですか?私のお金は後者です。

答えて

12

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

接続しようとしている間に待機するミリ秒数。 0を使用して無期限に待ちます。 libcurlのは、標準システムネームリゾルバを使用するように構築されている場合、接続の部分は、依然として第1の許容最小タイムアウトとタイムアウトのフル秒の分解能を使用します。

+0

うわー、どのように私はそれを逃しました! – Trott

+0

[OK]を、あなたは私を与えることができるすべてのヘルプは、おかげでいただければ幸い1000よりも、私は、マニュアルでこれを見たが、私は実際にそれが何を意味するのか理解していないとどのように私は、これは小さな値で動作するようにすることができます! –

+0

'--enable-threaded-resolver'を使ってlibcurlをコンパイルしてから、phpのcurl拡張子をコンパイルしてコンパイルする必要があります。 –