Well, made a few more updates. Version number, dedicated(bool), and OS:
<?php
function source_query($ip){
$cut = explode(":", $ip);
$HL2_address = $cut[0];
$HL2_port = $cut[1];
$HL2_stats = '';
$results = array();
$HL2_command = "\xFF\xFF\xFF\xFFTSource Engine Query\x00";
$HL2_socket = fsockopen("udp://".$HL2_address, $HL2_port, $errno, $errstr,3);
fwrite($HL2_socket, $HL2_command);
$JunkHead = fread($HL2_socket,4);
$CheckStatus = socket_get_status($HL2_socket);
if($CheckStatus["unread_bytes"] == 0)return 0;
$i = 1;
while($i){
$str = fread($HL2_socket,1);
$HL2_stats .= $str;
$CheckStatus = socket_get_status($HL2_socket);
if($CheckStatus["unread_bytes"] == 0){
$i = 0;
}
}
fclose($HL2_socket);
$HL2_stats = substr($HL2_stats,1);
$HL2_stats = explode('|||',urldecode(str_replace(array('%07', '%00'),array('','|||'),urlencode($HL2_stats))));
foreach($HL2_stats as $k => $v){
switch($k){
case '0':
$results['Hostname'] = $v;
case '1':
$results['Map'] = $v;
case '2':
$results['Game'] = $v;
case '3':
$results['Gamemode'] = $v;
case '5':
if(substr($v,0,1) == 'd'){
$results['Dedicated'] = 'True';
}else{
$results['Dedicated'] = 'False';
}
if(substr($v,1,1) == 'w'){
$results['OS'] = 'Windows';
}else{
$results['OS'] = 'Linux';
}
case '7':
$results['Version'] = $v;
}
}
return $results;
}
?>
<?php
$ip = '74.193.56.8:27015';
$results = source_query($ip);
foreach($results as $k => $v){
echo $k. ' = ' .$v. '<br />';
}
?>
Output:
Hostname = Jay209015 Dev Server
Map = gm_flatgrass
Game = garrysmod
Gamemode = sandbox
Dedicated = False
OS = Linux
Version = 1.0.0.76