je vien de trouver qq petits fichiers... :
index.php
<?php
include("cssource_class.php");
include("template_class.php");
set_time_limit(120);
if(isset($_GET['ip']) && isset($_GET['port'])) {
$css = new cssource($_GET['ip'], $_GET['port']);
$css->setSortBy("frags"); // Sort players by Frags (supported: index, time, frags)
$output = $css->status();
$wrap_template = new temp("wrapper");
$wrap_template->replace("net_protocol", $output['net_protocol']);
$wrap_template->replace("ip", $output['ip']);
$wrap_template->replace("port", $output['port']);
$wrap_template->replace("hostname", $output['hostname']);
$wrap_template->replace("map", $output['map']);
$wrap_template->replace("game_dir", $output['game_dir']);
$wrap_template->replace("game_type", $output['game_type']);
$wrap_template->replace("appid", $output['appid']);
$player_status = ($output['num_players'] == $output['max_players']) ? "full" : "notfull";
$wrap_template->replace("player_status", $player_status);
$wrap_template->replace("num_players", $output['num_players']);
$wrap_template->replace("max_players", $output['max_players']);
$wrap_template->replace("bot_players", $output['bot_players']);
$dedicated = ($output['dedicated'] == "d") ? "Yes" : "No";
$wrap_template->replace("dedicated", $dedicated);
$server_os = ($output['server_os'] == "w") ? "Windows" : "Linux";
$wrap_template->replace("server_os", $server_os);
$needpass = ($output['needpass'] == "1") ? "Yes" : "No";
$wrap_template->replace("needpass", $needpass);
$secure = ($output['secure'] == "1") ? "Yes" : "No";
$wrap_template->replace("secure", $secure);
$players_html = "";
foreach($output['players'] AS $player) {
$player_template = new temp("player");
$player_template->replace("index", $player['index']);
$player_template->replace("name", $player['name']);
$player_template->replace("frags", $player['frags']);
$player_template->replace("time", date("H:i:s", $player['time']));
$players_html .= $player_template->show();
}
$wrap_template->replace("players", $players_html);
$rules_html = "";
foreach($output['rules'] AS $rule => $value) {
$rule_template = new temp("rule");
$rule_template->replace("rule", $rule);
$rule_template->replace("value", $value);
$rules_html .= $rule_template->show();
}
$wrap_template->replace("rules", $rules_html);
echo $wrap_template->show();
}
else {
$wrap_template = new temp("wrapper_empty");
echo $wrap_template->show();
}
?>
cssource_class.php :
<?php
class cssource {
var $ip;
var $port;
var $timeout;
var $sock;
var $data;
var $output = array();
var $sortBy;
function cssource($ip, $port="", $timeout=200) {
$this->ip = $ip;
$this->port = (empty($port)) ? 27015 : $port;
$this->timeout = $timeout;
}
function status() {
if(!$this->sock = @fsockopen("udp://".$this->ip, $this->port)) {
die("Could not connect to the socket.");
}
else {
$querys[] = "\xFF\xFF\xFF\xFF\x54";
$querys[] = "\xFF\xFF\xFF\xFF\x55";
$querys[] = "\xFF\xFF\xFF\xFF\x56";
$wait = 0;
foreach($querys AS $querystring) {
fwrite($this->sock, $querystring);
while($wait < $this->timeout) {
$string = fread($this->sock, 4096);
$wait += 10;
if(!empty($string)) {
$this->data[] = $string;
if(strlen($string) < 4096)
break;
}
}
}
@fclose($this->sock);
if(empty($this->data[0]))
die("No data was returned from the query.");
$this->parseStatus();
$this->parsePlayers();
$this->parseRules();
return $this->output;
}
}
function parseStatus() {
$status = $this->data[0];
$i = 5;
$this->output['net_protocol'] = ord($status{$i++});
$this->output['ip'] = $this->ip;
$this->output['port'] = $this->port;
$this->output['hostname'] = $this->readString($status, $i);
$this->output['map'] = $this->readString($status, $i);
$this->output['game_dir'] = $this->readString($status, $i);
$this->output['game_type'] = $this->readString($status, $i);
$this->output['appid'] = ord($status{$i++}.$status{$i++});
$this->output['num_players'] = ord($status{$i++});
$this->output['max_players'] = ord($status{$i++});
$this->output['bot_players'] = ord($status{$i++});
$this->output['dedicated'] = $status{$i++};
$this->output['server_os'] = $status{$i++};
$this->output['needpass'] = ord($status{$i++});
$this->output['secure'] = ord($status{$i++});
return TRUE;
}
function parsePlayers() {
$players = $this->data[1];
$i = 5;
$num_players = ord($players{$i++});
$this->output['players'] = array();
if($num_players > 0) {
for($p = 0; $p < $num_players-1; $p++) {
if(!empty($players{$i+1})) {
$this->output['players'][$p]['index'] = ord($players{$i++});
$this->output['players'][$p]['name'] = $this->readString($players, $i);
$frags = unpack("L", substr($players, $i, $i+4)); $i+=4;
$this->output['players'][$p]['frags'] = $frags[1];
$time = unpack("f", substr($players, $i, $i+4)); $i+=4;
$time = mktime(0, 0, $time[1]);
//$time = date("H:i:s", $time);
$this->output['players'][$p]['time'] = $time;
}
}
}
$this->sortPlayers($this->sortBy);
return TRUE;
}
function parseRules() {
$rules = $this->data[2];
$rule = explode("\x00", $rules);
$num_rules = count($rule);
for($i = 6; $i < $num_rules; $i+=2)
$this->output['rules'][$rule[$i-1]] = $rule[$i];
return TRUE;
}
function readString($string, &$i) {
$begin = $i;
$strlen = strlen($string);
for ($i; ($i < $strlen) && ($string{$i} != chr(0)); $i++);
$result = substr($string, $begin, $i-$begin);
$i++;
return $result;
}
function sortPlayers($sortvar="index") {
$players = $this->output['players'];
$num_players = count($players);
for($i = 0; $i != $num_players; $i++) {
$a = $i;
$b = $num_players-1;
while ($a != $b){
if ($players[$a][$sortvar] > $players[$b][$sortvar])
$b--;
else
$a++;
}
$h = $players[$i];
$players[$i] = $players[$a];
$players[$a] = $h;
}
$this->output['players'] = $players;
return TRUE;
}
function setSortBy($sortvar) {
$this->sortBy = $sortvar;
}
}
?>
template_class.php :
<?php
class temp {
var $template;
var $html;
function temp($template) {
$this->template = $template;
$this->html = implode("", file("./templates/".$this->template.".tpl"));
return TRUE;
}
function replace($variable, $replace) {
$this->html = str_replace("{\$".$variable."}", $replace, $this->html);
return TRUE;
}
function show() {
return $this->html;
}
}
?>
players.php :
<tr>
<td>{$name}</td>
<td>{$frags}</td>
<td>{$time}</td>
</tr>
rule.php
<tr>
<td>{$rule}</td>
<td>{$value}</td>
</tr>
wrapper.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>CS:Source Server Query</title>
<style type="text/css">
<!--
BODY {
margin: 10px;
background: #52A5F2;
color: #666666;
font: normal 12px Arial, Helvetica, sans-serif;
}
.main {
margin-bottom: 25px;
background: #DDDDDD;
border: 2px solid #FFFFFF;
}
.main TD.title {
background: #2A6DAC;
color: #DBF0FE;
font: bold 13px Arial, Helvetica, sans-serif;
letter-spacing: -1px;
text-transform: uppercase;
}
.main TD {
background: #F7F7F7;
}
#wrapper {
width: 500px;
margin: auto;
}
.full {
color: #A20000;
}
.notfull {
color: #44C32B;
}
INPUT {
font: normal 11px Arial, Helvetica, sans-serif;
background: #FFFFFF;
border: 1px solid #AAAAAA;
}
INPUT.submit {
background: #DDDDDD;
border: 1px solid #AAAAAA;
}
-->
</style>
</head>
<body>
<div id="wrapper">
<table class="main" width="100%" border="0" cellpadding="3" cellspacing="1">
<tr>
<td class="title">query a server</td>
</tr>
<form action="index.php" method="GET">
<tr>
<td>
IP: <input name="ip" type="text" size="25" /> : PORT: <input name="port" type="text" size="10" /> <input class="submit" type="submit" value="Query" />
</td>
</tr>
</form>
</table>
<table class="main" width="100%" border="0" cellpadding="3" cellspacing="1">
<tr>
<td colspan="2" class="title">server details</td>
</tr>
<tr>
<td colspan="2"><img src="maps/de_dust.jpg" /></td>
</tr>
<tr>
<td width="15%">Name</td>
<td width="85%">{$hostname}</td>
</tr>
<tr>
<td>Address</td>
<td>{$ip}:{$port}</td>
</tr>
<tr>
<td>Map</td>
<td>{$map}</td>
</tr>
<tr>
<td>Game</td>
<td>Counter-Strike Source</td>
</tr>
<tr>
<td>Players</td>
<td><span class="{$player_status}">{$num_players}/{$max_players}</span> ({$bot_players} Bots)</td>
</tr>
<tr>
<td>Password</td>
<td>{$needpass}</td>
</tr>
<tr>
<td>Protocol</td>
<td>{$net_protocol}</td>
</tr>
<tr>
<td>Dedicated</td>
<td>{$dedicated}</td>
</tr>
<tr>
<td>Server OS</td>
<td>{$server_os}</td>
</tr>
</table>
<table class="main" width="100%" border="0" cellpadding="3" cellspacing="1">
<tr>
<td colspan="3" class="title">currently playing</td>
</tr>
<tr>
<td><b>Name</b></td>
<td><b>Frags</b></td>
<td><b>Time</b></td>
</tr>
{$players}
</table>
<table class="main" width="100%" border="0" cellpadding="3" cellspacing="1">
<tr>
<td colspan="2" class="title">rules</td>
</tr>
{$rules}
</table>
<div style="text-align: center; color: #DBF0FE;">Query generated using noginn's CS:Source query class.</div>
</div>
</body>
</html>
wrapper_empty.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>CS:Source Server Query</title>
<style type="text/css">
<!--
BODY {
margin: 10px;
background: #52A5F2;
color: #666666;
font: normal 12px Arial, Helvetica, sans-serif;
}
.main {
margin-bottom: 25px;
background: #DDDDDD;
border: 2px solid #FFFFFF;
}
.main TD.title {
background: #2A6DAC;
color: #DBF0FE;
font: bold 13px Arial, Helvetica, sans-serif;
letter-spacing: -1px;
text-transform: uppercase;
}
.main TD {
background: #F7F7F7;
}
#wrapper {
width: 500px;
margin: auto;
}
.full {
color: #A20000;
}
.notfull {
color: #44C32B;
}
INPUT {
font: normal 11px Arial, Helvetica, sans-serif;
background: #FFFFFF;
border: 1px solid #AAAAAA;
}
INPUT.submit {
background: #DDDDDD;
border: 1px solid #AAAAAA;
}
-->
</style>
</head>
<body>
<div id="wrapper">
<table class="main" width="100%" border="0" cellpadding="3" cellspacing="1">
<tr>
<td class="title">query a server</td>
</tr>
<form action="index.php" method="GET">
<tr>
<td>
IP: <input name="ip" type="text" size="25" /> : PORT: <input name="port" type="text" size="10" /> <input class="submit" type="submit" value="Query" />
</td>
</tr>
</form>
</table>
<div style="text-align: center; color: #DBF0FE;">Query generated using noginn's CS:Source query class.</div>
</div>
</body>
</html>
Bon beh voila... qu'est qu'il y a a personaliser quelles valeurs changer. Comment inserer tout ceci dans un template deja existant :
http://itx.free.fr/ ?? Merci de bien vouloir méclaircir ou de me proposer un code plus simple ^^