query("SELECT * FROM online_players ORDER BY login_time DESC")->fetchArray(SQLITE3_ASSOC); $onlinePlayers = []; while ($row = $db->query("SELECT * FROM online_players ORDER BY login_time DESC")->fetchArray(SQLITE3_ASSOC)) { $onlinePlayers[] = $row; } // 重新查询 $stmt = $db->query("SELECT * FROM online_players ORDER BY login_time DESC"); $onlinePlayers = []; while ($row = $stmt->fetchArray(SQLITE3_ASSOC)) { $onlinePlayers[] = $row; } $result['online_players'] = $onlinePlayers; $result['online_players_count'] = count($onlinePlayers); } catch (Exception $e) { $result['online_players_error'] = $e->getMessage(); } // 2. online_player_hb表(心跳) try { $stmt = $db->query("SELECT * FROM online_player_hb"); $hb = $stmt->fetchArray(SQLITE3_ASSOC); $result['heartbeat'] = $hb; if ($hb) { $result['heartbeat_ago'] = time() - (int)$hb['last_seen'] . '秒前'; } } catch (Exception $e) { $result['heartbeat_error'] = $e->getMessage(); } // 3. weblogin_tokens表 try { $stmt = $db->query("SELECT player_name, created_at, expire_seconds, datetime(created_at, 'unixepoch', 'localtime') as created_time FROM weblogin_tokens ORDER BY created_at DESC LIMIT 20"); $tokens = []; while ($row = $stmt->fetchArray(SQLITE3_ASSOC)) { $tokens[] = $row; } $result['weblogin_tokens'] = $tokens; } catch (Exception $e) { $result['tokens_error'] = $e->getMessage(); } // 4. web_session_log表 try { $stmt = $db->query("SELECT player_name, login_time, datetime(login_time, 'unixepoch', 'localtime') as login_time_str FROM web_session_log ORDER BY login_time DESC LIMIT 20"); $sessions = []; while ($row = $stmt->fetchArray(SQLITE3_ASSOC)) { $sessions[] = $row; } $result['web_session_log'] = $sessions; } catch (Exception $e) { $result['sessions_error'] = $e->getMessage(); } // 5. web_login_verified表 try { $stmt = $db->query("SELECT * FROM web_login_verified ORDER BY verified_at DESC LIMIT 20"); $verified = []; while ($row = $stmt->fetchArray(SQLITE3_ASSOC)) { $verified[] = $row; } $result['web_login_verified'] = $verified; } catch (Exception $e) { $result['verified_error'] = $e->getMessage(); } // 6. users表(部分) try { $stmt = $db->query("SELECT player_name, logged_in FROM users LIMIT 20"); $users = []; while ($row = $stmt->fetchArray(SQLITE3_ASSOC)) { $users[] = $row; } $result['users'] = $users; } catch (Exception $e) { $result['users_error'] = $e->getMessage(); } ?> 调试 - Online Players

🔍 Online Players 调试页面

当前时间:

1. online_players 表 (Java推送的游戏登录状态)

⚠️ 表为空!没有玩家被标记为游戏中已登录

玩家名登录时间时间戳

总数:

2. 心跳 (online_player_hb)

上次心跳: ()

120) echo '

⚠️ 心跳超过120秒,下次同步时PHP会清空online_players表!

'; elseif ($ago > 60) echo '

⚠️ 心跳超过60秒

'; else echo '

✅ 心跳正常

'; ?>

⚠️ 无心跳记录

3. weblogin_tokens (Web登录Token)

⚠️ 无Token记录

玩家创建时间有效期(秒)

4. web_session_log (Web会话记录)

⚠️ 无会话记录

玩家登录时间时间戳

5. web_login_verified (Web密码验证)

⚠️ 无验证记录

玩家验证时间

6. users表 (玩家注册状态)

⚠️ 无注册玩家

玩家名logged_in

原始JSON