我正在尝试获取用户浏览网站的国家/地区,以便我可以计算出在网站上显示的货币。我曾尝试使用可从以下网址获得的 GET 脚本:http: //api.hostip.info但它们在我测试时只返回 XX。
如果有人知道任何更好的方法,请分享。
谢谢。
我正在尝试获取用户浏览网站的国家/地区,以便我可以计算出在网站上显示的货币。我曾尝试使用可从以下网址获得的 GET 脚本:http: //api.hostip.info但它们在我测试时只返回 XX。
如果有人知道任何更好的方法,请分享。
谢谢。
我用这个:
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
$ip = $_SESSION['ip'];
$try1 = "http://ipinfodb.com/ip_query.php?ip=".$ip."&output=xml";
$try2 = "http://backup.ipinfodb.com/ip_query.php?ip=".$ip."&output=xml";
$XML = @simplexml_load_file($try1,NULL,TRUE);
if(!$XML) { $XML = @simplexml_load_file($try2,NULL,TRUE); }
if(!$XML) { return false; }
//Retrieve location, set time
if($XML->City=="") { $loc = "Localhost / Unknown"; }
else { $loc = $XML->City.", ".$XML->RegionName.", ".$XML->CountryName; }
$_SESSION['loc'] = $loc;
试试这些:
http://ip-to-country.webhosting.info/
两者都是 IP 地址到国家/地区的数据库,允许您查找给定 IP 地址的来源国家/地区。
然而,重要的是要注意这些数据库并非 100% 准确。它们是一个很好的指南,但由于各种原因,您会得到错误的结果。
使您的数据库保持最新将缓解其中一些问题,但不会完全解决它们(尤其是代理问题),因此您应该始终考虑到会得到错误结果的事实。
您应该使用geoip 库。
Maxmind提供免费数据库和商业数据库,最后更新日期和精度不同,商业质量更好。
免费数据库见http://www.maxmind.com/app/geolitecountry。
我认为它应该足以满足基本需求。
试试这些:
$key="9dcde915a1a065fbaf14165f00fcc0461b8d0a6b43889614e8acdb8343e2cf15"; $ip="198.168.1230.122";
$url = " http://api.ipinfodb.com/v3/ip-city/?key= $key&ip=$ip&format=xml";
//加载xml文件
$xml = simplexml_load_file($url); // 打印第一个元素的名字
回声 $xml->getName() 。"
"; // 创建一个循环来打印每个节点的元素名称和数据
foreach($xml->children() as $child)
{
echo $child->getName() . ": " . $child . "<br />";
}
您可以使用地理定位来获取坐标,然后使用一些服务来获取国家,但是地理定位 API 是基于浏览器的,因此您只能通过 JavaScript 访问它,然后必须以某种方式将这些信息传递给 PHP,我在JS 部分一次:
http://www.lautr.com/utilizing-html5-geolocation-api-and-yahoo-placefinder-example
在通过 IP 获取位置时,有大量的服务提供数据库,有些是免费的,有些是收费的,有些存储了很多 IP 和大量数据,有些则更少,例如一个你提到的,工作得很好:
http://api.hostip.info/?ip=192.0.32.10
因此,您可以使用非常简洁的 Geolocation API,但需要用户许可,通过 JS 工作并且不能在 IE 中工作(到目前为止),或者必须寻找适合您需求的 IPÜ 定位服务 :)
如前所述,有很多方法可以做到这一点。但我建议您查看我们开发的https://github.com/ip2iq/ip2-lib-php上的 IP2 PHP 库。
你可以像下面这样使用它:
<?php
require_once("Ip2.php");
$ip2 = new \ip2iq\Ip2();
$country_code = $ip2->country('8.8.8.8');
//$country_code === 'US'
?>
它不需要任何 SQL 或 Web 服务查找,只需一个本地数据文件。它比几乎所有其他方法都快。该数据库每月更新一次,您可以免费下载。
如果您需要您的语言中的国家/地区名称,您现在唯一需要做的就是将其映射到一个关联数组,例如https://gist.github.com/DHS/1340150