ip138离线库结构解析【php】

分类: php 发布时间: 2019-01-28 17:00 浏览: 5,515 次

因公司业务需要,原本使用的纯真ip库定位数据不全,需寻找一个全一点的ip库。日常用百度查ip位置,出现的都是ip138的,所有就买了他们家的收费库。

ip138收费ip定位分两种:在线api、离线库。

考虑到第三方api的不可控性,我们选择了离线库。5000元一年,每月5次的下载。

买完后才发现,他们的服务基本上可以说是没有,问客服基本没人回复。

我们系统使用的语言是php,下载了他们提供的php库。一运行,200MS,这真是坑,原生使用的纯真ip解析类,才0.14MS,差了几千倍,这是接受不了的。感觉一下子不知如何解决,百度也找不到优化代码。只能自己解决了。程序员依赖百度还是不好的。

对比下原生用的跟ip138提供的,一个是用文件索引fseek,一个是全部读书到php数组中。这就很清楚为什么性能差这么远了。

按照ip138给代码,看出库的结构如下:

D4`9~`NH34Z[XIUZF9J4W80

1、文件头:4个字节,保存了文本数据的便宜量,也就是前三段的字节总数

2、A段索引:ip的四个数字和第一个叫a段,这个索引从0开头到255,总共256个数据,每个数据占用4个字节,这个数据标记了这个ip段的记录索引号,从0开始。

3、记录:ip段记录,每条记录保存三个数据,总9个字节,如下:

ip段结束ip的long值[4个字节]+文本的偏移量[4个字节]+文本长度[1个字节])

4、文本数据:对应上面记录,每条一个文本说明,结构:中国\t上海\t上海 \t\t移动 \t\t    ,也就是国家+省份+市区+运营商,中间用\t分开。

知道结构就好优化了,不要全部取到php数据,而是根据实际使用情况fseek到对应数据。经过完善后的速度比原生使用的纯真ip库类还快,主要原因是ip138的整个dat数据小很多。

ip138:dat文件2m,32万条记录

ip纯真库:9m,47万条记录

ip纯真库民间收集,比较零散。

解析出来的内容比纯真库全很多,不过还是有个别数据对不上,与他们主站查出来的结果也不一样,都交了5000块了,还不给一个最全的,太坑了!!!

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!