我正在编写一个程序,我希望自动识别用户的国家/地区。我编写了代码来获取ip并将其存储在数据库中。
$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地址的最佳方法吗?
答案 0 :(得分:7)
首先,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'
答案 1 :(得分:1)
您可以将maxmind(http://www.maxmind.com/app/country)的数据库与apache或nginx扩展名结合使用。
或者,这个任务有一个很好的库:http://geocoder-php.org/
答案 2 :(得分:0)
通过IP识别用户的位置称为Geolocation。它通常需要一个将IP地址范围映射到地理位置的数据库。
Maxmind公司在CreativeCommons许可下免费提供名为GeoLite的数据库
GeoLite数据库根据知识共享许可 Attribution-ShareAlike 3.0 Unported License。商业许可是 可用。
他们有一个允许快速IP查找的apache模块,但最简单的入门方式可能是纯PHP选项。查看list of possible integration methods.
下载档案包括几个例子,基本过程相当简单:
$gi = geoip_open("GeoLite.dat", GEOIP_STANDARD);
$record = geoip_record_by_addr($gi, "24.24.24.24");
echo $record->latitude;
echo $record->longitude;
答案 3 :(得分:0)
使用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#)