<?php
$ts['ip'] = 'SERVERIP';
$ts['queryport'] = 51234;
$ts['port'] = 'PORT';
$ts['name'] = "SERVERNAME";
$ts['error'] = 0;
$ts['ver'] = "VERSION";
$ts['type'] = "TYPE";
$ts['plat'] = "PLATFORM";
$ts['wm'] = "WELCOME MESSAGE";
$format = '%H:%M:%S';
$currenttime = "[" . strftime($format) . "]";
$cmd[1] = "cl " . $ts['port'] . "\nquit\n";
$cmd[2] = "pl " . $ts['port'] . "\nquit\n";
$connection[1] = @fsockopen($ts['ip'], $ts['queryport'], &$errno, &$errstr, 1);
$connection[2] = @fsockopen($ts['ip'], $ts['queryport'], &$errno, &$errstr, 1);
if (!$connection[1])
{
$ts['error'] = 1;
}
else
{
@fputs($connection[1],$cmd[1], strlen($cmd[1]));
while($data = @fgets($connection[1], 4096))
{
$data = explode(chr(9), $data);
if(isset($data[5]) AND $data[5] !== "name")
{
if($data[2] < 0)
{
$channel_order[$data[0]] = $data[3];
$channel[$data[0]]['id'] = $data[0];
$channel[$data[0]]['codec'] = $data[1];
$channel[$data[0]]['parent'] = $data[2];
$channel[$data[0]]['order'] = $data[3];
$channel[$data[0]]['maxusers'] = $data[4];
$channel[$data[0]]['name'] = $data[5];
$channel[$data[0]]['flags'] = $data[6];
$channel[$data[0]]['password'] = $data[7];
$channel[$data[0]]['topic'] = $data[8];
}
else
{
$subchannel_order[$data[2]][$data[0]] = $data[3];
$subchannel[$data[2]][$data[0]]['id'] = $data[0];
$subchannel[$data[2]][$data[0]]['codec'] = $data[1];
$subchannel[$data[2]][$data[0]]['parent'] = $data[2];
$subchannel[$data[2]][$data[0]]['order'] = $data[3];
$subchannel[$data[2]][$data[0]]['maxusers'] = $data[4];
$subchannel[$data[2]][$data[0]]['name'] = $data[5];
$subchannel[$data[2]][$data[0]]['flags'] = $data[6];
$subchannel[$data[2]][$data[0]]['password'] = $data[7];
$subchannel[$data[2]][$data[0]]['topic'] = $data[8];
}
}
}
}
@fclose($connection[1]);
if (!$connection[2])
{
$ts['error'] = 1;
}
else
{
@fputs($connection[2],$cmd[2], strlen($cmd[2]));
while($data = @fgets($connection[2], 4096))
{
$data = explode(chr(9), $data);
if(isset($data[13]) AND $data[13] !== 'ip')
{
$player[$data[0]]['p_id'] = $data[0];
$player[$data[0]]['c_id'] = $data[1];
$player[$data[0]]['ps'] = $data[2];
$player[$data[0]]['bs'] = $data[3];
$player[$data[0]]['pr'] = $data[4];
$player[$data[0]]['br'] = $data[5];
$player[$data[0]]['pl'] = $data[6];
$player[$data[0]]['ping'] = $data[7];
$player[$data[0]]['logintime'] = $data[8];
$player[$data[0]]['idletime'] = $data[9];
$player[$data[0]]['cprivs'] = $data[10];
$player[$data[0]]['pprivs'] = $data[11];
$player[$data[0]]['pflags'] = $data[12];
$player[$data[0]]['ip'] = $data[13];
$player[$data[0]]['nick'] = $data[14];
$player[$data[0]]['loginname'] = $data[15];
}
}
}
@fclose($connection[2]);
if(isset($channel))
{
asort($channel_order);
}
if(isset($subchannel))
{
foreach($subchannel as $k => $v)
{
asort($subchannel_order[$k]);
}
}
function pl_status($pl_status)
{
return "<img src=\"images/bullet_" . $pl_status . ".gif\"> ";
}
function pl_flags($pl_flags,$ch_flags)
{
if($pl_flags == 13)
{
$a = "R SA";
}
elseif($pl_flags == 5)
{
$a = "R SA";
}
elseif($pl_flags == 4)
{
$a = "R";
}
else
{
$a = "U";
}
if($ch_flags == 1)
{
$b = " CA";
}
else
{
$b = "";
}
return $a . $b;
}
function ch_flags($nr)
{
$ch_flags[0] = " (R)";
$ch_flags[1] = " (U)";
$ch_flags[2] = " (RM)";
$ch_flags[3] = " (UM)";
$ch_flags[4] = " (RP)";
$ch_flags[5] = " (UP)";
$ch_flags[6] = " (RMP)";
$ch_flags[7] = " (UMP)";
$ch_flags[8] = " (RS)";
$ch_flags[9] = " (US)";
$ch_flags[10] = " (RMS)";
$ch_flags[11] = " (UMS)";
$ch_flags[12] = " (RPS)";
$ch_flags[13] = " (UPS)";
$ch_flags[14] = " (RMPS)";
$ch_flags[15] = " (UMPS)";
$ch_flags[16] = " (RD)";
$ch_flags[18] = " (RMD)";
$ch_flags[20] = " (RPD)";
$ch_flags[22] = " (RMPD)";
$ch_flags[24] = " (RSD)";
$ch_flags[26] = " (RMSD)";
$ch_flags[28] = " (RPSD)";
$ch_flags[30] = " (RMPSD)";
return $ch_flags[$nr];
}
echo "<img src='images/bullet_server.gif'> " . $ts['name'] . "<br>\n";
if(isset($channel))
{
foreach($channel_order as $c_id => $c_order)
{
echo "<img src='images/bullet_channel.gif'> " . trim($channel[$c_id]['name'], "\x22\x27") . ch_flags($channel[$c_id]['flags']) . "<br>\n";
if(isset($subchannel[$c_id]))
{
foreach($subchannel_order[$c_id] as $sc_id => $sc_order)
{
echo "<img src='images/bullet_subchannel.gif'> " . trim($subchannel[$c_id][$sc_id]['name'], "\x22\x27") . "<br>\n";
if(isset($player))
{
foreach($player as $p_id => $p_data)
{
if($p_data['c_id'] == $subchannel[$c_id][$sc_id]['id'])
{
echo " " . pl_status($p_data['pflags']) . addslashes(htmlspecialchars(trim($p_data['nick'], "\x22\x27"))) . " (" . pl_flags($p_data['pprivs'],$p_data['cprivs']) . ")<br>\n";
}
}
}
}
}
if(isset($player))
{
foreach($player as $p_id => $p_data)
{
if($p_data['c_id'] == $channel[$c_id]['id'])
{
echo pl_status($p_data['pflags']) . addslashes(htmlspecialchars(trim($p_data['nick'], "\x22\x27"))) . " (" . pl_flags($p_data['pprivs'],$p_data['cprivs']) . ")<br>\n";
}
}
}
}
}
?>
As you can see the code is quite hefty..and no that's not all the code...only the PHP..I have some HTML that I didn't paste, but anyways that's the bulk of it. My question is..is there anyway to get more out of $data? Because currently it only gives chan info, nicks, and modes. I was wondering if you could get the Servername, Version, Platform, Type, and Welcome Message from $data? I'm a bit new to sockets inside PHP, and I apologize if this is a stupid question.
Background info: this is a script to look at the status of a TeamSpeak 2 server if you don't understand the current script and think it'd be better to paste the full script, just ask...I will. And I will be sharing this script once I'm done...