Чтобы избежать ожидания в течение дюжины секунд, когда все идет не так, вы можете установить еще пару параметров, например (см. curl_setopt
):
CURLOPT_CONNECTTIMEOUT
: количество секунд ожидания при попытке подключения. Используйте 0, чтобы ждать бесконечно.
- достаточно установить пару секунд
CURLOPT_TIMEOUT
: максимальное количество секунд, необходимое для выполнения функций cURL.
CURLOPT_DNS_CACHE_TIMEOUT
: количество секунд, в течение которых записи DNS хранятся в памяти. Эта опция по умолчанию установлена на 120 (2 минуты).
- Возможно, вы могли бы установить более высокое значение
Если пользователи вашего веб-сайта обычно используют его более чем на одной или двух страницах, может быть интересно сохранить эту информацию в $_SESSION
и извлекать ее только один раз.
Например, вы можете получить его, только если значение, сохраненное в сеансе, было выбрано более 5 минут назад. Вероятно, это сэкономит пару звонков : -)
Другим способом может быть сделать это на стороне клиента:
- получить изображение с тегом
<img>
- в случае «онлайн», используйте изображение, которое загружается ОК
- подключите обработчик к «
load
» даже изображения, чтобы заменить его текстом
- в случае «офлайн», используйте изображение в 404
- подключите обработчик к «
error
» даже изображения, чтобы заменить его текстом
Это не очень хорошо (это вроде "хакерский", неправильно), но должно работать; -)
Ваше изображение будет таким:
<div id="arround-1">
<img id="img-1" src="http://big.oscar.aol.com/imperialpalaces?on_url=http://www.ipalaces.org/support/widget/status_green.gif&off_url=http://this.is-a-404-error.com"
onload="replace_img_status(1, 1);"
onerror="replace_img_status(1, 0);"
/>
</div>
Вы видите, что, если пользователь подключен, <img>
, наконец, приводит к существующему изображению; таким образом, "load
" даже будет запущен.
И, в случае, если пользователь не подключен, <img>
в конечном итоге приведет к изображению, которого не существует (это дает ошибку 404) ; Итак, событие «error
» будет запущено.
Теперь вам нужно позаботиться об этих двух случаях примерно так:
<script type="text/javascript">
var replace_img_status = function (num, status) {
var div = document.getElementById('arround-' + num);
if (div) {
if (status == 1) {
div.innerHTML = 'Online';
} else {
div.innerHTML = 'Offline';
}
}
};
</script>
Если status
равно 1
, мы отображаем «Online», а в другом случае («error») мы отображаем «Offline»: -)
Но даже если кажется, что оно работает, мне не очень нравится это решение ^^