@No4NaMe

Почему я не получаю JSON-ответ в конфиг, когда посылаю GET-запрос с помощью PHP?

Планировщик задач посылает запрос на получение ip:port и получает данные online_p и max из JSON затем записывает в конфиг...

Крон выдает такую ошибку и ничего не записывает, может кто подскажет в чем дело и где я допустил ошибку? Пол дня мучаюсь, извиняюсь за мой ломанный php язык...

Notice: Undefined index: play.mcraft.pw:19132 in /var/www/u0888407/data/www/test.mcraft.pw/cron.php on line 40

CRON
$serversData = [];
foreach ($config['servers'] as $server) {
    $serversData[] = $server['ip'] . '&port=' . $server['port'];
}
$serversData = implode(',', $serversData);

// Если у вас MCPE сервер, замените ниже mc на mcpe
$url = 'https://localhost/?ip=' . $serversData;

$response = @file_get_contents($url);
if ($response) {
    $response = json_decode($response, true);

    foreach ($config['servers'] as &$server) {
        $rData = $response[$server['ip']. '&port=' .$server['port']];
        if ($rData['status'] === true) {
            $server['onlinePlayers'] = $rData['players']['online_p'];
            $server['totalPlayers']  = $rData['players']['max'];
        } else {
            $server['onlinePlayers'] = 0;
            $server['totalPlayers']  = 0;
        }
    }

    savecfg();
}


КОНФИГ

'servers' => 
  array (
    0 => 
    array (
      'name' => 'TEST',
      'ip' => 'localhost',
      'port' => '19132',
      'password' => '123365',
      'totalPlayers' => 0,  << max 
      'onlinePlayers' => 0,  << online_p
      'showMonitoring' => true,
    ),
  ),


API СКРИПТ Для получение количество игроков
<?php
/*

	 * MCPEServerPingAPI written by GenesisMiuss

	 * Version: 1.0.0

	 * Website: https://miuss.org

	 * GitHub: https://github.com/miuss/mcapi-pe

*/

header('Content-type:text/json');

$servers = $_GET['ip'];
$port = $_GET['port'];

require_once 'ApiQuery.php';

$json = array(
    'status' => 'success',
    'online' => false,
    'servers' => array(
        'ip' => $servers,
        'port' => $port
    ),
    'motd' => null,
    'version' => array(
        'version' => null,
        'software' => null,
        'plugins' => null
    ),
    'players' => array(
        'online_p' => 0,
        'max' => 0,
    )
);

if ($Info = $Query->GetInfo()) {
    if($Info['GameName']=='MINECRAFTPE'){
        $json = array(
            'status' => 'success',
            'online' => true,
                
            'servers' => array(
                'ip' => $servers,
                'port' => $port
            ),

            'motd' => $Info['HostName'],

            'version' => array(
                'version' => $Info['Version'],
                'software' => $Info['Software'],
                'plugins' => $Info['Plugins']
            ),

            'players' => array(
                'online_p' => $Info['Players'],
                'max' => $Info['MaxPlayers']
            )
        );
    }
}

echo json_encode($json, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);
?>


СТАРЫЙ КРОН
$serversData = [];
foreach ($config['servers'] as $server) {
    $serversData[] = $server['host'] . '&port=' . $server['port'];
}
$serversData = implode(',', $serversData);

// старый внешний сервис но он уже не рабочий, поэтому было принято решение использовать другой скрипт
$url = 'https://use.gameapis.net/mcpe/query/players/' . $serversData;

$response = @file_get_contents($url);
if ($response) {
    $response = json_decode($response, true);

    foreach ($config['servers'] as &$server) {
        $rData = $response[$server['host']. ':' .$server['port']];
        if ($rData['status'] === true) {
            $server['onlinePlayers'] = $rData['players']['online'];
            $server['totalPlayers']  = $rData['players']['max'];
        } else {
            $server['onlinePlayers'] = 0;
            $server['totalPlayers']  = 0;
        }
    }

    savecfg();
}


Тобиш по порядку: Крон выполняет задачу затем проверяет какой сервер выбирать где включена функция true затем эти же данные он выбирает из API путём json и записывает в конфиг на количество онлайн игроков, но крон этого всего не делает тоесть всплывает ошибка
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 2
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Вы б хотя-бы на существование данных проверялись-бы...
foreach ($config['servers'] as &$server) {
        if (!isset($response[$server['host']. ':' .$server['port']])) continue;
        $rData = $response[$server['host']. ':' .$server['port']];
        if (isset($rData['status']) AND $rData['status'] === true) {
            $server['onlinePlayers'] = $rData['players']['online'];
            $server['totalPlayers']  = $rData['players']['max'];
        } else {
            $server['onlinePlayers'] = 0;
            $server['totalPlayers']  = 0;
        }
    }
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Если разуть глаза и прочитать ошибку, то у тебя работает старый крон, а не новый.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы