thinkphp获取ip地址及位置信息_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > thinkphp获取ip地址及位置信息

thinkphp获取ip地址及位置信息

 2018/4/3 17:11:41  青春..荒唐  程序员俱乐部  我要评论(0)
  • 摘要:(1)前言在我使用thinkphp类库IpLocation方法getLocation时,发现获取到信息为空.分析查询后得知,原因是在框架中没有加载地址库UTFWry.dat,可以在构造方法中看到__construct($filename="UTFWry.dat"),需要下载文件,解压后得到UTFWry.dat,把文件放在$this->fp=fopen(dirname(__FILE__).'/'.$filename,'rb')
  • 标签:PHP

(1)前言

在我使用thinkphp类库IpLocation方法getLocation时,发现获取到信息为空.

分析查询后得知,原因是在框架中没有加载地址库UTFWry.dat,可以在构造方法中看到__construct($filename = "UTFWry.dat"),需要下载文件,解压后得到UTFWry.dat,把文件放在

$this->fp? ? ? = fopen(dirname(__FILE__).'/'.$filename, 'rb'))

对应地址

ThinkPHP\Library\Org\Net/UTFWry.dat中

然后getlocation(ip地址)方法就可以获取到地址了

(2)主体

ThinkPHP\Common\funcitons.php下有一个get_client_ip()能够获取ip地址

但是有时候不够准确

找到了下面一段来

class="php" name="code">function get_client_ip($type = 0) {
    $type       =  $type ? 1 : 0;
    static $ip  =   NULL;
    if ($ip !== NULL) return $ip[$type];
    if($_SERVER['HTTP_X_REAL_IP']){//nginx 代理模式下,获取客户端真实IP
        $ip=$_SERVER['HTTP_X_REAL_IP'];    
    }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {//客户端的ip
        $ip     =   $_SERVER['HTTP_CLIENT_IP'];
    }elseif (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['REMOTE_ADDR'])) {
        $ip     =   $_SERVER['REMOTE_ADDR'];//浏览当前页面的用户计算机的ip地址
    }else{
        $ip=$_SERVER['REMOTE_ADDR'];
    }
    // IP地址合法验证
    $long = sprintf("%u",ip2long($ip));
    $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);
    return $ip[$type];
}

?现在我们就能用了

$ip=get_client_ip();

现在我们要根据ip地址获取用户的位置

Thinkphp支持IP定位功能,需要使用扩展类库Org\Net\IpLocation,并且要配合IP地址库文件一起使用

$Ip = new \Org\Net\IpLocation('UTFWry.dat'); // 实例化类 参数表示IP地址库文件
$area = $Ip->getlocation(); // 获取某个IP地址所在的位置

?这个UTFWry.dat需要我们下载

http://pan.baidu.com/s/1eSz1GTO 密码: 7q4v,解压后放到ThinkPHP\Library\Org\Net目录下

现在我把$area信息输出下

array(5) {
  ["ip"] => string(13) "218.79.93.194"
  ["beginip"] => string(11) "218.79.93.0"
  ["endip"] => string(13) "218.79.94.255"
  ["country"] => string(18) "上海市普陀区"
  ["area"] => string(20) "/静安区电信ADSL"
}

?

?

?

?

?

?

?

?

.

上一篇: hash编码与md5编码对比 下一篇: 没有下一篇了!
发表评论
用户名: 匿名