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

Тема в разделе "Веб-технологии", создана пользователем Bandit228, 28 мар 2016.

Метки:
  1. Bandit228

    Bandit228

    Сообщения:
    102
    Симпатии:
    10
    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$x1);
        }

        
    $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:
    Код:
    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 через пост мне как-то привычней.
     
    Последнее редактирование: 28 мар 2016
    White Wolf, 666FoX666 и AS TRO нравится это.
  2. w0key

    w0key

    Сообщения:
    4
    Симпатии:
    0
    Активация винды прикольнула :DD
     
  3. CrazyHackGUT

    CrazyHackGUT Меня здесь нет

    Сообщения:
    814
    Симпатии:
    518
    json_encode()? Не, не слышал....
     
    White Wolf нравится это.
  4. Grey83

    Grey83

    Сообщения:
    316
    Симпатии:
    93
    а если серверов больше одного?
    тогда проще сделать чтобы юзербар генерился типа этого:
    [​IMG]
    и вывести их куда-то