我很好奇的是哪些根據ip取得地理位置的工具都是什麼原理? ip中每位數字都代表了什麼?我可以在本地不使用第三方介面的情況下完成這項任務嗎?
我很好奇的是哪些根據ip取得地理位置的工具都是什麼原理? ip中每位數字都代表了什麼?我可以在本地不使用第三方介面的情況下完成這項任務嗎?
什麼是ISP呢?簡單點理解就像是類似中國電信、聯通、行動等網路供應商。
有了供應商了就可以上網了,上網你將能透過MODEM取得一個臨時IP(週期性變化)。
但是這個IP是真的就隨機給的嗎?怎麼隨機的呢?
APNIC(亞太互聯網絡資訊中心),就是這個組織了。是現在在世界中操作的五個地區的因特網登記處之一,分配B類IP位址的國際組織。它提供全球性的支援互聯網操作的分派和註冊服務。這些成員包括網路服務供應商、全國網路登記, 和相似的組織的一個非營利, 基於會員資格的組織。 APNIC 負責亞洲太平洋區域,包含 56 個經濟區。
假設,APNIC分配了100萬個IP位址給中國。然後到國內,經由國內的頂級管理組織(不知道是誰)再分配給電信、行動、聯通、行動等頂級ISP。然後這些ISP呢,再依照自己的規則給全國不同省份再分配,再到市、縣、鄉鎮等。
IP位址每個數字並不代表什麼,國內頂級ISP的IP分配是公開的,因此只有拿到這個庫,才能根據用戶的IP來知道用戶是什麼位置的由於這個庫的更新並不及時,所以不100%準確
國內比較流行的IP庫就是純真了。官網:http://www.cz88.net/ 右上角可下載。安裝後目錄下有個.dat
的檔案就是IP分配資料庫了。結合PHP的使用和其他語言的使用百度一搜就有。
PHP安裝GeoIP擴充與資料庫依IP取得訪客所在國家/城市/經緯度等資訊
http://php.net/manual/zh/ref....sudo apt-get install libgeoip-dev
pecl install geoip-1.1.0
注意:Beta版要指定版本號.如果是apt安裝的PHP,直接安裝php5-geoip這個包即可.
php.ini中加入:
<code>extension=geoip.so geoip.custom_directory="/usr/share/GeoIP" </code>
免費下載GeoLiteCity資料庫(解壓縮後18MB):
http://dev.maxmind.com/geoip/...
wget http://geolite.maxmind.com/do...
gunzip GeoLiteCity.dat.gz
sudo mkdir -v /usr/share/GeoIP
sudo mv -v GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat
測驗:
php -a
<code><?php print_r(geoip_record_by_name('106.37.165.80')); 回车后按Ctrl+D运行 Array ( [continent_code] => AS [country_code] => CN [country_code3] => CHN [country_name] => China //国家 [region] => 22 [city] => Beijing //城市 [postal_code] => [latitude] => 39.928901672363 //纬度 [longitude] => 116.38829803467 //经度 [dma_code] => 0 [area_code] => 0 ) </code>
PHP輕鬆實現"附近的人"功能,根據IP確定經緯度,根據經緯度計算距離
不使用第三方接口,也需要使用第三方提供的IP函式庫進行配對查詢。
但是都不嫩達到100%的準確。
推薦一個既提供介面也提供IP函式庫的服務商:http://www.ipip.net/
他們都有自己IP庫的。除非你本地也有IP庫
第三方介面能透過ip
獲取地理位置信息, 其實是其本地保存了ip => address -info
的資料庫映射, 因為他們的資料庫裡保存了大量的ip
和地理位置的關係,所以才能提供我們第三方服務
當然, 你完全可以自己去實現, 但是你可能沒有那麼龐大的資料庫支援
你若還是不想請求第三方接口, 可以下載一個
免費的GeoIP資料庫
這就是一個資料庫的問題,這裡有一個開源程式碼,自己去研究一下吧。 http://git.oschina.net/lionsoul/ip2region
nginx+geo+fastcgi_params
歡迎phper加入hnphper群 233415606
pecl install qqwry-beta
qqwry 你值得擁有。
IP其實並非是胡亂劃分的。有心的話,你會發現。 IP段和所在的地區是緊密結合的。你的隔壁城市和你的城市的IP可能為連續的。