Перейти на другой сервер при отказе первого,curl

Использую такую конструкцию.

   private function options($curl)
{

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $this->headers);
    curl_setopt($curl, CURLOPT_USERAGENT, 
    $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($curl, CURLOPT_REFERER, $_SERVER['HTTP_REFERER']);
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 3);
    curl_setopt($curl, CURLOPT_TIMEOUT, 3);

    $this->result = curl_exec($curl);

    return curl_getinfo($curl, CURLINFO_HTTP_CODE) == 200;
}

Проверяю получил ли ответ от первого сервера, если нет, то тогда перейти на второй.

 public function runHandler()
{
    if ($this->options($this->curlOne)) {
        return strnatcasecmp(trim($this->result),"true") == 0 ? true : false;
    } else {
        if ($this->options($this->curlTwo)) {
            return strnatcasecmp(trim($this->result),"true") == 0 ? true : false;
        } else {
            return false;
        }
    }
}

Проблема в том, что лягла база данных, ответ от сервера есть,но обработка данных совсем не происходит,переход на сервер другой не переходит,жду ответа от сервера 20 секунд,страница клиента грузится так ж 20 секунд. Подскажите как маниврировать между серверами?


Ответы (1 шт):

Автор решения: Daheim

Решил вопрос одной строкой.

curl_setopt($curl, CURLOPT_TIMEOUT_MS, 700);

установить максимальное время, в течение которого разрешено принимать запрос. Указывается в миллисекундах.

Учитывать особенности загрузки, потому что поставил 500 и не всегда получал ответ от curl, так как был закрыто соединение и обращение было к другому серваку,хотя первый был рабочий)

→ Ссылка