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 相关文章推荐
提取HTML标签
Oct 09 PHP
IStream与TStream之间的相互转换
Aug 01 PHP
PHP 数组入门教程小结
May 20 PHP
JS中encodeURIComponent函数用php解码的代码
Mar 01 PHP
PHP人民币金额数字转中文大写的函数代码
Feb 27 PHP
编写php应用程序实现摘要式身份验证的方法详解
Jun 08 PHP
php中current、next与reset函数用法实例
Nov 17 PHP
php使用CURL伪造IP和来源实例详解
Jan 15 PHP
PHP之正则表达式捕获组与非捕获组(详解)
Jul 29 PHP
PHP的关于变量和日期处理的一些面试题目整理
Aug 10 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
Laravel ORM 数据model操作教程
Oct 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
PHP的FTP学习(四)
2006/10/09 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
apache集成php7.3.5的详细步骤
2019/06/20 PHP
laravel框架中间件 except 和 only 的用法示例
2019/07/12 PHP
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
原生js实现滑块区间组件
2021/01/20 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
2021/02/26 Vue.js
[02:28]DOTA2英雄基础教程 狼人
2013/12/23 DOTA
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
python实现超简单的视频对象提取功能
2018/06/04 Python
Python基于百度云文字识别API
2018/12/13 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
2020/11/28 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
英国现代家具和照明购物网站:Heal’s
2019/10/30 全球购物
用Java语言将一个键盘输入的数字转化成中文输出
2013/01/25 面试题
小班开学寄语
2014/04/04 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
上班迟到检讨书范文
2015/05/06 职场文书
2015年幼儿教师个人工作总结
2015/05/20 职场文书
奠基仪式致辞
2015/07/30 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书
python实现监听键盘
2021/04/26 Python