[英]Identifying user's location by IP address
我正在編寫一個程序,我希望自動識別用戶的國家/地區。 我編寫了代碼來獲取ip並將其存儲在DB中。
$ip = gethostbyname($_SERVER['REMOTE_ADDR']);
儲存:
<?php `$result = mysql_query("INSERT INTO `wh_order` (`name`, `email`, `contact`, `itemid`, `itemquantity`, `ip`,`message`, `date`) VALUES('".$name."','".$email."','".$contact."','".$itemid."','".$itemquantity."','".$ip."','".$message."', NOW())");` ?>
另外,這是存儲IP地址的最佳方法嗎?
首先,gethostbyname不會給你一個國家。 你不得不求助於地理定位。 一個有效的免費服務是http://freegeoip.net 。 他們提供API:
http://freegeoip.net/json/74.125.143.104
哪個回報:
{
"city": "Mountain View",
"region_code": "CA",
"region_name": "California",
"metrocode": "807",
"zipcode": "94043",
"longitude": "-122.057",
"latitude": "37.4192",
"country_code": "US",
"ip": "74.125.227.136",
"country_name": "United States"
}
請注意,IP地理定位不會100%准確。
存儲IP地址的最佳列類型是INT(10) unsigned
,這將比varchar列占用更少的空間。 使用INET_ATON和INET_NTOA可以輕松處理轉換:
mysql> SELECT INET_ATON('10.0.5.9');
-> 167773449
mysql> SELECT INET_NTOA(167773449);
-> '10.0.5.9'
您可以將maxmind(http://www.maxmind.com/app/country)的數據庫與apache或nginx擴展結合使用。
或者,這個任務有一個很好的庫: http : //geocoder-php.org/
通過IP識別用戶的位置稱為地理位置 。 它通常需要一個將IP地址范圍映射到地理位置的數據庫。
Maxmind公司根據CreativeCommons許可免費提供名為GeoLite的數據庫
GeoLite數據庫根據知識共享署名 - 相同方式共享3.0 Unported許可進行許可。 提供商業許可。
他們有一個允許快速IP查找的apache模塊,但最簡單的入門方式可能是純PHP選項。 查看可能的集成方法列表。
下載檔案包括幾個例子,基本過程相當簡單:
$gi = geoip_open("GeoLite.dat", GEOIP_STANDARD);
$record = geoip_record_by_addr($gi, "24.24.24.24");
echo $record->latitude;
echo $record->longitude;
使用https://geoip-db.com的服務他們支持IPV4和IPV6地址來定位ip的地理位置。
例:
<!DOCTYPE html>
<html>
<head>
<title>GEOIP DB - Geolocation by IP</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js">
</script>
</head>
<body>
<div>Country: <span id="country"></span>
<div>State: <span id="state"></span>
<div>City: <span id="city"></span>
<div>Latitude: <span id="latitude"></span>
<div>Longitude: <span id="longitude"></span>
<div>IP: <span id="ip"></span>
<script>
$.ajax({
url: "https://geoip-db.com/jsonp",
jsonpCallback: "callback",
dataType: "jsonp",
success: function( location ) {
$('#country').html(location.country_name);
$('#state').html(location.state);
$('#city').html(location.city);
$('#latitude').html(location.latitude);
$('#longitude').html(location.longitude);
$('#ip').html(location.IPv4);
}
});
</script>
</body>
</html>
這是一個jquery片段,雖然其他例子可以在他們的網站上找到(普通的javascript,php,C#)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.