1. В базе данных создаешь новую колонку - status, в которую будешь писать online или offline, или 1 и 0, или как хочешь.
2. SQL-запрос
без лимит 25. Получаем список серверов из БД, делаем процедуру проверки на онлайн (в цикле, каждого сервера), примерный цикл:
while (ля-ля) {
тут процедура проверки на онлайн конкретного сервера
тут процедура обновления БД, вставляем напротив конкретно текущего сервера статус - онлайн/офлайн
}
3.
Новый SQL-запрос, теперь спокойно выбираем только те, которые online, т.е. select * from lala where status='online'
а дальше уже стандартная процедура - подсчет кол-ва полученных значений по запросу и вывод на экран с пагинацией, в зависимости от полученных результатов
PS: Или тоже самое только с первым запросом, но результаты проверки на онлайн/офлайн заносить в массив (только те, кто онлайн), включая название сервера (все данные, что нужны для вывода), делать расчет кол-ва массива (каждый раз может быть разное), и выводить на экран в цикле с пагинацией как обычно (в принципе тоже самое, только без сохранения статуса где либо, что вряд ли имеет значение, ибо такие запросы делать постоянно - прикинь, зашли 100 даже человек одновременно, как думаешь, скоро у них отклик на F5 будет? Проще задать
временной промежуток - т.е. создать в БД кроме колонки status еще колонку time, куда заносить последнее время проверки статуса, и при очередном запросе к сприпту проверять, если последнее время проверки было не больше 5 минут назад - просто выплевывать последние данные в соответствии с колонкой status. Ну или любой другой интервал - минута, 2 и т.д.)
и написать "статус проверяется каждые n минут"
--------------------------------------------------------------------
Код:
$query = "SELECT * FROM `list` where type='cs' ORDER BY golos DESC LIMIT $offset,25";
$serv = mysql_query($query, $connect) or die(mysql_error());
while ( $row = mysql_fetch_assoc($serv) ) {
$ip = $row['ip'];
$port = $row['port'];
$data = cs($ip,$port);
if ( $data['status'] == "off") { }
if ( $data['status'] == "on") {//Выводим сервер в список }
}
или (сорри, поздно увидел), по этому коду:
вот это
$query = "SELECT * FROM `list` where type='cs' ORDER BY golos DESC LIMIT $offset,25";
заменить на это:
$query = "SELECT * FROM `list` where type='cs' ORDER BY golos DESC";
а дальше так примерно:
if ( $data['status'] == "on") {
$serv[][port] = $row['port'];
$serv[][ip] = $row['ip'];
}
т.е. формуруем массив, в котором только те, кто онлайн. И только сейчас считаем кол-во значений полученного массива (т.е. у нас ВСЕ сереверы, кто ОНЛАЙН), а не только первые 25 (print_r ($serv)
а вот теперь постраничный вывод