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数据库连接
Oct 09 PHP
用缓存实现静态页面的测试
Dec 06 PHP
谷歌音乐搜索栏的提示功能php修正代码
May 09 PHP
php include和require的区别深入解析
Jun 17 PHP
php判断正常访问和外部访问的示例
Feb 10 PHP
PHP判断网络文件是否存在的方法
Mar 12 PHP
基于laravel制作APP接口(API)
Mar 15 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
Mar 12 PHP
php创建图像具体步骤
Mar 13 PHP
Laravel框架中自定义模板指令总结
Dec 17 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
php微信公众号开发之关键词回复
Oct 20 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
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
php中的比较运算符详解
2013/10/28 PHP
PHP实现数组array转换成xml的方法
2016/07/19 PHP
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
2009/04/01 Javascript
用cssText批量修改样式
2009/08/29 Javascript
写得不错的jquery table鼠标经过变色代码
2013/09/27 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
js或jquery实现页面打印可局部打印
2014/03/27 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
JavaScript几种数组去掉重复值的方法推荐
2016/04/12 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
让IDE识别webpack的别名alias的实现方法
2020/05/06 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
python3编写C/S网络程序实例教程
2014/08/25 Python
使用python读取txt文件的内容,并删除重复的行数方法
2018/04/18 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
python使用ctypes库调用DLL动态链接库
2020/10/22 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
科长竞争上岗演讲稿
2014/05/12 职场文书
化工专业自荐书
2014/06/16 职场文书
雷锋式好少年事迹材料
2014/08/17 职场文书
2014机关干部学习“焦裕禄精神”思想汇报
2014/09/19 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
简易离婚协议书范本
2014/10/24 职场文书
党员转正大会主持词
2015/07/02 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
python读取mnist数据集方法案例详解
2021/09/04 Python