首頁  >  文章  >  後端開發  >  http - php有沒有不使用第三方介面的情況下根據ip位址取得地理位置的方法? (第三方接口他們是透過什麼原理實現這項功能的?)

http - php有沒有不使用第三方介面的情況下根據ip位址取得地理位置的方法? (第三方接口他們是透過什麼原理實現這項功能的?)

WBOY
WBOY原創
2016-08-18 09:16:001271瀏覽

我很好奇的是哪些根據ip取得地理位置的工具都是什麼原理? ip中每位數字都代表了什麼?我可以在本地不使用第三方介面的情況下完成這項任務嗎?

回覆內容:

我很好奇的是哪些根據ip取得地理位置的工具都是什麼原理? ip中每位數字都代表了什麼?我可以在本地不使用第三方介面的情況下完成這項任務嗎?

什麼是ISP呢?簡單點理解就像是類似中國電信、聯通、行動等網路供應商。
有了供應商了就可以上網了,上網你將能透過MODEM取得一個臨時IP(週期性變化)。
但是這個IP是真的就隨機給的嗎?怎麼隨機的呢?
APNIC(亞太互聯網絡資訊中心),就是這個組織了。是現在在世界中操作的五個地區的因特網登記處之一,分配B類IP位址的國際組織。它提供全球性的支援互聯網操作的分派和註冊服務。這些成員包括網路服務供應商、全國網路登記, 和相似的組織的一個非營利, 基於會員資格的組織。 APNIC 負責亞洲太平洋區域,包含 56 個經濟區。

假設,APNIC分配了100萬個IP位址給中國。然後到國內,經由國內的頂級管理組織(不知道是誰)再分配給電信、行動、聯通、行動等頂級ISP。然後這些ISP呢,再依照自己的規則給全國不同省份再分配,再到市、縣、鄉鎮等。

IP位址每個數字並不代表什麼,國內頂級ISP的IP分配是公開的,因此只有拿到這個庫,才能根據用戶的IP來知道用戶是什麼位置的由於這個庫的更新並不及時,所以不100%準確

update

國內比較流行的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可能為連續的。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn