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 相关文章推荐
PHP4 与 MySQL 数据库操作函数详解
Oct 09 PHP
MVC模式的PHP实现
Oct 09 PHP
php数组函数序列之array_flip() 将数组键名与值对调
Nov 07 PHP
PHP setTime 设置当前时间的代码
Aug 27 PHP
PHP Error与Logging函数的深入理解
Jun 03 PHP
PHP框架Swoole定时器Timer特性分析
Aug 19 PHP
php实现的IMEI限制的短信验证码发送类
May 05 PHP
php技巧小结【推荐】
Jan 19 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
May 04 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
PHP的mysqli_set_charset()函数讲解
Jan 23 PHP
thinkphp5使html5实现动态跳转的例子
Oct 16 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的控制语句
2006/10/09 PHP
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
PHP连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
php快速排序原理与实现方法分析
2016/05/26 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
javascript开发技术大全-第3章 js数据类型
2011/07/03 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
如何实现一个webpack模块解析器
2018/10/24 Javascript
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
利用Python演示数型数据结构的教程
2015/04/03 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
matplotlib.pyplot绘图显示控制方法
2019/01/15 Python
详解Python字典的操作
2019/03/04 Python
pandas计算最大连续间隔的方法
2019/07/04 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
Python基于Tkinter编写crc校验工具
2020/05/06 Python
thinkphp5 路由分发原理
2021/03/18 PHP
MATCHESFASHION.COM美国官网:英国奢侈品零售商
2018/10/29 全球购物
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
体育专业学生自我评价范文
2014/01/17 职场文书
工程招投标邀请书
2014/01/30 职场文书
廉洁教育学习材料
2014/05/19 职场文书
防灾减灾日活动总结
2014/08/26 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
逃课检讨书范文
2015/05/06 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
联欢会开场白
2015/06/01 职场文书
教务处干事工作总结
2015/08/14 职场文书
Zabbix对Kafka topic积压数据监控的解决方案
2022/07/07 Servers