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+MYSQL的文章管理系统(二)
Oct 09 PHP
PHP 网页过期时间的控制代码
Jun 29 PHP
Smarty Foreach 使用说明
Mar 23 PHP
php设计模式 Mediator (中介者模式)
Jun 26 PHP
基于PHP编程注意事项的小结
Apr 27 PHP
如何使用PHP实现javascript的escape和unescape函数
Jun 29 PHP
php打开文件fopen函数的使用说明
Jul 05 PHP
php预定义变量使用帮助(带实例)
Oct 30 PHP
编写PHP脚本来实现WordPress中评论分页的功能
Dec 10 PHP
php短信接口代码
May 13 PHP
PHP实现多级分类生成树的方法示例
Feb 07 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
Apr 24 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 时间转换Unix时间戳代码
2010/01/22 PHP
使用PHP 5.0创建图形的巧妙方法
2010/10/12 PHP
php相对当前文件include其它文件的方法
2015/03/13 PHP
javascript 选择文件夹对话框(web)
2009/07/07 Javascript
深入理解JavaScript系列(15) 函数(Functions)
2012/04/12 Javascript
jQuery隔行变色与普通JS写法的对比
2013/04/21 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
jQuery - css() 方法示例详解
2014/01/16 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
细说Vue组件的服务器端渲染的过程
2019/05/30 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
python定时器使用示例分享
2014/02/16 Python
Python内置函数的用法实例教程
2014/09/08 Python
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
python实现简单爬虫功能的示例
2016/10/24 Python
python实现自动发送邮件
2018/06/20 Python
python对视频画框标记后保存的方法
2018/12/07 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
python 模拟登陆163邮箱
2020/12/15 Python
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
英国领先的游戏零售商:GAME
2019/09/24 全球购物
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
中国梦口号
2014/06/13 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
2015年工商所工作总结
2015/05/21 职场文书
六一晚会主持词开场白
2015/05/28 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis