RealTime Server Statusをサイトに張り付ける
qstatを利用してゲームサーバーから情報を吸い出してPHPを使って表示させる方法
というか当暇つぶしサーバーのTOYBOX60に使用している生データー。
gamespyやgametrackerなどを使わずスタンドアローンで完結。
スタイルシートが混ざってるので適宜サイトの変数なりに置き換えてください。
phpが汚いとかexec使うなとか苦情は勘弁してください。管理者は独学なので細かい質問には答えられない場合があります。
訪問者が多いページ、下品な検索エンジンが来る場合はページキャッシュを調整してください。ロードアベレージが痛い事になります。
<?php
$pid = exec("ps aux | grep etded.x86 | grep server1 | grep -v \"sh\" | awk '{print $2}'");
if (empty($pid)) {
echo "<table width=\"100%\" class=\"status-table\">";
echo "<tr>\n";
echo "<td>\n";
include('statusET.inc');
echo "<br />\n";
echo "<font color='ff0000'>Suspended</font><br /><br />\n";
echo "</td>\n</tr>\n</table>\n";
} else {
$etstarttime = exec("ps u $pid | awk '{print $9}'");
$etruntime = exec("ps -p $pid -o etime");
$null = "START";
exec("/usr/local/bin/qstat -raw , -rws 127.0.0.1:27960 -R", $qserver, $emp);
$ets = explode(",", $qserver[0]);
$ets1 = explode(",", $qserver[1]);
$pb = preg_replace("/punkbuster=/", "", $ets1[9]);
$team = preg_replace("/balancedteams=/", "", $ets1[13]);
$weap = preg_replace("/weaprestrict=/", "", $ets1[12]);
$lag = preg_replace("/g_antilag=/", "", $ets1[11]);
$pass = preg_replace("/needpass=/", "", $ets1[8]);
$live = preg_replace("/maxlives=/", "", $ets1[7]);
$ff = preg_replace("/friendlyFire=/", "", $ets1[6]);
$team2 = preg_replace("/P=/", "", $ets1[15]);
$team3 = preg_replace("/-/", "", $team2);
exec("/usr/local/bin/qstat -rws 127.0.0.1:27960 -P | grep 'frags'", $lines ,$emp);
$CRow = "Textback";
$gpass = file_get_contents("/var/www/html/toybox_pass.inc");
echo "<table width=\"100%\" class=\"status-table\">\n";
echo "<tr>\n<td width=\"50%\"><img alt='$ets[3]' title='$ets[3]' src=\"./images/et/$ets[3].jpg\"><br />$ets[3]</td>\n";
echo "<td width=\"50%\">Socket:$ets[5]/$ets[4]\n";
echo "<br />Password:$gpass<br />";
if ($pb == 1) {
echo "<img alt='Punkbuster Enable' title='Punkbuster Enable' src=\"./images/pb.png\" width=\"27\" height=\"27\">";
} else {
echo "";
}
if ($ff == 1) {
echo "<img alt='Friendly Fire' title='Friendly Fire'
src=\"./images/ff.png\" width=\"27\" height=\"27\">";
} else {
echo "";
}
if ($team == 1) {
echo "<img alt='Force Team Balance' title='Force Team BalanceForce' src=\"./images/balance.png\" width=\"27\" height=\"27\">";
} else {
echo "";
}
if ($weap < 100) {
echo "<img alt='Heavy Weapons Restriction' title='Heavy Weapons Restriction' src=\"./images/weap.png\" width=\"27\" height=\"27\">";
} else {
echo "";
}
if ($lag == 1) {
echo "<img alt='AntiLag Enable' title='AntiLag Enable' src=\"./images/antilag.png\" width=\"27\" height=\"27\">";
} else {
echo "";
}
if ($pass == 1) {
echo "<img alt='Private Server' title='Private Server' src=\"./images/pass.png\" width=\"27\" height=\"27\">";
} else {
echo "";
}
if ($live == 1) {
echo "<img alt='MaxLives Enable' title='MaxLives Enable' src=\"./images/live.png\" width=\"27\" height=\"27\">";
} else {
echo "";
}
echo "</td>\n</tr>\n</table>\n";
echo "<table width='100%' class='status-table'>\n<tr>\n";
echo "<td class='$CRow'>No.</td>\n";
echo "<td class='$CRow'>Player Name</td>\n";
echo "<td class='$CRow'>Team</td>\n";
echo "<td class='$CRow'><div style='text-align:right; font-size:100%'>Score</div></td>\n";
echo "<td class='$CRow'><div style='text-align:right; font-size:100%'>ping</div></td>\n";
echo "</tr>\n";
foreach ($lines as $line_num => $line) {
if ($CRow == "Textback"){
$CRow = "Text";
} else {
$CRow = "Textback";
}
$byte = strlen($line);
$ping2 = strpos($line, 'ms');
$ping = substr($line, $ping2 - 4, 6);
$ping = trim($ping, " \t\n\r\0\x0B");
$name2 = substr($line, $ping2 + 4, $byte - $ping2 + 4);
$frags2 = strpos($line, 'fr');
$frags = substr($line, 0, $frags2);
$frags = trim($frags, " \t\n\r\0\x0B");
$number = ($line_num + 1);
$name = htmlspecialchars ($name2);
$team4 = substr($team3, $line_num, 1);
if ($team4 == 0) {
$team = "Waiting";
} else {
if ($team4 == 1) {
$team = "Axis";
} else {
if ($team4 == 2) {
$team = "Allies";
} else {
$team = "Spect";
}
}
}
$name = mb_strimwidth($name, 0, 17, "...");
echo "<tr>\n";
echo "<td class='$CRow'>$number</td>\n";
echo "<td class='$CRow'>$name</td>\n";
echo "<td class='$CRow'>$team</td>\n";
echo "<td class='$CRow'><div style='text-align:right; font-size:100%'>$frags</div></td>\n";
echo "<td class='$CRow'><div style='text-align:right; font-size:100%'>$ping</div></td>\n";
}
echo "<tr>\n<td colspan='5'>boot at $etstarttime. $etruntime times running.</td>\n";
echo "</tr>\n</table>\n";
}
?>
多分コピペでは動かないとおもいます。

