我不知道如何以简短的方式说出标题,但在PHP方面我是新手,所以我想知道是否有人可以帮助确定我做错了什么。
我正在努力实现的是一个Minecraft服务器网络 - 通过ping每个服务器告诉人们可以在线的最大玩家总数是多少,并且通过手动设置的最大值,只打印玩家的数量(以便我以后可以实现它。)
这就是我一直在搞乱(原谅我的变量= D):
<?php
$timecraftip = '76.92.80.28';
$timecraftport = 25567;
$timecraftcheckSock = @fsockopen($timecraftip, $timecraftport, $empty, $empty, 1);
$infiniteempireip = '63.135.57.11';
$infiniteempireport = 25565;
$infiniteempirecheckSock = @fsockopen($infiniteempireip, $infiniteempireport, $empty, $empty, 1);
$extremegamingip = '192.95.32.36';
$extremegamingport = 25700;
$extremegamingcheckSock = @fsockopen($extremegamingip, $extremegamingport, $empty, $empty, 1);
if($timecraftcheckSock !== FALSE)
{
$timecraft = 1;
}else{
$timecraft = 0;
}
if($infiniteempirecheckSock !== FALSE)
{
$infiniteempire = 1;
}else{
$infiniteempire = 0;
}
if($extremegamingcheckSock !== FALSE)
{
$extremegaming = 1;
}else{
$timecraft = 0;
}
if($timecraft = 1 && $infiniteempire = 1 && $extremegaming = 1)
{
echo '130';
}
if($timecraft = 1 && $infiniteempire = 1 && $extremegaming = 0)
{
echo '70';
}
if($timecraft = 1 && $infiniteempire = 0 && $extremegaming = 1)
{
echo '110';
}
if($timecraft = 0 && $infiniteempire = 1 && $extremegaming = 1)
{
echo '80';
}
if($timecraft = 1 && $infiniteempire = 0 && $extremegaming = 0)
{
echo '50';
}
if($timecraft = 0 && $infiniteempire = 1 && $extremegaming = 0)
{
echo '20';
}
if($timecraft = 0 && $infiniteempire = 0 && $extremegaming = 1)
{
echo '60';
}
if($timecraft = 0 && $infiniteempire = 0 && $extremegaming = 0)
{
echo '0';
}
?>
到目前为止,无论服务器状态如何,它都会打印“130”。
非常感谢任何和所有帮助!
答案 0 :(得分:0)
首先,您需要整理数据。想想这个问题。让你的代码更有意义。我们有三台服务器,每台服务器都有一个IP,一个端口和一些可以播放的播放器
<?php
$servers = ['timecraft' =>
[ 'ip' => '76.92.80.28', 'port' => 25567, 'players' => 50],
'infiniteempire' =>
[ 'ip' => '63.135.57.11', 'port' => 25565, 'players'=>20],
'extremegaming' =>
[ 'ip' => '192.95.32.36', 'port' => 25700, 'players'=>60]
];
现在,因为我们显然需要做的就是获得这些服务器的整体价值,基于它对fsockopen的响应,我们可以使用array_reduce
函数,它将数组减少为单个值:
$players = array_reduce($servers, function($total, $server) {
if (@fsockopen($server['ip'], $server['port'], '', '', 1) {
$total += $server['players'];
}
return $total;
});
这遍历每个服务器,并将值传递给我们提供的函数,并在$total
中存储结果。无论array_reduce
返回什么,我们都会保存在$players
。
现在,我们只需要回应结果:
echo $players;