纯真IP地址数据库应该是国内最流行的IP地址数据库
纯真IP地址数据库(官方下载)
http://www.cz88.net/fox/ipdat.shtml<?php
/*--------------------------------------------------ip2address [qqwry.dat]
--------------------------------------------------*/class ip {var $fh; //IP数据库文件句柄var $first; //第一条索引var $last; //最后一条索引var $total; //索引总数//构造函数function __construct() {$this->fh = fopen('qqwry.dat', 'rb'); //qqwry.dat文件$this->first = $this->getLong4();$this->last = $this->getLong4();$this->total = ($this->last - $this->first) / 7; //每条索引7字节}//检查IP合法性function checkIp($ip) {$arr = explode('.',$ip);if(count($arr) !=4 ) {return false;} else {for ($i=0; $i < 4; $i++) {if ($arr[$i] <'0' || $arr[$i] > '255') {return false;}}}return true;}function getLong4() {//读取little-endian编码的4个字节转化为长整型数$result = unpack('Vlong', fread($this->fh, 4));return $result['long'];}function getLong3() {//读取little-endian编码的3个字节转化为长整型数$result = unpack('Vlong', fread($this->fh, 3).chr(0));return $result['long'];}//查询信息function getInfo($data = "") {$char = fread($this->fh, 1);while (ord($char) != 0) { //国家地区信息以0结束$data .= $char;$char = fread($this->fh, 1);}return $data;}//查询地区信息function getArea() {$byte = fread($this->fh, 1); //标志字节switch (ord($byte)) {case 0: $area = ''; break; //没有地区信息case 1: //地区被重定向fseek($this->fh, $this->getLong3());$area = $this->getInfo(); break;case 2: //地区被重定向fseek($this->fh, $this->getLong3());$area = $this->getInfo(); break;default: $area = $this->getInfo($byte);  break; //地区没有被重定向}return $area;}function ip2addr($ip) {if(!$this -> checkIp($ip)){return false;}$ip = pack('N', intval(ip2long($ip)));//二分查找$l = 0;$r = $this->total;while($l <= $r) {$m = floor(($l + $r) / 2); //计算中间索引fseek($this->fh, $this->first + $m * 7);$beginip = strrev(fread($this->fh, 4)); //中间索引的开始IP地址fseek($this->fh, $this->getLong3());$endip = strrev(fread($this->fh, 4)); //中间索引的结束IP地址if ($ip < $beginip) { //用户的IP小于中间索引的开始IP地址时$r = $m - 1;} else {if ($ip > $endip) { //用户的IP大于中间索引的结束IP地址时$l = $m + 1;} else { //用户IP在中间索引的IP范围内时$findip = $this->first + $m * 7;break;}}}//查询国家地区信息fseek($this->fh, $findip);$location['beginip'] = long2ip($this->getLong4()); //用户IP所在范围的开始地址$offset = $this->getlong3();fseek($this->fh, $offset);$location['endip'] = long2ip($this->getLong4()); //用户IP所在范围的结束地址$byte = fread($this->fh, 1); //标志字节switch (ord($byte)) {case 1:  //国家和区域信息都被重定向$countryOffset = $this->getLong3(); //重定向地址fseek($this->fh, $countryOffset);$byte = fread($this->fh, 1); //标志字节switch (ord($byte)) {case 2: //国家信息被二次重定向fseek($this->fh, $this->getLong3());$location['country'] = $this->getInfo();fseek($this->fh, $countryOffset + 4);$location['area'] = $this->getArea();break;default: //国家信息没有被二次重定向$location['country'] = $this->getInfo($byte);$location['area'] = $this->getArea();break;}break;case 2: //国家信息被重定向fseek($this->fh, $this->getLong3());$location['country'] = $this->getInfo();fseek($this->fh, $offset + 8);$location['area'] = $this->getArea();break;default: //国家信息没有被重定向$location['country'] = $this->getInfo($byte);$location['area'] = $this->getArea();break;}//gb2312 to utf-8(去除无信息时显示的CZ88.NET)foreach ($location as $k => $v) {$location[$k] = str_replace('CZ88.NET','',iconv('gb2312', 'utf-8', $v));}return $location;}//析构函数function __destruct() {fclose($this->fh);}
}$ip = new ip();
$addr = $ip -> ip2addr('IP地址');
print_r($addr);
?>

