Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
  • Данный раздел создан исключительно для релизов! Вопросы по лаунчеру или обвязке задавайте ТОЛЬКО в соответсвующей теме автора. Любые другие темы будут удалены, а авторы понесут наказание.

Веб PHP Мониторинг сервер(-ов)

Статус
Закрыто для дальнейших ответов.

Sparksys

Активный участник
Пользователь
Баллы
76
Искал мониторинг для своего сайта и наткнулся на замечательный мониторинг сделанный на js, в нем проверка онлайна шла на другом сайте, но сайт имел протокол HTTP (Как вы знаете нельзя подключить к сайту работающий на протоколе HTTPS, скрипты и стили с другого сайта который работает на HTTP.) и мне пришлось придумать скрипт который бы проверял онлайн на этом же сайте и работал под протоколом HTTPS.

Ну так приступим.
Создам в корне вашего сайта ну или в другом месте папку с именем "mon" и в ней создаем 4 файла:
  • index.php - в котором будет сам скрипт и который нужно будет подключить к сайту.
  • style.css - в котором будет лежать стил самого мониторинга.
  • form_online.php - в котором будет лежать оформление для включенного сервера.
  • form_ofline.php - в котором будет лежать оформление для выключенного сервера.
В файл index.php помещаем следующий скрипт (комментарии внутри):
PHP:
<?php
/* Масив с серверами */
$servers = array(
    array('name' => 'HiMagiC', 'address' => 'craftm.ru:25468'),
    array('name' => 'HiMagiC', 'address' => 'craftm.ru:25461')
);
/* ------------ */

/* Обработка масива */
foreach ($servers as $server) {
$json = file_get_contents('http://jsonmc.tk/old/?address='.$server[address]); //Импорт информации о сервере.
$dump = json_decode($json); //Де кодировка полученного json в объект масива.
$name = $server[name]; //Кладем в переменную имя сервера.
if (!$dump->{error}) { //Если сервер в сети то выводим следующее..
    $user = $dump->{player_online}.'/'.$dump->{player_max}; //Кладем в переменную значение текущего онлайна и максимального кол-во слотов через слейс "0/20".
    $record = 'Рекорд: '.$dump->{online_max}.' человек'; //Кладем в переменную рекордное число онлайн.
    include 'form_online.php'; //Подключаем оформление для включенного сервера.
} else { //Если сервер не в сети то выводим следующее..
    include 'form_ofline.php'; //Подключаем оформление для выключенного сервера.
    };
};
/* ------------ */
В этом варианте все сервера хранятся в масиве, но так же их можно хранить в БД MySQL и код будет выглядеть так: (Комментарии внутри)
PHP:
<?php
/* Подключение к БД */
$bdhost = 'localhost'; //Адрес MySQL сервера.
$bdlogin = 'spark'; //Логин к БД mySQL
$bdpass = '37004389'; //Пароль к БД mySQL
$bdname = 'test'; //БД mySQL.
$bdtable = 'server_list'; //Название таблицы с серверами. Это поле можно оставить как есть, оно предназначено для того если вы хотите назвать таблицу в БД по другому.

mysql_connect($bdhost, $bdlogin, $bdpass) or die(mysql_error()); //Соединяемся с mySQL.
mysql_query("SET NAMES 'utf8';"); //Кодировка соединения.
mysql_query("SET CHARACTER SET 'utf8';"); //Кодировка соединения.
mysql_query("SET SESSION collation_connection = 'utf8_general_ci';"); //Кодировка соединения.
mysql_select_db($bdname) or die(mysql_error()); //Соединяемся с БД mySQL.
/* ------------ */

