ThinkPHP使用UTFWry地址库进行IP定位实例

2015-01-24信息快讯网

在WEB应用中,根据IP地址定位和记录相关访问日志也是非常常见的需求,在ThinkPHP中你可以轻松的实现IP地址获取和定位

可以在官网的 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输入流php://input使用浅析
php获取URL中带#号等特殊符号参数的解决方法
PHP中提问频率最高的11个面试题和答案
PHP处理Json字符串解码返回NULL的解决方法
PHP中echo和print的区别
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
ThinkPHP查询返回简单字段数组的方法
php防止伪造数据从地址栏URL提交的方法
一个图片地址分解程序(用于PHP小偷程序)
ThinkPHP的MVC开发机制实例解析
php中限制ip段访问、禁止ip提交表单的代码分享
destoon实现VIP排名一直在前面排序的方法
PHP中IP地址与整型数字互相转换详解
PHP获取短链接跳转后的真实地址和响应头信息的方法
async和DOM Script文件加载比较
Eclipse的PHP插件PHPEclipse安装和使用
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
yii上传文件或图片实例
php验证是否是md5编码的简单代码
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
PHP把网页保存为word文件的三种方法
php时间戳转换的示例
php使用curl存储cookie的示例
thinkphp验证码显示不出来的解决方法
php页码形式分页函数支持静态化地址及ajax分页
小谈php正则提取图片地址
php获取表单中多个同名input元素的值
php的zip解压缩类pclzip使用示例
zf框架的db类select查询器join链表使用示例(zend框架)
zf框架的校验器InArray使用示例
PHP加Nginx实现动态裁剪图片方案
解决Codeigniter不能上传rar和zip压缩包问题
根据ip调用新浪api获取城市名并转成拼音
PHP根据IP判断地区名信息的示例代码
php判断ip黑名单程序代码实例
php获得用户ip地址的比较不错的方法
采用header定义为文件然后readfile下载(隐藏下载地址)
php实现图形显示Ip地址的代码及注释
©2014-2024 dbsqp.com