тайм-аут curl меньше 1000ms всегда терпит неудачу?
этот код всегда терпит неудачу (т. е. $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);
единственная разница в том, что я изменил тайм-аут с 999ms на 1000ms.
это должно быть либо ошибка в curl, либо какой-то минимум в документации для таймаутов соединения, которые я пропустил. Что это? Я ставлю на последнее.
2 ответов
from: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 для получения дополнительной информации.