热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP解析ip2region库,ip2region–开源IP地址查询库,聚合IP地址库API

ip2region开源IP地址查询库ip2region是一个准确率99.9%的ip地址库。0.0x毫秒级查询,数据库文件大小只有1.5M,提供了java,php,c,python查

ip2region 开源IP地址查询库

ip2region 是一个准确率99.9%的ip地址库。 0.0x毫秒级查询,数据库文件大小只有1.5M,提供了java, php, c, python查询客户端和Binary,B树,内存三种查询算法。

1. 99.9%准确率,定时更新:

数据聚合了一些知名ip到地名查询提供商的数据,这些是他们官方的的准确率,经测试着实比纯真啥的准确多了。

每次聚合一下数据需要1-2天,会不定时更新。

ip2region的数据聚合自以下服务商的开放API或者数据(升级程序每秒请求次数2到4次):

备注:如果上述开放API或者数据都不给开发时ip2region将停止数据的更新服务,目前是2~3个月更新一次。

2. 标准化的数据格式:

每条ip数据段都固定了格式:城市Id|国家|区域|省份|城市|ISP

只有中国的数据精确到了城市,其他国家只能定位到国家,后前的选项全部是0,已经包含了全部你能查到的大大小小的国家。 (请忽略前面的城市Id,个人项目需求)

3. 体积小:

生成的数据库文件ip2region.db只有1.5M(1.2版本前是3.5M)

4. 多查询客户端的支持,0.0x毫秒级别的查询

已经集成的客户端有:java、C#、php、c、python、nodejs、php扩展(php5和php7)、golang、rust、lua、lua_c。

提供了两种查询算法,响应时间如下:

客户端/binary算法/b-tree算法/Memory算法:

c#/0.x毫秒/0.x毫秒/0.x毫秒

java/0.x毫秒/0.x毫秒/0.1x毫秒 (使用RandomAccessFile)

php/0.x毫秒/0.1x毫秒/0.1x毫秒

c/0.0x毫秒/0.0x毫秒/0.00x毫秒(b-tree算法基本稳定在0.02x毫秒级别)

python/0.x毫秒/0.1x毫秒/未知

lua/0.x毫秒/0.x毫秒/0.x毫秒

lua_c/0.0x毫秒/0.0x毫秒/0.00x毫秒

1

2

3

4

5

6

7

8

9

提供了两种查询算法,响应时间如下:

客户端/binary算法/b-tree算法/Memory算法:

c#/0.x毫秒/0.x毫秒/0.x毫秒

java/0.x毫秒/0.x毫秒/0.1x毫秒(使用RandomAccessFile)

php/0.x毫秒/0.1x毫秒/0.1x毫秒

c/0.0x毫秒/0.0x毫秒/0.00x毫秒(b-tree算法基本稳定在0.02x毫秒级别)

python/0.x毫秒/0.1x毫秒/未知

lua/0.x毫秒/0.x毫秒/0.x毫秒

lua_c/0.0x毫秒/0.0x毫秒/0.00x毫秒

任何客户端b-tree都比binary算法快,当然Memory算法固然是最快的!

maven仓库地址:

org.lionsoulip2region1.7.2

1

org.lionsoulip2region1.7.2

nuget安装命令

Install-Package IP2Region

1

Install-PackageIP2Region

5. 测试程序:

C#、Node.js、lua_c的测试请具体参考文件夹中README.md 说明。

java:

cd binding/java ant all java -jar ip2region-{version}.jar ./data/ip2region.db

1

cdbinding/javaantalljava-jarip2region-{version}.jar./data/ip2region.db

php:

php binding/php/testSearcher.php ./data/ip2region.db

1

phpbinding/php/testSearcher.php./data/ip2region.db

c:

cd binding/c/ gcc -g -O2 testSearcher.c ip2region.c ./a.out ../../data/ip2region.db

1

cdbinding/c/gcc-g-O2testSearcher.cip2region.c./a.out../../data/ip2region.db

python:

python binding/python/testSearcher.py ./data/ip2region.db

1

pythonbinding/python/testSearcher.py./data/ip2region.db

lua:

cd binding/lua/ lua testSearcher.lua ../../data/ip2region.db

1

cdbinding/lua/luatestSearcher.lua../../data/ip2region.db

均会看到如下界面:

initializing B-tree …

+———————————-+

| ip2region test script |

| Author: chenxin619315@gmail.com |

| Type ‘quit’ to exit program |

+———————————-+

p2region>> 101.105.35.57

2163|中国|华南|广东省|深圳市|鹏博士 in 0.02295 millseconds

1

2

3

4

5

6

7

8

initializingB-tree…

+———————————-+

|ip2regiontestscript|

|Author:chenxin619315@gmail.com|

