Тайм-аут curl менее 1000 мс всегда терпит неудачу? - PullRequest
9 голосов
/ 03 ноября 2011

Этот код всегда завершается ошибкой (т. Е. $result - логическое значение 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, либо какой-то минимум в документации по тайм-аутам соединения, которые я пропустил.Что он?Мои деньги на последнем.

Ответы [ 2 ]

13 голосов
/ 03 ноября 2011

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

Количество миллисекунд ожидания при попытке подключения.Используйте 0, чтобы ждать бесконечно. Если libcurl создан для использования стандартного распознавателя имен системы, эта часть соединения будет по-прежнему использовать разрешение в полных секундах для таймаутов с минимально допустимым тайм-аутом, равным одной секунде .

4 голосов
/ 20 января 2015

Другой способ справиться с этим - установить для параметра CURLOPT_NOSIGNAL значение 1 в дополнение к CURLOPT_CONNECTTIMEOUT_MS.См. http://curl.haxx.se/libcurl/c/CURLOPT_NOSIGNAL.html для получения дополнительной информации.

...