1. 简介
在 PHP 中,我们可以利用第三方的 API 获取当前 IP 地址所在的经纬度及地域信息。下面我们将系统地介绍如何实现这一功能。
2. 获取 IP 地址
2.1 通过 $_SERVER 数组获取 IP 地址
我们可以通过 PHP 的 $_SERVER 数组来获取用户的 IP 地址,其中的 REMOTE_ADDR 键对应的值即为用户当前所在的 IP 地址。
// 获取用户 IP 地址
$ip = $_SERVER['REMOTE_ADDR'];
但是这种获取方式在用户处于代理服务器后时,不能很好地获取用户的真实 IP 地址。
2.2 通过 HTTP_X_FORWARDED_FOR 获取 IP 地址
在存在代理服务器的情况下,我们可以通过 HTTP_X_FORWARDED_FOR 键获取真实的 IP 地址。若存在多个代理服务器,那么 HTTP_X_FORWARDED_FOR 链中的第一个值即为我们所需要的用户 IP 地址。
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
return $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
return $_SERVER['REMOTE_ADDR'];
}
3. 获取经纬度及地域信息
我们可以利用第三方接口获取当前 IP 地址所在的经纬度、城市和地区等信息。
3.1 通过 IP-API 获取经纬度及地域信息
IP-API 是一个提供免费 IP 地理位置查询服务的网站,我们可以通过 API 请求获取想要的信息。
以下是获取用户 IP 所在地的经纬度和城市信息的代码。
// 获取用户 IP 地址
$ip = $_SERVER['REMOTE_ADDR'];
// 通过 API 请求获取用户所在经纬度
$json = file_get_contents("http://ip-api.com/json/".$ip."?lang=zh-CN");
$data = json_decode($json, true);
if(($data['status'] == "success")) {
// 获取经度和纬度
$latitude = $data['lat'];
$longitude = $data['lon'];
// 获取城市
$city = $data['city'];
// 获取地区
$region = $data['region'];
}
3.2 通过百度地图 API 获取经纬度及地域信息
除了 IP-API,百度地图 API 同样提供了获取 IP 地理位置的服务,而且支持中文,使用更为方便。
// 连接百度 API 服务器
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://api.map.baidu.com/location/ip?ip=".$ip."&ak=XXXXXXXXXXXXXXX");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($curl);
curl_close($curl);
// 提取 JSON 数据并查询所需信息
$result = json_decode($data, true);
if (array_key_exists("status", $result) && $result["status"] == "0") {
$latitude = $result["content"]["point"]["y"];
$longitude = $result["content"]["point"]["x"];
$city = $result["address_detail"]["city"];
$region = $result["address_detail"]["province"];
}
4. 总结
通过以上两个 API 接口,我们可以轻松地获取用户所在 IP 地址的经纬度及地域信息,也为我们后续的开发提供了很大的便利。