/**
* 根据访问用户IP判断所属区域信息
*
* @author flyer0126
* @since 2012/07/09
*/

/**
* 获取用户端ip
* @return Ambigous <unknown, string>
*/
function getIP(){
if (isset($_SERVER)) {
if (isset($_SERVER[HTTP_X_FORWARDED_FOR])) {
$realip = $_SERVER[HTTP_X_FORWARDED_FOR];
} elseif (isset($_SERVER[HTTP_CLIENT_IP])) {
$realip = $_SERVER[HTTP_CLIENT_IP];
} else {
$realip = $_SERVER[REMOTE_ADDR];
}
} else {
if (getenv("HTTP_X_FORWARDED_FOR")) {
$realip = getenv( "HTTP_X_FORWARDED_FOR");
} elseif (getenv("HTTP_CLIENT_IP")) {
$realip = getenv("HTTP_CLIENT_IP");
} else {
$realip = getenv("REMOTE_ADDR");
}
}
return $realip;
}

$ip = getIP();

// 利用新浪接口根据ip查询所在区域信息
$res0 = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=$ip");
$res0 = json_decode($res0);
print_r($res0);

// 利用淘宝接口根据ip查询所在区域信息
$res1 = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=$ip");
$res1 = json_decode($res1);
print_r($res1);

 

 示例输出结果如下:

stdClass Object
(
[ret] => 1
[start] => XXX.XXX.XXX.XXX
[end] => XXX.XXX.XXX.XXX
[country] => 中国
[province] => 北京
[city] => 北京
[district] =>
[isp] => 电信
[type] => 机房
[desc] => 南三环洋桥电信机房
)
stdClass Object
(
[code] => 0
[data] => stdClass Object
(
[country] => 中国
[country_id] => 86
[area] => 华北
[area_id] => 100000
[region] => 北京市
[region_id] => 110000
[city] => 北京市
[city_id] => 110000
[county] =>
[county_id] => -1
[isp] => 电信
[isp_id] => 100017
[ip] => XXX.XXX.XXX.XXX
)

)