Тайм-аут curl менее 1000 мс всегда терпит неудачу?
Этот код всегда терпит неудачу (т.е. $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 ответа
От: http://www.php.net/manual/en/function.curl-setopt.php
Количество миллисекунд ожидания при попытке подключения. Используйте 0, чтобы ждать бесконечно. Если libcurl создан для использования стандартного распознавателя имен системы, эта часть соединения будет по-прежнему использовать разрешение в полсекунды для тайм-аутов с минимально допустимым тайм-аутом в одну секунду.
Другим способом борьбы с этим было бы установить CURLOPT_NOSIGNAL
вариант 1 в дополнение к CURLOPT_CONNECTTIMEOUT_MS
, См. http://curl.haxx.se/libcurl/c/CURLOPT_NOSIGNAL.html для получения дополнительной информации.