Совсем простой скрипт...
Code
function monitor_samp($ip, $qport, $game, $request)
{
$fp = @fsockopen("udp://$ip", $qport, $errno, $errstr, 1);
if (!$fp) { return FALSE; }
stream_set_timeout($fp, 1, 0); stream_set_blocking($fp, true);
$ip_array = explode(".", $ip);
$challenge = 'SAMP';
$challenge .= chr($ip_array[0]).chr($ip_array[1]).chr($ip_array[2]).chr($ip_array[3]);
$challenge .= chr($port & "\xFF");
$challenge .= chr($port >> 8 & "\xFF");
if ($request == "info") { $challenge .= "i"; }
fwrite($fp, $challenge);
$buffer = fread($fp, 4096);
fclose($fp);
if (!trim($buffer)) { return FALSE; }
echo $buffer."<BR>";
if (!substr($buffer, 0, 4) == "SAMP") { return FALSE; }
$buffer = substr($buffer, 11);
$data['password'] = ord(substr($buffer, 0, 1));
$data['players'] = ord(substr($buffer, 1, 2));
$data['maxplayers'] = ord(substr($buffer, 3, 2));
$buffer = substr($buffer, 5);
$data_length = ord(substr($buffer, 0, 4));
$data['hostname'] = substr($buffer, 4, $data_length);
$buffer = substr($buffer, 4 + $data_length);
$data_length = ord(substr($buffer, 0, 4));
$data['gametype'] = substr($buffer, 4, $data_length);
$buffer = substr($buffer, 4 + $data_length);
$data_length = ord(substr($buffer, 0, 4));
$data['mapname'] = substr($buffer, 4, $data_length);
$data['ip'] = $ip;
$data['qport'] = $qport;
return $data;
}
А использовать вот так:
Code
$data = monitor_samp("ip","порт", samp, info);
print_r($data);