首先,新浪的接口地址为http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js
你可以试着直接在浏览器中输入,他就返回一个json串,下面是例子
var remote_ip_info = {"ret":1,"start":"61.135.152.0","end":"61.135.152.255","country":"\u4e2d\u56fd","province":"\u5317\u4eac","city":"\u5317\u4eac","district":"\u6d77\u6dc0","isp":"\u8054\u901a","type":"","desc":""};
可以看到,这不是一个严格的json串,他的前面有一个变量名,我们是不需要的,最后一个分号也是不能解析的,所以我们要处理一下,下面是我的方法
//这里的$this->ip_arr就是那个接口地址,你可以自行定义
$ip=file_get_contents($this->ip_arr);
$ip_arr = explode('=', $ip);
$real_json = substr_replace($ip_arr[1],'',-1);
$real_ip = json_decode($real_json,true);
最后获取的$real_ip就是一个数组了,类似我这个
Array ( [ret] => 1 [start] => 61.135.152.0 [end] => 61.135.152.255 [country] => 中国 [province] => 北京 [city] => 北京 [district] => 海淀 [isp] => 联通 [type] => [desc] => )当然像别的公司也有类似的接口
另外在网上还看到如下的方法,大家可以参考
补充一点:在网上找到另外一种方法:
代码如下:
$ip = $_SERVER['REMOTE_ADDR'];//这里的ip可以是你自定义的ip
$geoInfo = get_meta_tags(http://www.geobytes.com/IpLocator.htm?GetLocation&template=php3.txt&IpAddress=$ip);
/*
返回的数组信息如下,不过是英文版本的
Array
(
[known] => true //该IP地址是否可知,即是否有收录;
[locationcode] => CNGDGUAN //地址位置的代码,包含了国家、省份和城市;
[fips104] => CH //美国联邦信息处理标准的国家代码;
[iso2] => CN //iso2标准的国家代码;
[iso3] => CHN //iso标准的国家代码;
[ison] => 156 //用途未明
[internet] => CN //也是国家代码
[countryid] => 49 //国家ID;
[country] => China //国家名称;
[regionid] => 1361 //地区的id,即省份;
[region] => Guangdong //地区名称,即省份名称;
[regioncode] => GD //地区的代码或者缩写;
[adm1code] => CH30 //不清楚其含义;
[cityid] => 3539 //城市的ID;
[city] => Guangzhou //城市的名称;
[latitude] => 23.1170 //纬度;
[longitude] => 113.2500 //经度;
[timezone] => +08:00 //时区;
[certainty] => 78 //不清楚其含义;
)
*/
原文:http://www.phpall.cn/forum/read.php?tid=411
另外封装的一个方法(一个朋友提供):
$u = "";
$address = file_get_contents(" http://open.baidu.com/ipsearch/s?wd={ $ip}&tn=baiduip");
preg_match('#来自:<b>(.+)</b>#Ui', $address, $m);
return strval( $m[1]);
}
function GetRemoteIp( $default='127.0.0.1')
{
$ip_string = $_SERVER['HTTP_CLIENT_IP'].','. $_SERVER['HTTP_X_FORWARDED_FOR'].','. $_SERVER['REMOTE_ADDR'];
if ( preg_match ("/\d+\.\d+\.\d+\.\d+/", $ip_string, $matches) )
{
return $matches[0];
}
return $default;
}
$ip = GetRemoteIp();
$addr = address_baidu( $ip);
以上这些出自 http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/07/06/1771892.html