不明白tp系统内置接口却不及时更新UTFWry.dat这给很多新手小伙伴带来疑惑,所以我在这里直接拒绝大家使用这个方法
系统默认是这样的
$ip = get_client_ip();
$Ip = new \Org\Net\IpLocation('UTFWry.dat'); // 实例化类 参数表示IP地址库文件
$area = $Ip->getlocation('203.34.5.66'); // 获取某个IP地址所在的位置
我的更改方法如下
第一步:$AderssIp = get_client_ip(); //获取客户端ip tp系统插件获取ip
我还有自己方法:
public function getIP()
{
static $realip;
if (isset($_SERVER)){
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else if (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");
} else if (getenv("HTTP_CLIENT_IP")) {
$realip = getenv("HTTP_CLIENT_IP");
} else {
$realip = getenv("REMOTE_ADDR");
}
}
return $realip;
}
直接复制上面的代码应用到自己逻辑中即可
$location = $this->baiduIP('112.32.92.118'); // 获取某个IP地址所在的位置
第二步:使用百度api获取客户端地址信息
public function baiduIP($clientIP){
$baiduIP = "http://api.map.baidu.com/location/ip?ak=百度spi&ip=".$clientIP."&coor=bd09ll";
$IPinfo = json_decode(file_get_contents($baiduIP));
//print_r($IPinfo) ;使用打印数组来查看返回的所有地址信息获取自己想要的即可。
if($IPinfo->status!=0)
{
return "定位失败";
exit();
}else
{
$arr = $IPinfo->content->address_detail->city;//解析json
return str_replace("市","",$arr);//返回市级单位
}
}
第三步:$location = $this->baiduIP('112.32.92.118'); // 获取某个IP地址所在的位置
最后打印:echo '定位'.print_r($location) ;