/*Обработка MySQL данных */
$sql = mysql_query("SELECT * FROM $bdtable WHERE 1") or die(mysql_error()); //Вынимаем список серверов из БД и записываем в переменную.
while ($servers = mysql_fetch_array($sql)) { //Записываем масив в переменную.
    $servers = array($servers); //Записываем масив в масив и в переменную.

    foreach ($servers as $server) {
    $json = file_get_contents('http://jsonmc.tk/old/?address='.$server[address]); //Импорт информации о сервере.
    $dump = json_decode($json); //Де кодировка полученного json в объект масива.
    $name = $server[name]; //Кладем в переменную имя сервера.
    if (!$dump->{error}) { //Если сервер в сети то выводим следующее..
       $user = $dump->{player_online}.'/'.$dump->{player_max}; //Кладем в переменную значение текущего онлайна и максимального кол-во слотов через слейс "0/20".
        $record = 'Рекорд: '.$dump->{online_max}.' человек'; //Кладем в переменную рекордное число онлайн.
    include 'form_online.php'; //Подключаем оформление для включенного сервера.
} else { //Если сервер не в сети то выводим следующее..
    include 'form_ofline.php'; //Подключаем оформление для выключенного сервера.
        };
    };
};
/* ------------ */
Ну а сама таблица выглядит так:
Код:
CREATE TABLE IF NOT EXISTS `server_list` (
  `id` int(11) NOT NULL,
  `name` text NOT NULL,
  `address` text NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
В обоих случаях адрес указывается в формате IP : PORT !

В файл style.css посещаем следующее:
Код:
.block {
  width: 100%;
  height: 30px;
  border-width: 2px;
  border-style: dashed;
  margin-bottom: 6px;
}
.block_left {
    float: left;
    margin: 6px;
}
.block_right {
    float: right;
    margin: 6px;
}

.info {display: none;}
.block:hover .info {display: block;}
.block:hover .none {display: none;}

.color_ok {background-color: aliceblue; border-color: rgb(186, 204, 220);}
.color_error {background-color: rgb(225, 107, 107); border-color: rgb(223, 172, 179);}
В файл form_online.php посещаем следующее:
HTML:
<link rel="stylesheet" href="./style.css" />
<div class="block color_ok">
    <div class="none block_left"><?=$name?></div><div class="info block_left"><?=$record?></div>
    <div class="none block_right"><?=$user?></div><div class="info block_right"><a href="#">Еще</a></div>
</div>
В файл form_ofline.php посещаем следующее:
HTML:
<link rel="stylesheet" href="./style.css" />
<div class="block color_error">
    <div class="none block_left"><?=$name?></div><div class="info block_left">Технические работы</div>
    <div class="none block_right">Технические работы</div><div class="info block_right"><a href="#">Еще</a></div>
</div>

Далее вставляем в нужное место сайта с помощью include в PHP или с помощью iframe в HTML

Думаю все ясно и понятно, появятся вопросы, пишите здесь или в официальную тему на форум CraftM.ru тут.
 
Я конечно понимаю что можно писать говнокод на любом языке. Но может всё же научитись писать чистый код ? Мало того что парсер не твой, но может не стоит так говнокодить ?
 
Я конечно понимаю что можно писать говнокод на любом языке. Но может всё же научитись писать чистый код ? Мало того что парсер не твой, но может не стоит так говнокодить ?
Говнокодю, не говнокодю мне как то пофиг, я пишу коды на тех знаниях которые знаю. Парсер да не мой, но я сделал код для того чтобы вывести значения из этого парсера в нормальном виде. Если не нравится не стоит отвечать тогда, я такого не приветствую.
 
Говнокодю, не говнокодю мне как то пофиг, я пишу коды на тех знаниях которые знаю. Парсер да не мой, но я сделал код для того чтобы вывести значения из этого парсера в нормальном виде. Если не нравится не стоит отвечать тогда, я такого не приветствую.
Как-то убого выглядит
 
Немного ашарашен этой темой. Зачем создавать парсерв парсера, если можно самому поставить у себя скрипт (не думаю, если есть https, то будет бесплатный хостинг)
P.S. скоро обновлю с @Vladlen_198 jsonmc
Для ТС могу посоветовать http://rubukkit.org/threads/monajax-v1-4-1.99529/
 
Зачем создавать парсерв парсера
1. Начальный парсер вынимает данные токо с 1 сервера который указан в адресе.
2. Начальный парсер выводит Json строку.

3. Мой как вы говорите парсер парсера, выводит мониторинг указанных серверов, преобразовывает json строку в переменные и отображает в нормальном виде.
 
1. Начальный парсер вынимает данные токо с 1 сервера который указан в адресе.
2. Начальный парсер выводит Json строку.

3. Мой как вы говорите парсер парсера, выводит мониторинг указанных серверов, преобразовывает json строку в переменные и отображает в нормальном виде.
А если кто-то на этой хрени решит свой рейтинг запилить с тыщей сервов?))
Ох и забанят нахер такое чудо за ддос))
Как говорилось раннее, больше одного сервера лучше опрашивать самому, а не парсить парсер, который может тоже парсит парсер. Иначе все погрязнем в лагах))
PHP:
function query($ip, $port, $timeout = 3)
{
    if (!function_exists('socket_create'))echo "Нихера сокеты недоступны";
   else{
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => (int)$timeout, 'usec' => 0));
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => (int)$timeout, 'usec' => 0));
    if ($socket === FALSE || @socket_connect($socket, $ip, (int)$port) === FALSE)return FALSE;
    socket_send($socket, "\xFE\x01", 2, 0);
    $len = socket_recv($socket, $data, 512, 0);
    socket_close($socket);
    if ($len < 4 || $data[0] !== "\xFF")return FALSE;
    $data = substr($data, 3);
    $data = iconv('UTF-16BE', 'UTF-8', $data);
    if ($data[1] === "\xA7" && $data[2] === "\x31"){$data = str_replace(array("§a", "§b", "§c", "§d", "§e", "§f", "§0", "§1", "§2", "§3", "§4", "§5", "§6", "§7", "§8", "§9"),'', $data); $data = explode("\x00", $data); return Array('HostName' => $data[3], 'Players' => intval($data[4]), 'MaxPlayers' => intval($data[5]), 'Version' => $data[2]);}
    $data = str_replace(array("§a", "§b", "§c", "§d", "§e", "§f", "§0", "§1", "§2", "§3", "§4", "§5", "§6", "§7", "§8", "§9"),'', $data); //если 1.3
    $data = explode("\xA7", $data);
    return Array('HostName' => substr($data[0], 0, -1), 'Players' => isset($data[1]) ? intval($data[1]) : 0, 'MaxPlayers' => isset($data[2]) ? intval($data[2]) : 0, 'Protocol' => 0, 'Version' => '1.3');
   }
return;
}
Например шмат говнокода xpaw`а. Этой функцией можно без опаски и с сосоелем на борту опрашивать тысячи сервов. делов-то
 
Последнее редактирование:
Вообще-то нет, пока такие как Вы не перестанут блистать своими проницательными выкаками про набивание постов и подъёмы старых тем)))
Поясню идею и для очередного Вас. Я сюда зашел с поисковика - с яндекса, увидел то, как лучше вообще не делать и определил, почему так делать нельзя и как делать лучше. Для тех, кто следующим зайдет на эту тему с поисковика, а не для тех, кто мечтает выискивать так называемых некропостеров.
Это, по идее, у меня должен назревать вопрос: "У Вас всё нормально?"))
 
Статус
Закрыто для дальнейших ответов.

Поделиться этой страницей

Назад
Верх