我想从访问者的IP地址中检索他们的城市、州和国家等信息,这样我就可以根据他们的位置定制我的网页。在PHP中是否有一种好的、可靠的方法来做到这一点?我使用JavaScript作为客户端脚本,PHP作为服务器端脚本,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。
其他回答
PHP对此有一个扩展。
从PHP.net:
GeoIP扩展允许您查找IP地址的位置。 城市,州,国家,经度,纬度和其他信息为 所有的,如ISP和连接类型可以得到的帮助 GeoIP。
例如:
$record = geoip_record_by_name($ip);
echo $record['city'];
你需要使用外部服务…例如http://www.hostip.info/,如果你谷歌搜索“geo-ip”,你可以得到更多的结果。
主机ip API是基于HTTP的,因此您可以根据需要在PHP或JavaScript中使用它。
你亦可使用“smart-ip”服务:
$.getJSON("http://smart-ip.net/geoip-json?callback=?",
function (data) {
alert(data.countryName);
alert(data.city);
}
);
我用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);
我在IPLocate上运行服务。Io,你可以通过一个简单的电话免费连接到它:
<?php
$res = file_get_contents('https://www.iplocate.io/api/lookup/8.8.8.8');
$res = json_decode($res);
echo $res->country; // United States
echo $res->continent; // North America
echo $res->latitude; // 37.751
echo $res->longitude; // -97.822
var_dump($res);
$res对象将包含您的地理位置字段,如国家、城市等。
查看文档了解更多信息。
推荐文章
- 如何从一个查询插入多行使用雄辩/流利
- 在PHP单元测试执行期间,如何在CLI中输出?
- 在PHP中使用heredoc的优势是什么?
- PHP中的echo, print和print_r有什么区别?
- 如何将XML转换成PHP数组?
- 如何将对象转换为数组?
- 从IP地址获取位置
- 获取数组值的键名
- HTTPS和SSL3_GET_SERVER_CERTIFICATE:证书验证失败,CA is OK
- PHP -获取bool值,当为false时返回false
- 在foreach中通过引用传递
- 如何触发命令行PHP脚本的XDebug分析器?
- 如何找出如果你使用HTTPS没有$_SERVER['HTTPS']
- 更好的方法检查变量为null或空字符串?
- 当使用Composer的开发/生产开关时,如何正确部署?