ip138離線庫結構解析【php】

分類: php 發布時間: 2019-01-28 17:00 瀏覽: 443 次

因公司業務需要,原本使用的純真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塊了,還不給一個最全的,太坑了?。?!

如果覺得我的文章對您有用,請隨意打賞。您的支持將鼓勵我繼續創作!

今日特肖