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中date()日期函数有关参数整理
Jul 19 PHP
php生成局部唯一识别码LUID的代码
Oct 06 PHP
Linux环境下搭建php开发环境的操作步骤
Jun 17 PHP
解析PHP中常见的mongodb查询操作
Jun 20 PHP
使用swoole扩展php websocket示例
Feb 13 PHP
PHP编程中的常见漏洞和代码实例
Aug 06 PHP
分享PHP计算两个日期相差天数的代码
Dec 23 PHP
示例详解Laravel的注册重构
Aug 14 PHP
PHP如何实现订单的延时处理详解
Dec 30 PHP
php对象工厂类完整示例
Aug 09 PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 PHP
phpstudy隐藏index.php的方法
Sep 21 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
PHP5 面向对象程序设计
2008/02/13 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
表单内同名元素的控制
2006/11/22 Javascript
Javascript 日期处理之时区问题
2009/10/08 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
异步安全加载javascript文件的方法
2015/07/21 Javascript
JavaScript File分段上传
2016/03/10 Javascript
Node.js中路径处理模块path详解
2016/11/14 Javascript
详解Jquery 遍历数组之$().each方法与$.each()方法介绍
2017/01/09 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
python定时检查启动某个exe程序适合检测exe是否挂了
2013/01/21 Python
跟老齐学Python之画圈还不简单吗?
2014/09/20 Python
简单的Python2.7编程初学经验总结
2015/04/01 Python
Python编程之微信推送模板消息功能示例
2017/08/21 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
django 消息框架 message使用详解
2019/07/22 Python
在Tensorflow中查看权重的实现
2020/01/24 Python
如何安装并在pycharm使用selenium的方法
2020/04/30 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
物流仓管员岗位职责
2015/04/01 职场文书
无罪辩护词范文
2015/05/21 职场文书
2015年园林绿化工作总结
2015/05/23 职场文书
物业保洁员管理制度
2015/08/05 职场文书
优秀教师主要事迹材料
2015/11/04 职场文书
科级干部培训心得体会
2016/01/06 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
redis实现的四种常见限流策略
2021/06/18 Redis
MySQL空间数据存储及函数
2021/09/25 MySQL