|Type’quit’toexitprogram|

+———————————-+

p2region>>101.105.35.57

2163|中国|华南|广东省|深圳市|鹏博士in0.02295millseconds

输入ip地址开始测试,第一次会稍微有点慢,在运行命令后面接入binary,memory来尝试其他算法,建议使用b-tree算法,速度和并发需求的可以使用memory算法。

具体集成请参考不同客户端的测试源码。

6. 如何生成ip2region.db文件

从1.8版本开始,ip2region开源了ip2region.db生成程序的java实现,提供了ant编译支持,编译后会得到以下提到的dbMaker-{version}.jar,对于需要研究生成程序的或者更改自定义生成配置的请参考${ip2region_root}/maker/java内的java源码。

从ip2region 1.2.2版本开始里面提交了一个dbMaker-{version}.jar的可以执行jar文件,用它来完成这个工作:

1, 确保你安装好了java环境(不玩Java的童鞋就自己谷歌找找拉,临时用一用,几分钟的事情)

2, cd到${ip2region_root}/maker/java,然后运行如下命令:

java -jar dbMaker-{version}.jar -src 文本数据文件 -region 地域csv文件 [-dst 生成的ip2region.db文件的目录]

# 文本数据文件:db文件的原始文本数据文件路径,自带的ip2region.db文件就是/data/ip.merge.txt生成而来的,你可以换成自己的或者更改/data/ip.merge.txt重新生成

# 地域csv文件:该文件目的是方便配置ip2region进行数据关系的存储,得到的数据包含一个city_id,这个直接使用/data/origin/global_region.csv文件即可

# ip2region.db文件的目录:是可选参数,没有指定的话会在当前目录生成一份./data/ip2region.db文件

1

2

3

4

5

java-jardbMaker-{version}.jar-src文本数据文件-region地域csv文件[-dst生成的ip2region.db文件的目录]

# 文本数据文件:db文件的原始文本数据文件路径,自带的ip2region.db文件就是/data/ip.merge.txt生成而来的,你可以换成自己的或者更改/data/ip.merge.txt重新生成

# 地域csv文件:该文件目的是方便配置ip2region进行数据关系的存储,得到的数据包含一个city_id,这个直接使用/data/origin/global_region.csv文件即可

# ip2region.db文件的目录:是可选参数,没有指定的话会在当前目录生成一份./data/ip2region.db文件

3, 获取生成的ip2region.db文件覆盖原来的ip2region.db文件即可

4, 默认的ip2region.db文件生成命令:

cd ${ip2region_root}/java/

java -jar dbMaker-1.2.2.jar -src ./data/ip.merge.txt -region ./data/global_region.csv

# 会看到一大片的输出

1

2

3

4

cd${ip2region_root}/java/

java-jardbMaker-1.2.2.jar-src./data/ip.merge.txt-region./data/global_region.csv

# 会看到一大片的输出

5, 数据库文件的结构和原理请阅读 @冬芽 的blog:“ip2region数据库文件的结构和原理”

《PHP解析ip2region库,ip2region – 开源IP地址查询库,聚合IP地址库API》

7. 其他备注

1, 全部binding的各个search接口都不是线程安全的实现,不同线程可以通过创建不同的查询对象来使用。

2, memorySearch接口,在发布对象前进行一次预查询,可以安全用于多线程环境。


推荐阅读
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文详细介绍了如何创建和使用VUE uni-app开发环境,包括通过HBuilderX可视化界面和通过vue-cli命令执行的方法。文章内容简单清晰,易于学习与理解。通过学习本文,读者可以深入了解VUE uni-app开发环境,并通过实践验证掌握具体的使用情况。编程笔记将为读者推送更多相关知识点的文章,欢迎关注! ... [详细]
  • JavaScript简介及语言特点
    本文介绍了JavaScript的起源和发展历程,以及其在前端验证和服务器端开发中的应用。同时,还介绍了ECMAScript标准、DOM对象和BOM对象的作用及特点。最后,对JavaScript作为解释型语言和编译型语言的区别进行了说明。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 如何使用Python从工程图图像中提取底部的方法?
    本文介绍了使用Python从工程图图像中提取底部的方法。首先将输入图片转换为灰度图像,并进行高斯模糊和阈值处理。然后通过填充潜在的轮廓以及使用轮廓逼近和矩形核进行过滤,去除非矩形轮廓。最后通过查找轮廓并使用轮廓近似、宽高比和轮廓区域进行过滤,隔离所需的底部轮廓,并使用Numpy切片提取底部模板部分。 ... [详细]
  • Python15行代码实现免费发送手机短信,推送消息「建议收藏」
    Python15行代码实现免费发 ... [详细]
author-avatar
315空白_580
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有