我想从访问者的IP地址中检索他们的城市、州和国家等信息,这样我就可以根据他们的位置定制我的网页。在PHP中是否有一种好的、可靠的方法来做到这一点?我使用JavaScript作为客户端脚本,PHP作为服务器端脚本,MySQL作为数据库。
当前回答
假设您想自己做而不依赖于其他提供者,IP2Nation提供了一个映射的MySQL数据库,该数据库会随着区域注册中心的变化而更新。
其他回答
我用ipapi写了一个机器人。下面是如何在php中获取IP地址(例如1.2.3.4)的location:
设置报头:
$opts = array('http'=>array('method'=>"GET", 'header'=>"User-Agent: mybot.v0.7.1"));
$context = stream_context_create($opts);
获取JSON响应
echo file_get_contents('https://ipapi.co/1.2.3.4/json/', false, $context);
获取一个特定的字段(国家、时区等)
echo file_get_contents('https://ipapi.co/1.2.3.4/country/', false, $context);
我喜欢Maxmind的免费GeoLite City,它最适用 如果它不够精确,你可以从它升级到付费版本。包括一个PHP API,以及其他语言的API。如果你将Lighttpd作为web服务器运行,你甚至可以使用一个模块为每个访问者获取SERVER变量中的信息,如果这是你所需要的。
我应该补充的是,还有一个免费的Geolite Country(如果你不需要确定IP来自哪个城市,这个会更快)和Geolite ASN(如果你想知道谁拥有IP),最后所有这些都可以在你自己的服务器上下载,每月更新一次,使用提供的api可以非常快地查找,因为他们说“每秒数千次查找”。
使用谷歌api:
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script>
contry_code = google.loader.ClientLocation.address.country_code
city = google.loader.ClientLocation.address.city
region = google.loader.ClientLocation.address.region
</script>
假设您想自己做而不依赖于其他提供者,IP2Nation提供了一个映射的MySQL数据库,该数据库会随着区域注册中心的变化而更新。
查看来自hostip.info的API——它提供了很多信息。 PHP示例:
$data = file_get_contents("http://api.hostip.info/country.php?ip=12.215.42.19");
//$data contains: "US"
$data = file_get_contents("http://api.hostip.info/?ip=12.215.42.19");
//$data contains: XML with country, lat, long, city, etc...
如果您信任hostip.info,它似乎是一个非常有用的API。
推荐文章
- 原则-如何打印出真正的sql,而不仅仅是准备好的语句?
- 如何从关联PHP数组中获得第一项?
- PHP/MySQL插入一行然后获取id
- 我如何排序一个多维数组在PHP
- 如何在PHP中截断字符串最接近于一定数量的字符?
- PHP错误:“zip扩展名和unzip命令都没有,跳过。”
- Nginx提供下载。php文件,而不是执行它们
- Json_encode()转义正斜杠
- 如何在PHP中捕获cURL错误
- Linux命令将域名转换为IP
- 如何要求一个分叉与作曲家?
- 如何在php中创建可选参数?
- 在文本文件中创建或写入/追加
- 为什么PHP的json_encode函数转换UTF-8字符串为十六进制实体?
- 如何从一个查询插入多行使用雄辩/流利