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 相关文章推荐
eWebEditor v3.8 商业完整版 (PHP)
Dec 06 PHP
介绍一些PHP判断变量的函数
Apr 24 PHP
php自动给文章加关键词链接的函数代码
Nov 29 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
Jun 19 PHP
一个经典实用的PHP图像处理类分享
Nov 18 PHP
PHP定时执行任务的3种方法详解
Dec 21 PHP
PHP+MySQL实现的简单投票系统实例
Feb 24 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
Nov 14 PHP
Yii2框架实现数据库常用操作总结
Feb 08 PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 PHP
centos7上编译安装php7以php-fpm方式连接apache
Nov 08 PHP
thinkphp5实现微信扫码支付
Dec 23 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写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
2014/06/12 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
PHP简单字符串过滤方法示例
2016/09/04 PHP
关于php unset对json_encode的影响详解
2018/11/14 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
javascript面向对象编程代码
2011/12/19 Javascript
jquery如何判断表格同一列不同行input数据是否重复
2014/05/14 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
2014/10/17 Javascript
基于Node.js实现压缩和解压缩的方法
2018/02/13 Javascript
AngularJS中的作用域实例分析
2018/05/16 Javascript
layui实现点击按钮给table添加一行
2018/08/10 Javascript
vue 动态绑定背景图片的方法
2018/08/10 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
Python正规则表达式学习指南
2016/08/02 Python
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
2017/09/26 Python
pandas.DataFrame.to_json按行转json的方法
2018/06/05 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
python实现斗地主分牌洗牌
2020/06/22 Python
外语系毕业生自荐信范文
2013/12/16 职场文书
经典禁毒标语
2014/06/16 职场文书
淘宝活动总结范文
2014/06/26 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
项目申请汇报材料
2014/08/16 职场文书
用电申请报告范文
2015/05/18 职场文书
公司回复函格式
2015/07/14 职场文书
教师岗位说明书
2015/09/30 职场文书
考研经验交流会策划书
2015/11/02 职场文书
教师教育心得体会
2016/01/19 职场文书
详解Django的MVT设计模式
2021/04/29 Python