I have been working on trying to fix a code I got from a friend. We host CounterStrike servers together, and I cannot seem to figure out this problem.
It is a code that displays server info that anyone can view.
I do not know why this “A” is there. It should be,
Server IP |
|
Server Port |
|
OK |
|
<?php
exit;
}
//Step 3: Prepare the functions
function server_info($ip,$port) {
$fp = @fsockopen(“udp://”.$ip, $port, $errno, $errstr);
fwrite($fp, chr(1).chr(0).chr(251).chr(2));
return fread($fp,2048);
}
function server_players($ip,$port) {
$fp = @fsockopen(“udp://”.$ip, $port, $errno, $errstr);
fwrite($fp, chr(1).chr(0).chr(251).chr(5));
return fread($fp,2048);
}
function strToHex($string) {
$hex=’’;
for ($i=0; $i < strlen($string); $i++) {
if (strlen(dechex(ord($string[$i])))==1) {
$hex .= “0”.dechex(ord($string[$i]));
} else {
$hex .= dechex(ord($string[$i]));
}
}
return $hex;
}
function hexToStr($hex) {
$string=’’;
for ($i=0; $i < strlen($hex)-1; $i+=2)
{
$string .= chr(hexdec($hex[$i].$hex[$i+1]));
}
return $string;
}
//Step 4: Gather raw data from udp return, strip the header.
$v_temp=substr(strToHex(server_info($svip,$svport)),8);
if ($v_temp=="") {
echo “Timeout! Server does not answer!
Maybe it is offline or busy. Try again later.
<input type=“button” onClick=“location.href=’”.$pagename.”’" value=“Back”/>";
exit;
}
//Step 5: Gather has_password,has_fow,has_ff,has_lua, change them to text
$v_mixed=hexdec(substr($v_temp,0,2));
$v_values="";
while($v_mixed!=1) {
if ($v_mixed % 2==true) {
$v_values=$v_values.“1”;
} else {
$v_values=$v_values.“0”;
}
$v_mixed=intval($v_mixed/2);
}
for ($i=1; $i==8-strlen($v_values); $i++) {
$v_values=“0”.$v_values;
}
$password=substr($v_values,1,1);
$fow=substr($v_values,3,1);
$ff=substr($v_values,4,1);
$lua=substr($v_values,7,1);
$us=substr($v_values,2,1);
if ($password==“1”) {
$password=“Password protected”;
} else {
$password=“No Password”;
}
if ($fow==“1”) {
$fow=“On”;
} else {
$fow=“Off”;
}
if ($ff==“1”) {
$ff=“On”;
} else {
$ff=“Off”;
}
if ($lua==“1”) {
$lua=“Server uses Lua scripts”;
} else {
$lua=“No scripts”;
}
if ($us==“1”) {
$us=“Yes”;
} else {
$us=“No, everyone”;
}
//Step 6: Gather sv_name,sv_map,create the length
$svname=utf8_encode(hexToStr(substr($v_temp,4,hexdec(substr($v_temp,2,2))2)));
$namelen=strlen(hexToStr(substr($v_temp,4,hexdec(substr($v_temp,2,2))2)));
$svmap=hexToStr(substr($v_temp,6+$namelen2,hexdec(substr($v_temp,4+$namelen2,2))*2));
//Step 7: Get Player+PlayerMax+Bots
if (strlen($v_temp)-strlen($namelen)*2-strlen($svmap)*2-4==8) {
$players=hexdec(substr($v_temp,-6,2));
$maxplayers=hexdec(substr($v_temp,-4,2));
$bots=hexdec(substr($v_temp,-2,2));
} else {
$players=hexdec(substr($v_temp,-8,2));
$maxplayers=hexdec(substr($v_temp,-6,2));
$bots=hexdec(substr($v_temp,-2,2));
}
if ($bots==1) {$name_bots=“bot”;} else {$name_bots=“bots”;}
//Step 8: Get Gamemode
if (strlen($v_temp)-$namelen*2-strlen($svmap)*2-4==8) {
$gamemode=“Standard”;
} else {
$gamemodes=array(“Death Match”,“Team Death Match”,“Construction”,“Zombie”);
$gamemode=$gamemodes[intval(substr($v_temp,-4,2))-1];
}
//Step 9: Output the data to html
echo ‘
’;
echo “
IP |
$svip |
”;
echo “
Port |
$svport |
”;
echo “
Name |
$svname |
”;
echo “
Map |
$svmap |
”;
echo “
Players |
$players/$maxplayers ($bots $name_bots) |
”;
echo “
Password |
$password |
”;
echo “
U.S.G.N. Users Only |
$us |
”;
echo “
Fog of War |
$fow |
”;
echo “
Friendly Fire |
$ff |
”;
echo “
Lua Scripts |
$lua |
”;
echo “
Gamemode |
$gamemode |
”;
echo “
”;
echo ‘’;
echo “
ID |
Name |
Score |
Deaths |
Team |
”;
//Step 10: Output Player data, it’s easier here
$v_temp=substr(strToHex(server_players($svip,$svport)),10);
$last=0;
for ($i = 1; $i <= 32; $i++) {
$v_temp=substr($v_temp,$last);
$userlen=hexdec(substr($v_temp,2,2))*2;
if (hexdec(substr($v_temp,0,2))==0) {
break;
}
$player_id=hexdec(substr($v_temp,0,2));
$player_name=utf8_encode(hexToStr(substr($v_temp,4,$userlen)));
$player_score=hexdec(substr($v_temp,$userlen+10,2).substr($v_temp,$userlen+8,2).substr($v_temp,$userlen+6,2));
$player_deaths=hexdec(substr($v_temp,$userlen+18,2).substr($v_temp,$userlen+16,2).substr($v_temp,$userlen+14,2));
if (hexdec(substr($v_temp,$userlen+4,2))==1) {
$player_team=“Terrorist”;
} elseif (hexdec(substr($v_temp,$userlen+4,2))==2) {
$player_team=“Counter-Terrorist”;
} else {
$player_team=“Spectator”;
}
echo “
$player_id |
$player_name |
$player_score |
$player_deaths |
$player_team |
”;
$last=$userlen+22;
}
echo “
”;
[/php]
I would appreciate any help or information as to why this error keeps occurring.