ThinkPHP3.2 获取客户端IP地址定位城市信息

不明白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) ;

你可能感兴趣的:(ThinkPHP3.2 获取客户端IP地址定位城市信息)