Перейти на другой сервер при отказе первого,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 шт):
Решил вопрос одной строкой.
curl_setopt($curl, CURLOPT_TIMEOUT_MS, 700);
установить максимальное время, в течение которого разрешено принимать запрос. Указывается в миллисекундах.
Учитывать особенности загрузки, потому что поставил 500 и не всегда получал ответ от curl, так как был закрыто соединение и обращение было к другому серваку,хотя первый был рабочий)