[PHP,JS] Получаем данные с сервера в json формате и выводим на сайт.

Bandit228

Участник
Сообщения
102
Реакции
31
1.PNG

Сделал такой скрипт у себя, решил выложить сюда.
mon.php:
PHP:
if ($_GET['id'] == 'monitoring')
{
function source_query($ip){
    $cut = explode(":", $ip);
    $HL2_address = $cut[0];
    $HL2_port = $cut[1];

    $HL2_command = "\377\377\377\377TSource Engine Query\0";

    $HL2_socket = fsockopen("udp://".$HL2_address, $HL2_port, $errno, $errstr,3);
    fwrite($HL2_socket, $HL2_command);
    $JunkHead = fread($HL2_socket,4);
    $CheckStatus = socket_get_status($HL2_socket);

    if($CheckStatus["unread_bytes"] == 0)return 0;

    $do = 1;
    while($do){
        $str = fread($HL2_socket,1);
        $HL2_stats.= $str;
        $status = socket_get_status($HL2_socket);
        if($status["unread_bytes"] == 0){
               $do = 0;
        }
    }
    fclose($HL2_socket);

    $x = 0;
    while ($x <= strlen($HL2_stats)){
        $x++;
        $result.= substr($HL2_stats, $x, 1);
    }

    $result = str_split($result);
    $info['network'] = ord($result[0]);$char = 1;
    while(ord($result[$char]) != "%00"){$info['name'] .= $result[$char];$char++;}$char++;
    while(ord($result[$char]) != "%00"){$info['map'] .= $result[$char];$char++;}$char++;
    while(ord($result[$char]) != "%00"){$info['dir'] .= $result[$char];$char++;}$char++;
    while(ord($result[$char]) != "%00"){$info['description'] .= $result[$char];$char++;}$char++;
    $info['appid'] = ord($result[$char].$result[($char+1)]);$char += 2;  
    $info['players'] = ord($result[$char]);$char++;
    $info['max'] = ord($result[$char]);$char++;
    $info['bots'] = ord($result[$char]);$char++;
    $info['dedicated'] = ord($result[$char]);$char++;
    $info['os'] = chr(ord($result[$char]));$char++;
    $info['password'] = ord($result[$char]);$char++;
    $info['secure'] = ord($result[$char]);$char++;
    while(ord($result[$char]) != "%00"){$info['version'] .= $result[$char];$char++;}

    return $info;
}

$q = source_query($ip_S.":".$port_S);
$map = $q['map'];
$players = $q['players'];
$max = $q['max'];
$percent = $players*100/$max;
if (!empty($map))
{
die("{\"map\": \"$map\",\"online\": \"$players\",\"max\": \"$max\",\"%\": \"$percent\",\"offline\": \"NO\"}");
}
if (empty($map));
{
die("
{
\"offline\": \"YES\"
}
");
}
}

Код вашего JS:
C-подобный:
document.getElementById('monitoring').innerHTML = "Загрузка информации...";
function get_monitoring() {
document.getElementById('monitoring').innerHTML = "Ждем ответа...";
$.post("mon.php?id=monitoring", {}, function(data) {
var obj = jQuery.parseJSON(data);
if (obj.offline == 'NO')
{
document.getElementById('monitoring').innerHTML = "Игроки онлайн: "+obj.online+" из "+obj.max+" | Карта: "+obj.map;
console.log ('Мониторинг загружен!');
}
else
{
document.getElementById('monitoring').innerHTML = "Ошибка при получении данных с сервера!";
console.log ('Ошибка при получении данных!');
}
});
}
HTML:
HTML:
<span id='monitoring'></span>
<body> поменять на <body onload='get_monitoring()'>
Для работы скрипта нужен jQuery.
Извиняюсь за "интересный" способ определения сервера, скрипт мониторинга взял из паблика и с мониторингом Source опыта 0. Ну а в JS через пост мне как-то привычней.
 
Последнее редактирование:

w0key

Участник
Сообщения
33
Реакции
4
Активация винды прикольнула :DD
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
а если серверов больше одного?
тогда проще сделать чтобы юзербар генерился типа этого:
server_3.png

и вывести их куда-то
 
Сверху Снизу