[英]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
”安裝了擴展程序 /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.