在HTML中通过PHP提取API JSON数据失败求助
问题排查与解决
核心问题
- 文件扩展名错误:你用的是
.html后缀,服务器默认不会解析HTML文件中的PHP代码,只会把PHP代码当作普通文本输出,这就是你看到奇怪内容的原因。 - HTML结构错误:代码里
<head>标签没有闭合,而且把PHP输出逻辑放在<head>里不符合页面结构规范,应该放到<body>区域。 - 缺少错误处理:API请求可能失败、JSON解析可能出错,或者返回的数据里没有
players->list,直接访问会导致报错。
修正后的代码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>MC服务器状态</title> </head> <body> <?php // 初始化变量避免报错 $status = null; $version = '获取失败'; $playerList = []; // 尝试请求API并解析JSON $apiResponse = file_get_contents('https://api.mcsrvstat.us/2/labrofamily.aternos.me'); if ($apiResponse !== false) { $status = json_decode($apiResponse); // 检查解析是否成功,且存在version字段 if ($status && isset($status->version)) { $version = $status->version; } // 检查是否存在玩家列表 if ($status && isset($status->players->list) && is_array($status->players->list)) { $playerList = $status->players->list; } } ?> <h3>服务器版本:<?php echo $version; ?></h3> <h3>在线玩家:</h3> <?php if (!empty($playerList)): ?> <ul> <?php foreach ($playerList as $player): ?> <li><?php echo $player; ?></li> <?php endforeach; ?> </ul> <?php else: ?> <p>当前无在线玩家</p> <?php endif; ?> </body> </html>
关键改动说明
- 将文件扩展名改为
.php(比如命名为server-status.php),确保服务器会执行其中的PHP代码。 - 修复了HTML结构,闭合了
<head>标签,并把PHP逻辑和输出放到<body>里。 - 添加了错误处理:检查API请求是否成功、JSON解析是否正常,避免因数据异常导致页面崩溃。
- 用更友好的HTML结构展示内容,比如用标题和列表,比直接echo更美观。
内容的提问来源于stack exchange,提问作者Blédinde
相关产品推荐
相关产品推荐

