index file & processor
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>GeoIP test</title>
<script src="https://www.google.com/jsapi?key=ABQIAAAA2JkjzIsocJrpbWWWWBkxXBQU8KnVA5ioduYTAndvPB719uXNLhSDheYFYlxY4thgNIMkmr2mK_FM9g" type="text/javascript"></script>
<script>google.load('jquery','1.4.2');
</script>
</head>
<pre>
===Geolocation test, Yandex.geo & ipgeobase.ru===
===А также мой <a href="http://www.chto.su">уютненький бложег</a>===
<a href="source.php">View source code</a>
<form method="post">
ip:<input type="text" name="ip" value="<?php print getip();?>">
<div class="wifi">
wifi mac:<input type="text" class="mac" name="mac[]"><a href="javascript://" onclick="javascript:$('.wifi:first').after($('.wifi:first').clone());">Add more</a>
wifi signal strength:<input type="text" class="ss" name="ss[]">
</div>
<input type="submit">
</form>
<?php

if ($_SERVER['REQUEST_METHOD']=='POST') {
    
$macs = (array)$_POST['mac'];
    
$sss = (array)$_POST['ss'];
    
$ip = (string)$_POST['ip'];

    
$json['common']['version'] = '1.0';
    
$json['common']['api_key'] = 'AP8l604BAAAAjQsMbQMAvLFYqex2EWnhu2ZdAMZzbl5u-G4AAAAAAAAAAABSFiYIxYfBu_eS8zB7-IWZpbpWTg==';
    foreach (
$macs as $k=>$mac) {
    if (
$mac)
        
$json['wifi_networks'][] = array('mac'=>$mac,'signal_strength'=>$sss[$k]);
    }
    if (
$ip)
    
$json['ip']['address_v4'] = $ip;
    print 
'sent:';
    
var_dump($json);
    
$result post_request('http://api.lbs.yandex.net/geolocation',array('json'=>json_encode($json)));
    print 
'<hr/>received:';
    
var_dump($result);
    
    
$result json_decode($result['content']);
    
$result = (array)$result->position;
    print 
"<hr/><h1>Searched by: {$result['type']}</h1>";
    print 
'<div style="width:700px;height:400px;" id="map"></div>';

print     
<<<HTML
<script>
google.load("maps", "3", {other_params:'sensor=false', callback: function(){
  var map; // initialize your map in here
  var markersArray = [];
    var center = new google.maps.LatLng(
{$result['latitude']}{$result['longitude']});

        var myOptions = {
          zoom: 8,
          center: center,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById('map'),
            myOptions);
      
       var marker = new google.maps.Marker({
      position: center,
      map: map,
    animation: google.maps.Animation.DROP,
      title:"U're here"
  });
      
      }
});
</script>
HTML;
if (
$ip) {
print 
'<hr><h1>Another base (ipgeobase.ru)</h1>';
        
$city file_get_contents('http://ipgeobase.ru:7020/geo?ip='.$ip);
        
$p xml_parser_create();
        
xml_parse_into_struct($p,$city,$city);
        
$p xml_parser_free($p);
        print 
'recevied:';
        
var_dump($city);
        }
}
/**
 * Gets user ip
 * @return string user ip
 */
function getip() {
    
$ip false;
    if(!empty(
$_SERVER['HTTP_CLIENT_IP']))
    {
        
$ip $_SERVER['HTTP_CLIENT_IP'];
    }
    if(!empty(
$_SERVER['HTTP_X_FORWARDED_FOR']))
    {
        
$ips explode(", "$_SERVER['HTTP_X_FORWARDED_FOR']);
        if(
$ip)
        {
            
array_unshift($ips$ip);
            
$ip false;
        }
        for(
$i 0$i count($ips); $i++)
        {
        if(!
preg_match("/^(10|172\.16|192\.168)\./i"$ips[$i]))
        {
        if(
version_compare(phpversion(), "5.0.0"">="))
        {
        if(
ip2long($ips[$i]) != false)
        {
        
$ip $ips[$i];
        break;
        }
        }
        else
        {
            if(
ip2long($ips[$i]) != - 1)
            {
            
$ip $ips[$i];
            break;
    }
    }
}
}
}
return (
$ip $ip $_SERVER['REMOTE_ADDR']);
}

function 
post_request($url$data$referer='') {
 
    
// Convert the data array into URL Parameters like a=b&foo=bar etc.
    
$data http_build_query($data);
 
    
// parse the given URL
    
$url parse_url($url);
 
    if (
$url['scheme'] != 'http') { 
        die(
'Error: Only HTTP request are supported !');
    }
 
    
// extract host and path:
    
$host $url['host'];
    
$path $url['path'];
 
    
// open a socket connection on port 80 - timeout: 30 sec
    
$fp fsockopen($host80$errno$errstr30);
 
    if (
$fp){
 
        
// send the request headers:
        
fputs($fp"POST $path HTTP/1.1\r\n");
        
fputs($fp"Host: $host\r\n");
        
fputs($fp"Accept-Encoding: identity\r\n");
 
        if (
$referer != '')
            
fputs($fp"Referer: $referer\r\n");
 
        
fputs($fp"Content-type: application/x-www-form-urlencoded\r\n");
        
fputs($fp"Content-length: "strlen($data) ."\r\n");
        
fputs($fp"Connection: close\r\n\r\n");
        
fputs($fp$data);
 
        
$result ''
        while(!
feof($fp)) {
            
// receive the results of the request
            
$result .= fgets($fp128);
        }
    }
    else { 
        return array(
            
'status' => 'err'
            
'error' => "$errstr ($errno)"
        
);
    }
 
    
// close the socket connection:
    
fclose($fp);
 
    
// split the result header from the content
    
$result explode("\r\n\r\n"$result2);
 
    
$header = isset($result[0]) ? $result[0] : '';
    
$content = isset($result[1]) ? $result[1] : '';
 
    
// return as structured array:
    
return array(
        
'status' => 'ok',
        
'header' => $header,
        
'content' => $content
    
);
}
?>
</pre>
</html>