ThinkPHP获取ip地址,或者数字地址和ip地理位置的查询

1.TP 中获取客户端IP地址的系统公共函数是:function get_client_ip()。返回值就是IP地址或者数字地址

看下源码:

function get_client_ip($type = 0,$adv=false) {
    $type       =  $type ? 1 : 0;
    static $ip  =   NULL;
    if ($ip !== NULL) return $ip[$type];
    if($adv){
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $arr    =   explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            $pos    =   array_search('unknown',$arr);
            if(false !== $pos) unset($arr[$pos]);
            $ip     =   trim($arr[0]);
        }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
            $ip     =   $_SERVER['HTTP_CLIENT_IP'];
        }elseif (isset($_SERVER['REMOTE_ADDR'])) {
            $ip     =   $_SERVER['REMOTE_ADDR'];
        }
    }elseif (isset($_SERVER['REMOTE_ADDR'])) {
        $ip     =   $_SERVER['REMOTE_ADDR'];
    }
    // IP地址合法验证
    $long = sprintf("%u",ip2long($ip));
    $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);
    return $ip[$type];
}

get_client_ip(0)返回ip    get_client_ip(1)返回ipv4的数字地址


2.查询ip的地理位置,这里要下载ip库(UTFWry.dat),地址:http://www.thinkphp.cn/extend/270.html

并把下载好的dat文件放入和IpLocation.class.php同级目录中


在Controller中写如下代码:

use Org\Net\IpLocation;
//把IpLocation导入
$ip=new Iplocation();//新建一个IP查询对象
$location=$ip->getlocation();
var_dump($location);
这里不贴getlocation()的源码了,太长了,有兴趣的人可以自己去看哦

最终结果下:


$location['ip'] // IP地址
$location['beginip'] // 用户IP所在范围的开始地址
$location['endip'] // 用户IP所在范围的结束地址
$location['country'] // 所在国家或者地区
$location['area'] // 所在区域


getlocation()还可以获取指定域名的地理位置信息

$ip=new IpLocation();
$location=$ip->getlocation('baidu.com');//获取百度的
var_dump($location);


当然直接传ip也是可以的,就不举例

如果你使用的IP地址库文件不是UTFWry.dat(注意在Linux下面文件名的大小写也需要一致)的话,我们需要在实例化IpLocation类的时候传入地址库文件名,例如:

代码如下:
$Ip = new IpLocation('MyIpWry.dat'); // 传入IP地址库文件名

如果你的IP地址库是GBK编码的话,需要对返回结果进行编码转换。例如:

代码如下:
$info = iconv('gbk','utf-8',$location['country'].$location['area']);

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值