PHP 使用 GeoLiteCity 庫解析 IP 為地理位置


關於把 IP 地址轉換為地理位置可以使用網絡上很多的 API,好處就是不用在本地存儲一個 IP 數據庫,而且一般網絡上的 IP 庫會自動更新,不利的地方就是太依賴於網絡,性能表現也可能會弱些。比如像下面的 API:

http://api.hostip.info/get_html.php?ip=58.63.236.31
http://api.hostip.info/flag.php?ip=58.63.236.31

這里介紹 PHP 如何使用 GeoLiteCity.dat 庫把 IP 轉換為地理位置,GeoLiteCity.dat 可以在http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz 下,解壓出 GeoLiteCity.dat,即可,我們可以手動去更新新的 IP 庫。

下面 PHP 解析 IP 的過程參考自 WordPress 插件 Visitor Maps and Who's Online 的實現。可以找到該插件的兩個文件 include-whos-online-geoip.php 和 visitor-maps.php 告訴了我們怎么做。你可以點擊這里的鏈接下載到這兩個文件,我這里把 include-whos-online-geoip.php 改名為 geoipcity.inc.php,然后參考 visitor-maps.php 中的 get_location_info($user_ip) 函數,那么我們可以寫出自己的解析 IP 地址的程序 resolve_ip.php:

執行后輸出如下(可以作為系統腳本直接用 php resolve_ip.php 來執行):

只要取你想要的數據就是了,里面還有諸如區號,郵編等數所,GeoLiteCity.dat 是個二進制文件,比普通文本要緊湊省空間。

不知道您有沒有多留一份心,有無瀏覽鏈接:http://geolite.maxmind.com/download/geoip/api/php/,是這樣的:

Geoip

看到 GeoIp 給我們提供了不少的例子,那么多 sample.php,而實際上前面用到的 geoipcity.inc.php,就是 geopip.inc、geoipcity.inc 和 geoipregionvars.php 三個程序的內容合體。

再往上看:

 

GeoIp

官方提供的 API 何止 PHP 啊,幾乎能全線滿足您的實際需求了,c、java、perl、python、vb、ruby、tcl 等......,放其他程序里以后也不用愁了。

再進到 http://geolite.maxmind.com/download/geoip/database/ 瞧瞧:

GeoIP

正考慮着呢,不是說 IPv4 快用凈了嗎?IPv6 的數據也正為我們准備着呢?當然,天朝的 IPv9 恐怕永遠不會有的。

本只是把 Visitor Maps and Who's Online 里的解析 IP 的做法抽出來用用,可總能不斷 深入再深入,不知道可喜還是可怕了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM