note 104188 deleted from function.fsockopen by danbrown
| From: | danbrown@php.net | Date: | Tue, 31 May 2011 15:05:35 +0000 |
| Subject: | note 104188 deleted from function.fsockopen by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-180122@lists.php.net to get a copy of this message | ||
Note Submitter: Genert
----
For getting information of game server use:
This uses Wolfenstein:Enemy Territory port.
Example is here: http://genert.impact.pri.ee/ser/server.php?ip=188.165.209.117:29000
<?
$ip = $_GET['ip'];
$port = $_GET['port'];
if (preg_match("/(.+):([0-9]*)/", $ip, $array)) {
$ip = gethostbyname($array[1]);
$port = $array[2];
} if (!isset($port) || $port == null) {
$port = 27960;
}
$fp = fsockopen('udp://' . $ip, $port, $errno, $errstr);
if (!$fp) {
$status['connected'] = false;
} else {
fputs($fp, "ËËËËgetstatus\n");
socket_set_timeout($fp, 2);
$serverstatus = fread($fp, 5000);
fclose($fp);
$serverstatus = split("\n", $serverstatus);
$info['total'] = count($serverstatus);
$info['start'] = ($info['total'] > 3 ? 4 : 3);
for ($i = 0; $i < $info['start']; $i++) {
if ($i == 0) {
if ($serverstatus[0]) {
$status['connected'] = true;
} else {
$status['connected'] = false;
break;
}
} elseif ($i == 1) {
$status['gameinfo'] = true;
$gameinfo = split("[\\]", $serverstatus[1]);
for ($j = 1; $j < count($gameinfo) - 1; $j++) {
$k++;
$ginfo[$k] = $gameinfo[$j++] . "\\" . $gameinfo[$j];
}
foreach ($ginfo as $key => $data) {
list($settings[$key]['cvar'], $settings[$key]['value']) =
split("[\\]", $data, 2);
}
} elseif ($i == 2) {
if ($info['total'] > 3) {
$status['players'] = true;
for ($l = 2; $l < ($info['total'] - 1); $l++) {
$m++;
list($players[$m]['score'], $players[$m]['ping'],
$players[$m]['name']) = split(" ", $serverstatus[$l], 3);
if (getValue("gamename") == "osp") {
$players[$m]['name'] = fixOSPColors(substr($players[$m]['name'], 1, -1));
} else {
$players[$m]['name'] = fixColors(substr($players[$m]['name'], 1, -1));
}
}
} else {
$status['players'] = false;
}
if ($i == ($info['start'] - 1) && $info['start'] == 3) {
$status['disconnected'] = true;
}
} elseif ($i == ($info['start'] - 1)) {
$status['disconnected'] = true;
}
}
}
?>