php如何根据IP获取当前经纬度以及地域信息

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 地址的经纬度及地域信息,也为我们后续的开发提供了很大的便利。

后端开发标签