在PHP中ping我的世界服务器:小错误


Pinging a Minecraft Server in PHP: Small Error

我正在尝试将数据从Minecraft服务器输入到我的网页中,作为测试。这是代码:

<?php $host = "hub.cobalt-mc.com";
$port = 25565;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$connected = socket_connect($socket, $host, $port);
if ($connected) {
$ping_start = microtime(true);
socket_send($socket, "'xFE", 1, 0);
$data = "";
$result = socket_recv($socket, &$data, 1024, 0);$ping_end = microtime(true);
socket_close($socket);
if ($result != false && substr($data, 0, 1) == "'xFF") {
$info = explode("'xA7", mb_convert_encoding(substr($data,1), "iso-8859-1","utf-16be"));
$serverName = substr($info[0], 1);
$playersOnline = $info[1];
$playersMax = $info[2];
$ping = round(($ping_end - $ping_start) * 1000);
echo     "<table class='"table table-hover'">
<th>Server Address</th>
<th>Status</th>
<th>Rank</th>
<th>Total DP</th>
<tr>
<td>$host:$ip</td>
if (($ping > '1000') || ($ping < '0')) {
echo "<td><span class='"label label-success'">Online!</span></td>";
}
else {
echo "<td><span class='"label label-success'">Online!</span></td>";
}
<td></td>
<td></td>
</tr>
<tr>
<td>$host:$ip</td>
<td></td>
<td></td>
<td></td>
</tr>
</table>";
                            }
 else {
 echo "<span style='"color:#FF0000'">Error: </span>Failed to receive data";
 }
 } else {
 echo "<span style='"color:#FF0000'">Error: </span>Failed to send data";
 }?>

我收到错误:

Parse error: syntax error, unexpected '>' in /home/mctronco/public_html/leaderboards/serverping.php on line 27

代码有问题吗?

$ping = round(...行之后开始的回声不会在 if 语句之前终止......你不能只是在echo中间放一个if

该行内容如下:

<td>$host:$ip</td>

应该是:

<td>$host:$ip</td>";

然后你需要在 if 语句之后做另一个回显......

该代码中似乎还有无数其他问题会阻止您做您想做的事情......

如评论中所述,正确的代码格式将大大有助于解决这些错误......使用编辑器为代码着色,这样的错误会跳出来......

您的错误消息是指第 27 行:

Parse error: syntax error, unexpected '>' in /home/mctronco/public_html/leaderboards/serverping.php on line 27

所以不清楚哪个特定的线路有问题。 因此,我建议您更改所有内容,因为您的编码非常繁琐。这不是我的理想,但应该有效。

if ($result != false && substr($data, 0, 1) == "'xFF") {
$info = explode("'xA7", mb_convert_encoding(substr($data,1), "iso-8859-1","utf-16be"));
$serverName = substr($info[0], 1);
$playersOnline = $info[1];
$playersMax = $info[2];
$ping = round(($ping_end - $ping_start) * 1000);
echo "<table class='"table table-hover'">";
echo "<th>Server Address</th>";
echo "<th>Status</th>";
echo "<th>Rank</th>";
echo "<th>Total DP</th>";
echo "<tr>";
echo "<td>$host:$ip</td>";
if (($ping > '1000') || ($ping < '0')) {
echo "<td><span class='"label label-success'">Online!</span></td>";
}
else {
echo "<td><span class='"label label-success'">Online!</span></td>";
}
echo "<td></td>";
echo "<td></td>";
echo "</tr>";
echo "<tr>";
echo "<td>".$host.":".$ip."</td>";
echo "<td></td>";
echo "<td></td>";
echo "<td></td>";
echo "</tr>";
echo "</table>";
                            }
 else {
 echo "<span style='"color:#FF0000'">Error: </span>Failed to receive data";
 }
 } else {
 echo "<span style='"color:#FF0000'">Error: </span>Failed to send data";
 }
?>

你的代码中有多个问题,但我要指出一个重要的问题。 你不能把纯PHP放在字符串或回显的中间。

旧代码

<tr>
<td>$host:$ip</td>
if (($ping > '1000') || ($ping < '0')) {
echo "<td><span class='"label label-success'">Online!</span></td>";
}
else {
echo "<td><span class='"label label-success'">Online!</span></td>";
}
<td></td>

新代码

<tr>
<td>{$host}:{$ip}</td>";
if (($ping > '1000') || ($ping < '0')) {
echo "<td><span class='"label label-success'">Online!</span></td>";
}
else {
echo "<td><span class='"label label-success'">Online!</span></td>";
}
echo "
<td></td>

最好在 echo 外部执行 if 语句,将其结果存储在变量中,然后将变量放入 echo 中。 当你在双引号内(如你的回声)时,你可以让PHP显示变量的内容,但它不会执行语句。

相关文章: