Quake3World.com Forums
     Programming Discussion
        php ufreeze server monitor


Post new topicReply to topic
Login | Profile | | FAQ | Search | IRC




Print view Previous topic | Next topic 
Topic Starter Topic: php ufreeze server monitor

Gibblet
Gibblet
Joined: 09 Jan 2012
Posts: 15
PostPosted: 01-28-2012 03:28 PM           Profile Send private message  E-mail  Edit post Reply with quote


So I know that there's a few better ways of doing this, however I haven't had much time so here's the update so far. I'm going to be editing the webview.php to add rcon control for kicking along with a few other things dealing with rcon, it will also have the ability once I'm finished with it, to talk directly to users on the server, and see what the users on the server are saying. I'm currently running ufreeze which I'm developing all of this code around, so it might not be extremely friendly with other mods or settings.

webview.php:

Code:
<? require("quake3.php");?>
<?
  $q3=new Quake3;

  $serveradr="208.83.232.26";
  $serverport=27960;
  $website="www.gaminggroups.com";
  $status=$q3->getServerStatus($serveradr,$serverport,1500);
  if ($status) {
?>

</HEAD><body text=#FFFFFF bgcolor=#2B3856>
<center>
<table BORDER=0 CELLSPACING=0 CELLPADDING=2 WIDTH=100%  bgcolor=#000000>
<tr><td style="border-width: 0" VALIGN=top><table id="0" class="drag" BORDER=1 CELLSPACING=0 CELLPADDING=2 WIDTH=100%  bgcolor=#000000>
<tr>
<td COLSPAN=3 CLASS="cellHeading">
<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=100% bgcolor=#000000>
<tr><td style="text-align: center" class="transparent"><font class="headingText" color=#FFFFFF><?=$q3->m_servervars["sv_hostname"]?></font></td></tr></table>
</td></tr>
</table>
<table id="1" class="drag" BORDER=1 CELLSPACING=0 CELLPADDING=0 WIDTH=100%" bgcolor=#625D5D >
<tr>
<td COLSPAN=3 CLASS="row1" style="text-align: center"><?=$q3->m_servervars["version"]?></td>

</tr>
<tr>
<td WIDTH=40%><table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=100%>
<tr>
<td CLASS="row2" style="text-align: center"><?=$q3->m_servervars["sv_currentclients"]?> of max. <?=$q3->m_servervars["sv_maxclients"]?> players</td>
</tr>
<tr>
<td CLASS="row1" style="text-align: center">Cap Limit: <?=$q3->m_servervars["capturelimit"]?></td>
</tr>
<tr>
<td CLASS="row2" style="text-align: center"> DM Flags: <?=$q3->m_servervars["dmflags"]?></a></td>
</tr>

<tr>
<td CLASS="row1" style="text-align: center">Max Rate: <?=$q3->m_servervars["sv_maxRate"]?></td>
</tr>
<tr>
<td CLASS="neutral" style="text-align: center"><br>
<br>
<br>
<br>
<br>
<br>
<br>
</td>
</tr>
</table>
<td CLASS="cellHeading" WIDTH=20%>Map:  <?=$q3->m_servervars["mapname"]?><br>

<img TITLE="q3dm18" WIDTH=128 HEIGHT=128 SRC="images/maps/q3dm18.jpg">
</td>
<td WIDTH=40%>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=100%  bgcolor=#000000>
<tr>
<td CLASS="row2" style="text-align: center"><?=$q3->m_servervars["gamename"] ?><?=$q3->m_servervars["g_ufreezeVersion"]?></td>
</tr>
<tr>
<td CLASS="row1" style="text-align: center">Frag Limit: <?=$q3->m_servervars["fraglimit"]?></td>
</tr>
<tr>
<td CLASS="row2" style="text-align: center">Time Limit: <?=$q3->m_servervars["timelimit"]?></td>
</tr>

<tr>
<td CLASS="neutral" style="text-align: center"><br>
<br>
<br>
<br>
<br>
<br>
<br>
</td>
</tr>
</table>
</td>

</tr>
</table>

<table id="2" class="drag" BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=100%"  bgcolor=#000000>
<tr>
<td id="players" VALIGN=top WIDTH=70%>
<table BORDER=0 CELLSPACING=0 CELLPADDING=2 WIDTH=100%  bgcolor=#000000>
<tr>
<td CLASS="cellHeading" WIDTH=64%>Player Name</td>
<td CLASS="cellHeading" WIDTH=18%>Score</td>
<td CLASS="cellHeading" WIDTH=18%>Ping</td>
</tr>
</table>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=100%  bgcolor=#000000>
<? if (is_array($q3->m_playerinfo)) { ?>
    <? while (list(,$player) = each ($q3->m_playerinfo)) { ?>
    <TR>
        <TD WIDTH=64%><?=htmlspecialchars($player["name"])?>&nbsp;</TD><TD WIDTH=18%>&nbsp;<?=$player["frags"]?></TD><TD WIDTH=18%><?=$player["ping"]?></TD>
    </TR>
    <? } ?>
<? } else { ?>
    <TR>
        <TD COLSPAN="3">No players on server right now</TD>
    </TR>
    <? } ?>

</table>
</td>
<td id="rules" VALIGN=top WIDTH=30%>
<table BORDER=0 CELLSPACING=0 CELLPADDING=2 WIDTH=100%  bgcolor=#000000>

<tr>
<td CLASS="cellHeading" WIDTH=40%>Rule</td>
<td CLASS="cellHeading" WIDTH=60%>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=100%  bgcolor=#000000>
<tr><td style="text-align: center" class="transparent"><font class="headingText">Value</font></td><td align=right valign=top width=10 class="transparent"></td></table>
</td>
</tr>
</table>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=100% bgcolor=#000000 >

<tr CLASS="row2" ><td CLASS="cell2" style="text-align: left" WIDTH=40%>-IP</td>

<td CLASS="cell2" style="text-align: left" WIDTH=60%><? echo $serveradr; echo ":".$serverport;?></td>
</tr>

<tr CLASS="row1" ><td CLASS="cell1" style="text-align: left" WIDTH=40%>-URL</td>
<td CLASS="cell1" style="text-align: left" WIDTH=60%><?echo $website;?></td>

</tr>

<tr CLASS="row1" ><td CLASS="cell1" style="text-align: left" WIDTH=40%>g_autothawtime</td>

<td CLASS="cell1" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["g_autoThawTime"]?></td>
</tr>
<tr CLASS="row2"  ><td CLASS="cell2" style="text-align: left" WIDTH=40%>g_maxGameClients</td>
<td CLASS="cell2" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["g_maxGameClients"]?></td>
</tr>

<tr CLASS="row1"  ><td CLASS="cell1" style="text-align: left" WIDTH=40%>g_needpass</td>
<td CLASS="cell1" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["g_needpass"]?></td>
</tr>
<tr CLASS="row2"  ><td CLASS="cell2" style="text-align: left" WIDTH=40%>g_thawtime</td>
<td CLASS="cell2" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["g_thawTime"]?></td>

</tr>
<tr CLASS="row1"  ><td CLASS="cell1" style="text-align: left" WIDTH=40%>gamename</td>
<td CLASS="cell1" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["gamename"] ?></td>
</tr>
<tr CLASS="row2"  ><td CLASS="cell2" style="text-align: left" WIDTH=40%>Protocol</td>

<td CLASS="cell2" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["protocol"]?></td>
</tr>
<tr CLASS="row1"  ><td CLASS="cell1" style="text-align: left" WIDTH=40%>Max Ping</td>
<td CLASS="cell1" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["sv_maxPing"]?></td>
</tr>
<tr CLASS="row2"  ><td CLASS="cell2" style="text-align: left" WIDTH=40%>Min Ping</td>

<td CLASS="cell2" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["sv_minPing"]?></td>
</tr>

</tr>
<tr CLASS="row2"  ><td CLASS="cell2" style="text-align: left" WIDTH=40%>sv_privateClients</td>
<td CLASS="cell2" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["sv_privateClients"]?></td>
</tr>
</table>
</td>
</tr>
</table></td>

</tr>
</table><table id="footer" style="position:absolute; left:0px" BORDER=1 CELLSPACING=0 CELLPADDING=2 WIDTH=100%  bgcolor=#000000>
<tr><td style="text-align:left;" class="transparent"></td><td style="text-align:right;" class="transparent">Scores Red: <?=$q3->m_servervars["Score_Red"]?>  Blue: <?=$q3->m_servervars["Score_Blue"]?></tr></td></table></center>

</body></html>
<? } ?>




quake3.php:

Code:
<?
//      **********************************************************************************************
//      Class Quake3
//      Author : Henrik Schack Jensen (henrik@schack.dk)
//
//      Changelog:
//      Version 1.00            03/13/2001 Initial release
//      A utilityclass (PHP4 only) to do serverstatus-queries against Quake3Arena servers
//
//      Syntax:
//
//      Function getServerStatus(serveraddress,serverport,timeout)
//      Get player/servervar info from server
//
//      All results are returned in membervariables:
//
//
//      Demosource is available at http://www.gameserver.dk/
//      **********************************************************************************************


//
//      Function used to sort players by frags
//      Needs to be defined globally in order for usort to call it
//

function fragsort ($a, $b) {
        if ($a["frags"] == $b["frags"]) return 0;
        if ($a["frags"] > $b["frags"]) {
                return -1;
        } else {
                return 1;
        }
}

Class Quake3 {
        var $m_playerinfo               ="";            // Info about players
        var $m_servervars               ="";            // Info about the server

        //
        // Get exact time, used for timeout counting
        //
        function timenow() {
                return doubleval(ereg_replace('^0\.([0-9]*) ([0-9]*)$','\\2.\\1',microtime()));
        }

        //
        // Function to remove funny characters from playernames
        //
        function removefunchars($data) {
                $result="";
                $skipnextchar=false;
                for ($i=0;$i<strlen($data);$i++) {
                        if (!$skipnextchar) {
                                $currentchar=ord(substr($data,$i,1));
                                if (($currentchar==27) || ($currentchar==94)) {
                                        $skipnextchar=true;
                                } else {
                                        if (($currentchar>=32) && ($currentchar<=127)) $result=$result.chr($currentchar);
                                        if (($currentchar>=160) && ($currentchar<=255)) $result=$result.chr($currentchar-128);
                                }
                        } else {
                                $skipnextchar=false;
                        }
                }
                return $result;
        }

        //
        // Read raw data from server
        //
        function getServerData($command,$serveraddress,$portnumber,$waittime) {
                $serverdata             ="";
                $serverdatalen=0;

                if ($waittime< 500) $waittime= 500;
                if ($waittime>2000) $waittime=2000;
                $waittime=doubleval($waittime/1000.0);

                if (!$cssocket=fsockopen("udp://".$serveraddress,$portnumber,$errnr)) {
                        $this->errmsg="No connection";
                        return "";
                }
                socket_set_blocking($cssocket,true);
                socket_set_timeout($cssocket,0,500000);
                fwrite($cssocket,$command,strlen($command));
                // Mark
                $starttime=$this->timenow();
                do {
                        $serverdata.=fgetc($cssocket);
                        $serverdatalen++;
                        $socketstatus=socket_get_status($cssocket);
                        if ($this->timenow()>($starttime+$waittime)) {
                                $this->errmsg="Connection timed out";
                                fclose($cssocket);
                                return "";
                        }
                } while ($socketstatus["unread_bytes"] );
                fclose($cssocket);
                return $serverdata;
        }


        // **********************************************************************
        // getServerStatus
        // Read rules/setup from the gameserver into m_servervars
        // Return true if successful
        // **********************************************************************
        function getServerStatus($serveraddress,$portnumber,$timeout) {

                $cmd="\xFF\xFF\xFF\xFFgetstatus\n";
                $serverdata=$this->getServerData($cmd,$serveraddress,$portnumber,$timeout);
                if (strlen($serverdata)>20) {
                        $serverdata=substr($serverdata,20);
                } else {
                        return false;
                }

                $srvvars=substr($serverdata,0,strpos($serverdata,"\n"))."\\";
                $players=substr($serverdata,strpos($serverdata,"\n")+1);

                // Skip the last linefeed
                $players=substr($players,0,strlen($players)-1);

                // Split playerinfo and fill into array
                $playercount=0;
                if (strlen($players)) {
                        $playercollection=explode("\n",$players);
                        while (list($key,$data) = each ($playercollection)) {
                                eregi("^([-0-9]+) ([-0-9]+) \"(.*)\"",$data,$player);
                                $this->m_playerinfo[$key]=array("frags"=>$player[1],"ping"=>$player[2],"name"=>$this->removefunchars($player[3]));
                                $playercount++;
                        }
                }
                // Fake servervar containing number of current players
                $this->m_servervars["sv_currentclients"]=$playercount;

                if ($playercount>0) usort($this->m_playerinfo,"fragsort");

                // Split servervars and fill into array
                $name_tok = strtok ($srvvars,"\\");
                $val_tok  = strtok ("\\");
                while (strlen($name_tok)) {
                        $this->m_servervars[$name_tok]=$val_tok;
                        $name_tok = strtok ("\\");
                        $val_tok  = strtok ("\\");
                }
                return true;
        }
}
?>




Top
                 

Gibblet
Gibblet
Joined: 09 Jan 2012
Posts: 15
PostPosted: 01-28-2012 03:30 PM           Profile Send private message  E-mail  Edit post Reply with quote


I'm also going to be replacing some of the code with parse.php from my other posting. I'm just trying to find the best way about calling dumpstats and parsing it to the web directory with out flooding the server.




Top
                 

Gibblet
Gibblet
Joined: 09 Jan 2012
Posts: 15
PostPosted: 01-28-2012 03:56 PM           Profile Send private message  E-mail  Edit post Reply with quote


Just cleaned up some of the code for webview.php My next release will be a much bigger release:

webview.php -V.02:

Code:
<? require("quake3.php");?>
<?
  $q3=new Quake3;

  $serveradr="208.83.232.26";
  $serverport=27960;
  $website="www.gaminggroups.com";
  $status=$q3->getServerStatus($serveradr,$serverport,1500);
  if ($status) {
?>

</HEAD><body text=#FFFFFF bgcolor=#2B3856>
<center>
<table BORDER=0 CELLSPACING=0 CELLPADDING=2 WIDTH=100%  bgcolor=#000000>
<tr><td style="border-width: 0" VALIGN=top><table id="0" class="drag" BORDER=1 CELLSPACING=0 CELLPADDING=2 WIDTH=100%  bgcolor=#000000>
<tr>
<td COLSPAN=3 CLASS="cellHeading">
<table BORDER=1 CELLSPACING=0 CELLPADDING=0 WIDTH=100% bgcolor=#000000>
<tr><td style="text-align: center" class="transparent"><font class="headingText" color=#FFFFFF><?=$q3->m_servervars["sv_hostname"]?></font></td></tr></table>
</td></tr>
</table>
<table id="1" class="drag" BORDER=1 CELLSPACING=0 CELLPADDING=0 WIDTH=100%" bgcolor=#625D5D >
<tr>
<td COLSPAN=3 CLASS="row1" style="text-align: center"  bgcolor=#000000><?=$q3->m_servervars["version"]?></td>

</tr>
<tr>
<td WIDTH=40%><table BORDER=1 CELLSPACING=0 CELLPADDING=0 WIDTH=100% >
<tr>
<td CLASS="row2" style="text-align: center" bgcolor=#000000><?=$q3->m_servervars["sv_currentclients"]?> of max. <?=$q3->m_servervars["sv_maxclients"]?> players</td>
</tr>
<tr>
<td CLASS="row1" style="text-align: center"  bgcolor=#000000>Cap Limit: <?=$q3->m_servervars["capturelimit"]?></td>
</tr>
<tr>
<td CLASS="row2" style="text-align: center" bgcolor=#000000> DM Flags: <?=$q3->m_servervars["dmflags"]?></a></td>
</tr>

<tr>
<td CLASS="row1" style="text-align: center" bgcolor=#000000>Max Rate: <?=$q3->m_servervars["sv_maxRate"]?></td>
</tr>
<tr>
<td CLASS="neutral" style="text-align: center"><br>
<br>
<br>
<br>
<br>
<br>
<br>
</td>
</tr>
</table>
<td CLASS="cellHeading" WIDTH=20%>Map:  <?=$q3->m_servervars["mapname"]?><br>

<img TITLE="q3dm18" WIDTH=100% HEIGHT=100% SRC="images/maps/q3dm18.jpg">
</td>
<td WIDTH=40%>
<table BORDER=1 CELLSPACING=0 CELLPADDING=0 WIDTH=100%  bgcolor=#000000>
<tr>
<td CLASS="row2" style="text-align: center"><?=$q3->m_servervars["gamename"] ?><?=$q3->m_servervars["g_ufreezeVersion"]?></td>
</tr>
<tr>
<td CLASS="row1" style="text-align: center">Frag Limit: <?=$q3->m_servervars["fraglimit"]?></td>
</tr>
<tr>
<td CLASS="row2" style="text-align: center">Time Limit: <?=$q3->m_servervars["timelimit"]?></td>
</tr>

<tr>
<td CLASS="neutral" style="text-align: center"><br>
<br>
<br>

<br>
<br>
<br>
<br>
<br>
<br>
</td>
</tr>
</table>
</td>

</tr>
</table>

<table id="2" class="drag" BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=100%"  bgcolor=#000000>
<tr>
<td id="players" VALIGN=top WIDTH=70%>
<table BORDER=1 CELLSPACING=0 CELLPADDING=2 WIDTH=100%  bgcolor=#000000>
<tr>
<td CLASS="cellHeading" WIDTH=64%>Player Name</td>
<td CLASS="cellHeading" WIDTH=18%>Score</td>
<td CLASS="cellHeading" WIDTH=18%>Ping</td>
</tr>
</table>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=100%  bgcolor=#000000>
<? if (is_array($q3->m_playerinfo)) { ?>
    <? while (list(,$player) = each ($q3->m_playerinfo)) { ?>
    <TR>
        <TD WIDTH=64%><?=htmlspecialchars($player["name"])?>&nbsp;</TD><TD WIDTH=18%>&nbsp;<?=$player["frags"]?></TD><TD WIDTH=18%><?=$player["ping"]?></TD>
    </TR>
    <? } ?>
<? } else { ?>
    <TR>
        <TD COLSPAN="3">No players on server right now</TD>
    </TR>
    <? } ?>

</table>
</td>
<td id="rules" VALIGN=top WIDTH=30%>
<table BORDER=1 CELLSPACING=0 CELLPADDING=2 WIDTH=100%  bgcolor=#000000>

<tr>
<td CLASS="cellHeading" WIDTH=40%>Rule</td>
<td CLASS="cellHeading" WIDTH=60%>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=100%  bgcolor=#000000>
<tr><td style="text-align: center" class="transparent"><font class="headingText">Value</font></td><td align=right valign=top width=10 class="transparent"></td></table>
</td>
</tr>
</table>
<table BORDER=1 CELLSPACING=0 CELLPADDING=0 WIDTH=100% bgcolor=#000000 >

<tr CLASS="row2" ><td CLASS="cell2" style="text-align: left" WIDTH=40%>-IP</td>

<td CLASS="cell2" style="text-align: left" WIDTH=60%><? echo $serveradr; echo ":".$serverport;?></td>
</tr>

<tr CLASS="row1" ><td CLASS="cell1" style="text-align: left" WIDTH=40%>-URL</td>
<td CLASS="cell1" style="text-align: left" WIDTH=60%><?echo $website;?></td>

</tr>

<tr CLASS="row1" ><td CLASS="cell1" style="text-align: left" WIDTH=40%>g_autothawtime</td>

<td CLASS="cell1" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["g_autoThawTime"]?></td>
</tr>
<tr CLASS="row2"  ><td CLASS="cell2" style="text-align: left" WIDTH=40%>g_maxGameClients</td>
<td CLASS="cell2" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["g_maxGameClients"]?></td>
</tr>

<tr CLASS="row1"  ><td CLASS="cell1" style="text-align: left" WIDTH=40%>g_needpass</td>
<td CLASS="cell1" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["g_needpass"]?></td>
</tr>
<tr CLASS="row2"  ><td CLASS="cell2" style="text-align: left" WIDTH=40%>g_thawtime</td>
<td CLASS="cell2" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["g_thawTime"]?></td>

</tr>
<tr CLASS="row1"  ><td CLASS="cell1" style="text-align: left" WIDTH=40%>gamename</td>
<td CLASS="cell1" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["gamename"] ?></td>
</tr>
<tr CLASS="row2"  ><td CLASS="cell2" style="text-align: left" WIDTH=40%>Protocol</td>

<td CLASS="cell2" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["protocol"]?></td>
</tr>
<tr CLASS="row1"  ><td CLASS="cell1" style="text-align: left" WIDTH=40%>Max Ping</td>
<td CLASS="cell1" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["sv_maxPing"]?></td>
</tr>
<tr CLASS="row2"  ><td CLASS="cell2" style="text-align: left" WIDTH=40%>Min Ping</td>

<td CLASS="cell2" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["sv_minPing"]?></td>
</tr>

</tr>
<tr CLASS="row2"  ><td CLASS="cell2" style="text-align: left" WIDTH=40%>sv_privateClients</td>
<td CLASS="cell2" style="text-align: left" WIDTH=60%><?=$q3->m_servervars["sv_privateClients"]?></td>
</tr>
</table>
</td>
</tr>
</table></td>

</tr>
</table><table id="footer" style="position:absolute; left:0px" BORDER=1 CELLSPACING=0 CELLPADDING=2 WIDTH=100%  bgcolor=#000000>
<td style="text-align:right;" class="transparent">Scores Red: <?=$q3->m_servervars["Score_Red"]?>  Blue: <?=$q3->m_servervars["Score_Blue"]?></td></table></center>

</body></html>
<? } ?>




