9

このコードは常に失敗します (つまり、$resultBoolean ですfalse)。

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

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

これは、curl のバグであるか、接続タイムアウトに関するドキュメントに記載されている最小限のバグである必要があります。それはどれですか?私のお金は後者にあります。

4

2 に答える 2

13

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

接続試行中に待機するミリ秒数。無期限に待機するには、0 を使用します。libcurl が標準のシステム名リゾルバを使用するように構築されている場合、接続のその部分では、タイムアウトに 1 秒の最小タイムアウトが許可された 1 秒単位の解決が引き続き使用されます。

于 2011-11-02T21:43:11.540 に答える
4

これに対処する別の方法は、CURLOPT_NOSIGNALに加えてオプションを 1 に設定することCURLOPT_CONNECTTIMEOUT_MSです。詳細については、 http://curl.haxx.se/libcurl/c/CURLOPT_NOSIGNAL.htmlを参照してください。

于 2015-01-20T10:24:19.380 に答える