ThinkPHP使用UTFWry地址库进行IP定位实例


Posted in PHP onApril 01, 2014

可以在官网的 http://www.thinkphp.cn/extend/223.html下载IP定位扩展类库,或者下载扩展包( http://www.thinkphp.cn/down/253.html)里面也已经包含该扩展类了。如果是单独下载的上传类库,把解压后的IpLocation.class.php 放入ThinkPHP/Extend/Library/ORG/Net/(如果没有请手动创建)目录下面。

一、获取IP地址

如果你仅仅需要获取用户访问的IP地址,那么直接使用系统内置的get_client_ip函数即可,该函数是ThinkPHP标准模式内置方法,可以直接使用,比PHP内置的系统变量$_SERVER['HTTP_CLIENT_IP']具有更好的兼容性,用法:

$ip = get_client_ip();

get_client_ip支持IP地址的多种情况检测和合法性验证,返回值就是获取到的IP地址,如果获取到的IP地址非法,将返回0.0.0.0。
如果需要,也可以返回IPV4地址数字,例如:

$ip = get_client_ip(1);

返回的结果可能类似于:

2130706433

可用于地址范围和比较。

二、IP地址定位
仅仅获取IP地址并不能完全满足应用的需求,只能记录下来用于日后的日志分析需要,IP地址定位功能可以让你获取用户的所在区域。要使用IP定位功能,除了需要IpLocation扩展类库之外,还需要IP地址库文件,由于ThinkPHP默认采用UTF8编码,因此最好是UTF8格式的IP地址库文件,如果是纯真gbk编码的IP地址库文件,则需要对获取结果进行编码转换(下面会提到),可以在这里下载UTF8编码的地址库文件: http://www.thinkphp.cn/extend/270.html
解压后的地址库文件UTFWry.dat放入IpLocation扩展类库所在目录下面即可。
使用方法:

import('ORG.Net.IpLocation');// 导入IpLocation类
$Ip = new IpLocation(); // 实例化类
$location = $Ip->getlocation('218.79.93.194'); // 获取某个IP地址所在的位置

返回的location变量是一个数组,包括:

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

通常,我们要获取IP定位的话,只需要取country和area信息:

$info =  $location['country'].$location['area'];

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

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

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

$info = iconv('gbk','utf-8',$location['country'].$location['area']);

如果调用getlocation方法的时候没有传入任何参数,系统会自动调用上面的get_client_ip函数获取当前所在IP地址:

$location = $Ip->getlocation();

也可以支持传入域名来自动获取ip地址

import('ORG.Net.IpLocation');// 导入IpLocation类
$Ip = new IpLocation(); // 实例化类
$area = $Ip->getlocation('www.thinkphp.cn'); // 获取域名服务器所在的位置
dump($area);

运行结果输出:

ThinkPHP使用UTFWry地址库进行IP定位实例

如果大家使用的是纯真IP地址库,或者经常需要变换不同的地址库,为了方便IP定位的查询,也可以单独封装一个函数来获取位置信息,参考这里: http://www.thinkphp.cn/code/88.html

PHP 相关文章推荐
浅谈PHP语法(1)
Oct 09 PHP
php xml-rpc远程调用
Dec 19 PHP
php三维数组去重(示例代码)
Nov 26 PHP
php $_SERVER windows系统与linux系统下的区别说明
Feb 14 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
Aug 14 PHP
php实现网页缓存的工具类分享
Jul 14 PHP
一键生成各种尺寸Icon的php脚本(实例)
Feb 08 PHP
PHP实现QQ登录的开原理和实现过程
Feb 04 PHP
PHP实现微信红包金额拆分试玩的算法示例
Apr 07 PHP
PHP swoole和redis异步任务实现方法分析
Aug 12 PHP
PHP sdk文档处理常用代码示例解析
Dec 09 PHP
php验证是否是md5编码的简单代码
Apr 01 #PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
Apr 01 #PHP
PHP把网页保存为word文件的三种方法
Apr 01 #PHP
php时间戳转换的示例
Mar 31 #PHP
php使用curl存储cookie的示例
Mar 31 #PHP
php过滤敏感词的示例
Mar 31 #PHP
php根据年月获取季度的方法
Mar 31 #PHP
You might like
php sprintf()函数让你的sql操作更安全
2008/07/23 PHP
PHP 采集程序 常用函数
2008/12/18 PHP
PHP面向对象详解(三)
2015/12/07 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
jquery动画1.加载指示器
2012/08/24 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
JS实现动画兼容性的transition和transform实例分析
2016/12/13 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
详解如何使用nvm管理Node.js多版本
2019/05/06 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
12步教你理解Python装饰器
2016/02/25 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
Python3 JSON编码解码方法详解
2019/09/06 Python
python中图像通道分离与合并实例
2020/01/17 Python
Python通过len函数返回对象长度
2020/10/22 Python
python中uuid模块实例浅析
2020/12/29 Python
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
俄罗斯便宜的在线服装商店:GroupPrice
2020/04/10 全球购物
物业管理员岗位职责范文
2013/11/25 职场文书
建筑工地门卫岗位职责
2014/04/30 职场文书
机房搬迁方案
2014/05/01 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
2016教师给学生的毕业寄语
2015/12/04 职场文书
2016年中学植树节活动总结
2016/03/16 职场文书
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS
js前端设计模式优化50%表单校验代码示例
2022/06/21 Javascript