Answer the question
In order to leave comments, you need to log in
Why am I not getting a JSON response in the config when I send a GET request using PHP?
The task scheduler sends a request to get ip:port and receives the online_p and max data from JSON and then writes it to the config ...
Cron gives such an error and does not write anything, can someone tell me what's wrong and where did I make a mistake? I've been suffering for half a day, sorry for my broken php language...
Notice: Undefined index: play.mcraft.pw:19132 in /var/www/u0888407/data/www/test.mcraft.pw/cron.php on line 40
$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,
),
),
<?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();
}
Answer the question
In order to leave comments, you need to log in
You would at least check for the existence of data, would ...
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;
}
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question