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