有没有简单的方法从给定的IP地址中检索国家,最好是以ISO_3166-1格式?
有两种方法:使用互联网服务和使用某种本地列表(可能包装在库中)。您想要的取决于您正在构建什么。
对于服务:
对于列表:
您可以通过从RIR下载列表来自己创建:
很多人(包括我所在公司)似乎使用MaxMind GeoIP。
他们有一个免费版本GeoLite,虽然不如付费版精确,但如果你只需要简单的东西,它可能已经足够了。
ipinfodb 提供了一个免费的 IP 地址和国家互相转换的数据库和 API。他们使用来自 MaxMind 的免费数据。该数据每月更新一次,是一个具有相当准确度的不错的免费替代品。
我不清楚http://hostip.info网站的准确性。我刚访问该网站,它报告说我的国家是加拿大。但我在美国,我的办公室使用的ISP仅在美国运营。它确实允许您更正其猜测,但如果您使用此服务来跟踪网站访问者的国家,则无法确定数据是否正确。当然,我只是一个数据点。我下载了GeoLite国家数据库,它只是一个.csv文件,并且我的IP地址被正确地识别为美国。
MaxMind产品系列(付费或免费)的另一个好处是,您拥有数据,而不会因为调用另一个系统的Web服务而产生性能损耗。
<?php $ip = $_SERVER['REMOTE_ADDR'];
$json = file_get_contents("http://api.easyjquery.com/ips/?ip=".$ip."&full=true");
$json = json_decode($json,true);
$timezone = $json[localTimeZone];?>
$ curl ipinfo.io/8.8.8.8
{
"ip": "8.8.8.8",
"hostname": "google-public-dns-a.google.com",
"loc": "37.385999999999996,-122.0838",
"org": "AS15169 Google Inc.",
"city": "Mountain View",
"region": "CA",
"country": "US",
"phone": 650
}
$ curl ipinfo.io/8.8.8.8/country
US
function ip_details($ip) {
$json = file_get_contents("http://ipinfo.io/{$ip}");
$details = json_decode($json);
return $details;
}
$details = ip_details("8.8.8.8");
echo $details->city; // => Mountain View
echo $details->country; // => US
echo $details->org; // => AS15169 Google Inc.
echo $details->hostname; // => google-public-dns-a.google.com
在这些示例中,我使用了IP地址8.8.8.8,但如果您想获取用户的IP详细信息,请改为传递 $_SERVER ['REMOTE_ADDR']
。更多详细信息请参见http://ipinfo.io/developers。