Hi, I am working on a script for my members, what it does is allow the user to input an IP/Port of a game server into their profile, it works great but if the IP is no reachable or the member entered the wrong IP/Port it cause the page never to load, I put an error
"error: Either the server is offline or the query timed out."
any ideas how i get the script to quit and show the error if the IP is no reachable?
I left the mysql query out and some of the html to shorten the code a bit.
$ip = "209.191.132.41";
$port = "27015";
$mapdir = '../images/mappics/';
$nopic = '/images/mappics/nopic.gif';
$fp = fsockopen("udp://$ip", $port, &$errno, &$errstr);
if (!$fp) {
echo "error: Either the server is offline or the query timed out.<br>\n";
} else {
fwrite($fp,"ÿÿÿÿdetails\x00");
$got = 0;
$max = 0;
$done =0;
$do = true;
while($do) {
$max++;
$str = fread($fp, 1);
$buffer .= $str;
if($str == "\x00") {
$done++;
}
if($done == 11) {
$do = false;
}
}
fclose($fp);
}
$place = 5;
while($got <5) {
while(($buffer[$place] != "\x00") and ($place < $max) ) {
$infos[$got] .= $buffer[$place];
$place++;
}
$got++;
$place++;
}
if($got == 5) {
$tmp = $buffer[$place];
$infos[$got] = ord($tmp); //clients
$got++;
$place++;
$tmp = $buffer[$place];
$infos[$got] = ord($tmp); //max clients
$got++;
$place++;
$tmp = $buffer[$place];
$infos[$got] = ord($tmp); //protocol
$got++;
$place++;
if( $buffer[$place] == "l" ) {
$infos[$got] = "Listen Server";
} else if( $buffer[$place] == "d" ) {
$infos[$got] = "Dedicated Server";
}
$got++;
$place++;
if( $buffer[$place] == "l" ) {
$infos[$got] = "Linux";
} else if( $buffer[$place] == "w" ) {
$infos[$got] = "Win32";
}
$got++;
$place++;
if( ord($buffer[$place]) == 1 ) {
$infos[$got] = "Yes";
} else {
$infos[$got] = "No";
}
$got++;
$place++;
$place++;
while(($buffer[$place] != "\x00") and ($place < $max) ) {
$infos[$got] .= $buffer[$place];
$place++;
}
} //end if
// Grab Player Data
$fp = fsockopen("udp://$ip", $port, &$errno, &$errstr);
if (!$fp) {
echo "ERROR: $errno - $errstr<br>\n";
} else {
fwrite($fp,"ÿÿÿÿplayers\x00");
$str = fread($fp, 6);
$top = ord($str[5]);
for($usr = 0; $usr <= ($top-1); $usr++) {
$do = true;
$str = fread($fp, 1);
$pindex[$usr] = ord($str);
while($do) {
$str = fread($fp,1);
if($str == "\x00") {
$do = false;
} else {
$playname[$usr] .= $str;
}
}
$tot = 0;
$str = fread($fp, 1);
$tot += ord($str);
$str = fread($fp, 1);
$tot += ord($str) * 256;
$str = fread($fp, 1);
$tot += ord($str) * 65536;
$str = fread($fp, 1);
$tot += ord($str) * 16777216;
if($tot >= 16777216) { // ie is negative
$tot -= (4294967296);
}
$playfrag[$usr] = $tot;
//Get Player Time
$bin = '';
for($loop = 0; $loop <= 3; $loop++) {
$bin = str_pad(decbin(ord(fread($fp, 1))), 8, '0', STR_PAD_LEFT).$bin;
}
// get sign
$sign = bindec(substr($bin, 0, 1));
// get exponent and adjust for special case and bias
$exponent = bindec(substr($bin, 1, 8));
$exponent = ($exponent)? $exponent - 127 : $exponent;
if($exponent) {
// get the binary number of the mantissa
$int = bindec('1'.substr($bin, 9, $exponent));
$dec = bindec(substr($bin, 9 + $exponent));
$hours = number_format($int/3600, 4);
$h = split('[.]', $hours);
$hoffset = $h[0]*3600;
$time = date("i:s",$int-$hoffset);
$playtime[$usr] = "$h[0]:$time";
}
}
}
fclose($fp);
?>