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 相关文章推荐
数据库相关问题
Oct 09 PHP
?繁体转换的class
Oct 09 PHP
用PHP中的 == 运算符进行字符串比较
Nov 26 PHP
IStream与TStream之间的相互转换
Aug 01 PHP
PHP中文件上传的一个问题
Sep 04 PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
May 07 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
Sep 22 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
Aug 21 PHP
微信公众平台之快递查询功能用法实例
Apr 14 PHP
php使用curl详细解析及问题汇总
Aug 11 PHP
利用PHP生成CSV文件简单示例
Dec 21 PHP
Laravel框架控制器的middleware中间件用法分析
Sep 30 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 substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
2011/12/16 PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
2013/11/27 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
PHP时间函数使用详解
2019/03/21 PHP
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
jQuery源码分析之Event事件分析
2010/06/07 Javascript
jQuery学习笔记之DOM对象和jQuery对象
2010/12/22 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
js获取url中指定参数值的示例代码
2013/12/14 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
NodeJS制作爬虫全过程(续)
2014/12/22 NodeJs
jquery滚动特效集锦
2015/06/03 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
Vue项目中跨域问题解决方案
2018/06/05 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
2020/05/08 Javascript
vue相同路由跳转强制刷新该路由组件操作
2020/08/05 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
keras K.function获取某层的输出操作
2020/06/29 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
会计专业自我鉴定范文
2013/12/29 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
综合素质评价个性发展自我评价
2015/03/06 职场文书
Three.js实现雪糕地球的使用示例详解
2022/07/07 Javascript