Top
                 

Gibblet
Gibblet
Joined: 09 Jan 2012
Posts: 15
PostPosted: 01-29-2012 09:06 AM           Profile Send private message  E-mail  Edit post Reply with quote


Heres an example of it on a wp site, its no where near finished but a good example of the above code:
http://www.gaminggroups.com/?page_id=2715




Top
                 

Mentor
Mentor
Joined: 12 Mar 2005
Posts: 3958
PostPosted: 01-29-2012 03:00 PM           Profile Send private message  E-mail  Edit post Reply with quote


Your script is vulnerable to XSS injection. The attack surface is probably limited but it's still a good idea to htmlspecialchars() all the server variables.

Another thing is that your script only works on servers that have short tags enabled. For maximum portability, use <?php echo 42; ?> instead of <?= 42 ?>.




Top
                 

Gibblet
Gibblet
Joined: 09 Jan 2012
Posts: 15
PostPosted: 01-30-2012 12:20 PM           Profile Send private message  E-mail  Edit post Reply with quote


Thanks for the heads up, I went ahead and changed both of those suggestions:

Code:
<?
  $q3=new Quake3;


  $serveradr="208.83.232.26";
  //$serveradr="178.33.43.157";
  $serverport=27960;
  $website="www.gaminggroups.com";
  $status=$q3->getServerStatus($serveradr,$serverport,1500);
  if ($status) {
?>

</HEAD><body text=#FFFFFF bgcolor=#2B3856>
<center>
<table BORDER=0 CELLSPACING=0 CELLPADDING=2 WIDTH=100%  bgcolor=#000000>
<tr><td style="border-width: 0" VALIGN=top><table id="0" class="drag" BORDER=1 CELLSPACING=0 CELLPADDING=2 WIDTH=100%  bgcolor=#000000>
<tr>
<td COLSPAN=3 CLASS="cellHeading">
<table BORDER=1 CELLSPACING=0 CELLPADDING=0 WIDTH=100% bgcolor=#000000>
<tr><td style="text-align: center" class="transparent"><font class="headingText" color=#FFFFFF><? echo htmlspecialchars($q3->m_servervars["sv_hostname"])?></font></td></tr></table>
</td></tr>
</table>
<table id="1" class="drag" BORDER=1 CELLSPACING=0 CELLPADDING=0 WIDTH=100%" bgcolor=#625D5D >
<tr>
<td COLSPAN=3 CLASS="row1" style="text-align: center"  bgcolor=#000000><? echo htmlspecialchars($q3->m_servervars["version"])?></td>

</tr>
<tr>
<td WIDTH=40%><table BORDER=1 CELLSPACING=0 CELLPADDING=0 WIDTH=100% >
<tr>
<td CLASS="row2" style="text-align: center" bgcolor=#000000><? echo htmlspecialchars($q3->m_servervars["sv_currentclients"])?> of max. <? echo htmlspecialchars($q3->m_servervars["sv_maxclients"])?> players</td>
</tr>
<tr>
<td CLASS="row1" style="text-align: center"  bgcolor=#000000>Cap Limit: <? echo htmlspecialchars($q3->m_servervars["capturelimit"])?></td>
</tr>
<tr>
<td CLASS="row2" style="text-align: center" bgcolor=#000000> DM Flags: <?echo htmlspecialchars($q3->m_servervars["dmflags"])?></a></td>
</tr>

<tr>
<td CLASS="row1" style="text-align: center" bgcolor=#000000>Max Rate: <? echo htmlspecialchars($q3->m_servervars["sv_maxRate"])?></td>
</tr>
<tr>
<td CLASS="neutral" style="text-align: center"><br>
<br>
<br>
<br>
<br>
<br>
<br>
</td>
</tr>
</table>
<td CLASS="cellHeading" WIDTH=20%>Map:  <? echo htmlspecialchars($q3->m_servervars["mapname"])?><br>

<img TITLE="q3dm18" WIDTH=100% HEIGHT=100% SRC="images/maps/q3dm18.jpg">
</td>
<td WIDTH=40%>
<table BORDER=1 CELLSPACING=0 CELLPADDING=0 WIDTH=100%  bgcolor=#000000>
<tr>
<td CLASS="row2" style="text-align: center"><? echo htmlspecialchars($q3->m_servervars["gamename"]) ?><? echo htmlspecialchars($q3->m_servervars["g_ufreezeVersion"])?></td>
</tr>
<tr>
<td CLASS="row1" style="text-align: center">Frag Limit: <? echo htmlspecialchars($q3->m_servervars["fraglimit"])?></td>
</tr>
<tr>
<td CLASS="row2" style="text-align: center">Time Limit: <? echo htmlspecialchars($q3->m_servervars["timelimit"])?></td>
</tr>

<tr>
<td CLASS="neutral" style="text-align: center"><br>
<br>
<br>

<br>
<br>
<br>
<br>
<br>
<br>
</td>
</tr>
</table>
</td>

</tr>
</table>

<table id="2" class="drag" BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=100%"  bgcolor=#000000>
<tr>
<td id="players" VALIGN=top WIDTH=70%>
<table BORDER=1 CELLSPACING=0 CELLPADDING=2 WIDTH=100%  bgcolor=#000000>
<tr>
<td CLASS="cellHeading" WIDTH=64%>Player Name</td>
<td CLASS="cellHeading" WIDTH=18%>Score</td>
<td CLASS="cellHeading" WIDTH=18%>Ping</td>
</tr>
</table>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=100%  bgcolor=#000000>
<? if (is_array($q3->m_playerinfo)) { ?>
    <? while (list(,$player) = each ($q3->m_playerinfo)) { ?>
    <TR>
        <TD WIDTH=64%><? echo htmlspecialchars($player["name"])?>&nbsp;</TD><TD WIDTH=18%>&nbsp;<? echo htmlspecialchars($player["frags"])?></TD><TD WIDTH=18%><? echo htmlspecialchars($player["ping"])?></TD>
    </TR>
    <? } ?>
<? } else { ?>
    <TR>
        <TD COLSPAN="3">No players on server right now</TD>
    </TR>
    <? } ?>

</table>
</td>
<td id="rules" VALIGN=top WIDTH=30%>
<table BORDER=1 CELLSPACING=0 CELLPADDING=2 WIDTH=100%  bgcolor=#000000>

<tr>
<td CLASS="cellHeading" WIDTH=40%>Rule</td>
<td CLASS="cellHeading" WIDTH=60%>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=100%  bgcolor=#000000>
<tr><td style="text-align: center" class="transparent"><font class="headingText">Value</font></td><td align=right valign=top width=10 class="transparent"></td></table>
</td>
</tr>
</table>
<table BORDER=1 CELLSPACING=0 CELLPADDING=0 WIDTH=100% bgcolor=#000000 >

<tr CLASS="row2" ><td CLASS="cell2" style="text-align: left" WIDTH=40%>-IP</td>

<td CLASS="cell2" style="text-align: left" WIDTH=60%><? echo $serveradr; echo ":".$serverport;?></td>
</tr>

<tr CLASS="row1" ><td CLASS="cell1" style="text-align: left" WIDTH=40%>-URL</td>
<td CLASS="cell1" style="text-align: left" WIDTH=60%><?echo $website;?></td>

</tr>

<tr CLASS="row1" ><td CLASS="cell1" style="text-align: left" WIDTH=40%>g_autothawtime</td>

<td CLASS="cell1" style="text-align: left" WIDTH=60%><? echo htmlspecialchars($q3->m_servervars["g_autoThawTime"])?></td>
</tr>
<tr CLASS="row2"  ><td CLASS="cell2" style="text-align: left" WIDTH=40%>g_maxGameClients</td>
<td CLASS="cell2" style="text-align: left" WIDTH=60%><? echo htmlspecialchars($q3->m_servervars["g_maxGameClients"])?></td>
</tr>

<tr CLASS="row1"  ><td CLASS="cell1" style="text-align: left" WIDTH=40%>g_needpass</td>
<td CLASS="cell1" style="text-align: left" WIDTH=60%><? echo htmlspecialchars($q3->m_servervars["g_needpass"])?></td>
</tr>
<tr CLASS="row2"  ><td CLASS="cell2" style="text-align: left" WIDTH=40%>g_thawtime</td>
<td CLASS="cell2" style="text-align: left" WIDTH=60%><? echo htmlspecialchars($q3->m_servervars["g_thawTime"])?></td>

</tr>
<tr CLASS="row1"  ><td CLASS="cell1" style="text-align: left" WIDTH=40%>gamename</td>
<td CLASS="cell1" style="text-align: left" WIDTH=60%><? echo htmlspecialchars($q3->m_servervars["gamename"])?></td>
</tr>
<tr CLASS="row2"  ><td CLASS="cell2" style="text-align: left" WIDTH=40%>Protocol</td>

<td CLASS="cell2" style="text-align: left" WIDTH=60%><? echo htmlspecialchars($q3->m_servervars["protocol"])?></td>
</tr>
<tr CLASS="row1"  ><td CLASS="cell1" style="text-align: left" WIDTH=40%>Max Ping</td>
<td CLASS="cell1" style="text-align: left" WIDTH=60%><? echo htmlspecialchars($q3->m_servervars["sv_maxPing"])?></td>
</tr>
<tr CLASS="row2"  ><td CLASS="cell2" style="text-align: left" WIDTH=40%>Min Ping</td>

<td CLASS="cell2" style="text-align: left" WIDTH=60%><? echo htmlspecialchars($q3->m_servervars["sv_minPing"])?></td>
</tr>

</tr>
<tr CLASS="row2"  ><td CLASS="cell2" style="text-align: left" WIDTH=40%>sv_privateClients</td>
<td CLASS="cell2" style="text-align: left" WIDTH=60%><? echo htmlspecialchars($q3->m_servervars["sv_privateClients"])?></td>
</tr>
</table>
</td>
</tr>
</table></td>

</tr>
</table><table id="footer" style="position:absolute; left:0px" BORDER=1 CELLSPACING=0 CELLPADDING=2 WIDTH=100%  bgcolor=#000000>
<td style="text-align:right;" class="transparent">Scores<font color=#ff000> Red:</font> <? echo htmlspecialchars($q3->m_servervars["Score_Red"])?> <font color=#151B8D> Blue:</font> <? echo htmlspecialchars($q3->m_servervars["Score_Blue"])?></td></table></center>

</body></html>
<? } ?>




Top
                 

Mentor
Mentor
Joined: 12 Mar 2005
Posts: 3958
PostPosted: 01-30-2012 01:13 PM           Profile Send private message  E-mail  Edit post Reply with quote


You're still using short tags (<? instead of <?php) but otherwise looks good.




Top
                 
Quake3World.com | Forum Index | Programming Discussion


Post new topic Reply to topic


cron
Quake3World.com
© ZeniMax. Zenimax, QUAKE III ARENA, Id Software and associated trademarks are trademarks of the ZeniMax group of companies. All rights reserved.
This is an unofficial fan website without any affiliation with or endorsement by ZeniMax.
All views and opinions expressed are those of the author.