PHP读取纯真IP地址数据库相关推荐

  1. 纯真IP地址数据库qqwry.dat解析

    ip地址数据库,在现在互联网时代非常有用,比如大型网站的用户安全保护系统,就常常会根据ip反查的信息,甄别账号的一些不安全登录行为,比如跨区域登录问题等.ip其实关联了一些有信息,比如区域,所在运营商 ...

  2. java 纯真ip 乱码_纯真ip地址数据库乱码解决方案、utf8和gbk相互转换及下载

    在使用discuz3.4论坛时,官方只提供了utf-8版本,不再提供gbk版本,因此为顺应趋势,安装使用了discuz3.4 utf-8的版本.然而,在用纯真IP库替换Discuz的默认库时却出现ip ...

  3. php qqwry.dat_php读取操作IP地址数据库文件QQWry.dat

    我们统计流量的时候需要可以获取用户ip,根据用户ip之后可以通过纯ip真数据库QQWry.dat,获取出用户IP 所在的地理位置,这样可以做出更有意义的统计信息. QQWry.dat请自行搜索下载. ...

  4. 读取纯真IP数据库的公用组件QQWry.NET

    这是一个读取纯真IP数据库的公用组件接口,我是通过luma的<纯真IP数据库格式详解>了解了纯真IP数据库数据格式,并且基于网络上的一个IPLocation.dll源码的基础改编而来.我为 ...

  5. php 读取纯真书库,PHP读取纯真IP数据库的函数

    PHP读取纯真IP数据库的函数,以下代码提取自Discuz! X2 $tinyipfile Discuz! 独有高压缩比算法和快速检索的IP数据库路径 下载地址:http://www.discuz.n ...

  6. java读取纯真IP数据库qqwry.dat的源代码

    java读取纯真IP数据库QQwry.dat的源代码,要运行此程序必须有 到网上下载QQwry.dat,下载地址 http://www.cz88.net/down/   由于太大,我这里就不提供了. ...

  7. ip解析 java_JAVA解析纯真IP地址库

    http://lumaqq.linuxsir.org/article/qqwry_format_detail.html,这里就不多叙述了. 看下JAVA代码中怎么解析IP的吧.(代码参考至lumaQQ ...

  8. 纯真IP地址库转UTFWry格式的方法

    纯真IP地址库的默认的文件是QQwry.dat,一些网站需要UTF格式的,直接用自带的是不行的,读取是乱码,虽然可以从程序上进行设置解析,如果程序后期使用的话还是较为麻烦一些,不如直接转换来的合适. ...

  9. 在 PostgreSQL 中使用码农很忙 IP 地址数据库

    在下载到码农很忙 IP 地址数据库后,我们可以将其存储在 PostgreSQL 数据库中,并在需要查询某个 IP 对应的位置数据时,通过 SQL 语句获取正确的结果.这是一种很便捷的使用方式,并且在增 ...

最新文章

  1. 熬夜变傻有科学依据,人类睡觉时会被“洗脑”,科学家首次拍下全程
  2. acm第二节2020.4.2-4.4补
  3. .NET 程序员的 Playground :LINQPad
  4. 最长回文串之中心扩散法
  5. Java零基础学习(三)封装继承多态
  6. php env 函数不存在,php-Laravel 5.2无法读取env fi
  7. 网络便签与网络通讯录
  8. Xcode调试技巧总结
  9. 区块链技术入门学习指引
  10. 联想Y7000安装ubuntu1604 双系统
  11. 天空的颜色 363
  12. 2018服务商口碑榜Top50(3月)重磅出炉
  13. 实现百度语音识别功能
  14. WebSocket 双端实践(iOS/ Golang)
  15. “书法字”“一”的理解
  16. 可解释机器学习(Explainable/ Interpretable Machine Learning)的原理和应用(李宏毅视频课笔记)
  17. 服务器最多带多少硬盘,一般服务器的硬盘空间有多大?怎么能给那么多 – 手机爱问...
  18. Tyrion中文文档(含示例源码)
  19. 安迪·鲁宾支持的猫头鹰实验室刚推出了一款机器人视频会议摄像机
  20. MySQL基本数据类型与Java基本数据类型

热门文章

  1. css设置流光文字样式
  2. USB转网口转485转232转TTL等多接口互转调试工具,无需拨动开关自动切换连接
  3. 计算机单招模拟试题,高职单招计算机模拟试卷模拟试题
  4. 转载-TCPDF(目前没有实际操作;先存一份记录)
  5. vue八角云台控制组件萤石云less
  6. Navicat fro oracle 简体中文破解版(亲测可用)
  7. 初二计算机知识,初二信息技术考试试题及答案
  8. 区块链目前实际的应用场景汇总
  9. Android开发中横竖屏切换的问题以及系统提供的常用Activity
  10. 【交换篇】06. 升级固件 ❀ C3750-E ❀ CISCO 交换机