簡體   English   中英

從PHP獲取IP的位置詳細信息

[英]Getting location details from IP in PHP

是否可以從PHP中的用戶IP地址獲取位置詳細信息。

有什么建議么 ??

謝謝

$ip = '98.229.152.237';
$xml = simplexml_load_file("http://ipinfodb.com/ip_query.php?ip=$ip");
print_r($xml);

輸出:

SimpleXMLElement Object
(
    [Ip] => 98.229.152.237
    [Status] => OK
    [CountryCode] => US
    [CountryName] => United States
    [RegionCode] => 33
    [RegionName] => New Hampshire
    [City] => Manchester
    [ZipPostalCode] => 03103
    [Latitude] => 42.9403
    [Longitude] => -71.4435
    [Timezone] => -5
    [Gmtoffset] => -5
    [Dstoffset] => -4
)

您需要使用一些Geo IP服務

我在google: geoplugin上找到的一項免費服務。 他們使用php snipplet來使用他們的服務: geoplugin / php

您可以查看maxmind數據庫GeoIP PECL擴展

就我而言:

  • 我用“ pecl install geoip ”安裝了擴展程序
  • 我已經下載了geolitecity數據庫並將其復制到/usr/share/GeoIP/GeoIPCity.dat因此它是由PECL擴展程序找到的。

注意如果你不能安裝任何PECL擴展,也應該有一些PEAR包( PEAR::Net_GeoIP )來幫助你。


一旦安裝了這兩個,就可以使用這種代碼:

$ip = '82.229.x.y';     // replace with your IP address
var_dump(geoip_record_by_name($ip));

你會得到這種輸出:

array
  'continent_code' => string 'EU' (length=2)
  'country_code' => string 'FR' (length=2)
  'country_code3' => string 'FRA' (length=3)
  'country_name' => string 'France' (length=6)
  'region' => string 'B9' (length=2)
  'city' => string 'Lyon' (length=4)
  'postal_code' => string '' (length=0)
  'latitude' => float 45.75
  'longitude' => float 4.84999990463
  'dma_code' => int 0
  'area_code' => int 0

在我的情況下,這是真的:我確實在里昂市,FR。

查看PEAR GeoIP庫

最初的問題仍然與許多人有關; 現在2016年末)。

經過多年的GEO定位經驗,我的答案如下......

真實地報告“國家”之外的位置詳細信息是不可靠的。 所有信息都來自IP#ISP注冊,這是相關信息,由主要數據供應商定期更新和傳遞。 隨着IP#的丟棄或購買,供應商必須獲得有關企業(即ISP)注冊/變更的詳細信息。 大多數數字是在“塊”中獲得的,但並非所有數字都必須與同一服務器相關。

*許多(如果不是大多數?)較小的私人網站向公眾提供信息使用“Maxmind”免費數據庫並且(不正當地)將其傳遞給公眾; 閱讀Maxmind警告。 較小的站點沒有用於不斷更新權限注冊的資源。

免費的maxmind和“ip2location”DB是其付費數據庫的一小部分; 看看他們的警告,以解釋缺少的東西。

在塊中購買的許多IP#是通過任意數量的服務器共享的,這導致信息模糊。 當使用到ISP的無線網絡連接時,與可能穩定的有線ADSL / cable / blah連接相反,由於ISP網絡服務器的特別廣泛的布局(中繼),錯誤可能非常令人吃驚; 在大多數情況下,會話之間的非靜態更改,甚至可能在每個會話期間更改。

例如,當使用漫游無線筆記本電腦加密狗進行ISP連接時,我經常被引用為處於另一種狀態,並且可以(在此處為AU)距離我的實際位置數百到數千KM。

你能用PHP嗎?

使用主要的數據庫供應商(即ip2location.com),可以訪問可用的服務器端腳本,這些腳本可用於獲取必要的信息。 而不是一個不太可靠的免費數據庫,我使用ip2location的DB1獲取訪問者“國家”,我可以通過Perl和PHP做我想做的事情。

根據使用注意事項,我也可以在更新后按月自動下載和解壓縮二進制數據庫。 顯然,從自己的站點訪問查找可以克服遠程按需獲取和處理的問題。

根據我的要求,ip2location FULL db比每年的Maxmind便宜得多。 *但是,Maxmind FREE db比ip2location FREE DB更廣泛。

請注意,在嘗試獲取訪問者的其他地址和狀態詳細信息等時,我強烈建議以訪問者可以更正的方式顯示; 以免他們沮喪。

問候。

 $ip = "66.96.147.144";
    $geoPlugin_array = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip=' . $ip) );
    echo '<pre>';
    print_r($geoPlugin_array);

OUTPUT :
Array
(
    [geoplugin_request] => 66.96.147.144
    [geoplugin_status] => 200
    [geoplugin_credit] => Some of the returned data includes GeoLite data created by MaxMind, available from http://www.maxmind.com.
    [geoplugin_city] => Burlington
    [geoplugin_region] => MA
    [geoplugin_areaCode] => 781
    [geoplugin_dmaCode] => 506
    [geoplugin_countryCode] => US
    [geoplugin_countryName] => United States
    [geoplugin_continentCode] => NA
    [geoplugin_latitude] => 42.5051
    [geoplugin_longitude] => -71.204697
    [geoplugin_regionCode] => MA
    [geoplugin_regionName] => Massachusetts
    [geoplugin_currencyCode] => USD
    [geoplugin_currencySymbol] => $
    [geoplugin_currencySymbol_UTF8] => $
    [geoplugin_currencyConverter] => 1
)

我最近發現了PHP GeoIPLocation Library

它是一個PHP文件,需要包含在PHP腳本中。 它會自動搜索更新的數據庫,並為您返回國家/地區詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM