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下网站防IP攻击代码,超级实用
Oct 24 PHP
smarty模板嵌套之include与fetch性能测试
Dec 05 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
Jul 02 PHP
PHP英文字母大小写转换函数小结
May 03 PHP
基于PHP实现数据分页显示功能
May 26 PHP
PHP简单读取PDF页数的实现方法
Jul 21 PHP
golang与php实现计算两个经纬度之间距离的方法
Jul 22 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
php用xpath解析html的代码实例讲解
Feb 14 PHP
laravel5.1 ajax post 传值_token示例
Oct 24 PHP
PHP实现创建以太坊钱包转账等功能
Apr 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实现小型站点广告管理(修正版)
2006/10/09 PHP
PHP中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
mac下多个php版本快速切换的方法
2016/10/09 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
js传值 判断
2006/10/26 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python中随机函数random用法实例
2015/04/30 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
python自动发邮件库yagmail的示例代码
2018/02/23 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
python pymysql库的常用操作
2020/10/16 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
大学校运会广播稿
2014/02/03 职场文书
科技节口号
2014/06/19 职场文书
垂直极限观后感
2015/06/08 职场文书
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python