📄 Source: players.php
<?php
require_once __DIR__ . '/../auth.php';
require_once __DIR__ . '/../lib/servers.php';
require_once __DIR__ . '/../lib/rcon.php';
require_auth_json();
$CFG = $GLOBALS['__CFG'];
$name = $_GET['server'] ?? '';
if ($name === '' || strpos($name, '/') !== false || strpos($name, '..') !== false) {
http_response_code(400);
echo json_encode(['ok' => false, 'error' => 'Invalid server name']);
exit;
}
$path = server_path($CFG['server_root'], $name);
$rconCfg = rcon_from_properties($path, $CFG['rcon']);
if ($rconCfg['password'] === '') {
header('Content-Type: application/json');
echo json_encode([
'ok' => false,
'error' => 'RCON not configured (enable-rcon + rcon.password in server.properties)',
]);
exit;
}
try {
$r = new Rcon($rconCfg['host'], (int)$rconCfg['port'], $rconCfg['password'], (int)$rconCfg['timeout']);
$list = $r->command('list');
$r->close();
$players = [];
if (preg_match('/players online:\s*(.*)$/i', $list, $m)) {
$names = array_filter(array_map('trim', explode(',', $m[1])));
$players = array_values($names);
}
header('Content-Type: application/json');
echo json_encode([
'ok' => true,
'raw' => $list,
'players' => $players,
]);
} catch (Throwable $e) {
header('Content-Type: application/json');
echo json_encode(['ok' => false, 'error' => $e->getMessage()]);
}
← Back