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 相关文章推荐
新闻分类录入、显示系统
Oct 09 PHP
PHP 开发环境配置(测试开发环境)
Apr 28 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
Dec 05 PHP
解析php通过cookies获取远程网页的指定代码
Jun 25 PHP
WordPress中用于获取文章作者与分类信息的方法整理
Dec 17 PHP
深入浅析php json 格式控制
Dec 24 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
Nov 25 PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
PHP的mysqli_sqlstate()函数讲解
Jan 23 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 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与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
PHP屏蔽过滤指定关键字的方法
2014/11/03 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
php制作基于xml的RSS订阅源功能示例
2017/02/08 PHP
收集的10个免费的jQuery相册
2011/02/26 Javascript
js select option对象小结
2013/12/20 Javascript
JavaScript中获取高度和宽度函数总结
2014/10/08 Javascript
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
原生 JS Ajax,GET和POST 请求实例代码
2016/06/08 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
浅谈vue实现数据监听的函数 Object.defineProperty
2017/06/08 Javascript
解读ES6中class关键字
2017/11/20 Javascript
Angular 实现输入框中显示文章标签的实例代码
2018/11/07 Javascript
jQuery ajax仿Google自动提示SearchSuggess功能示例
2019/03/28 jQuery
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
浅谈python数据类型及类型转换
2017/12/18 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
500行python代码实现飞机大战
2020/04/24 Python
Java Unsafe类实现原理及测试代码
2020/09/15 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
Python如何实现Paramiko的二次封装
2021/01/30 Python
木工主管岗位职责
2013/12/08 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
2014年军人思想汇报范文
2014/10/12 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
导游词之天津盘山
2019/11/01 职场文书
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python
基于Android10渲染Surface的创建过程
2022/08/14 Java/Android