php获得用户的真实IP

介绍

在网站开发过程中,获取访客真实IP地址是一种很常见的需求,PHP提供了相关函数来帮助我们实现这个功能。

获取IP地址的方式

客户端IP地址

访客访问网站时,HTTP请求头信息中会有一个REMOTE_ADDR项,这个项中存储的就是客户端IP地址。

$ip = $_SERVER['REMOTE_ADDR'];

注意:这种方式获取的客户端IP地址可能会被伪造,不是100%可信。

代理IP地址

如果访客使用了代理服务器,那么我们通过REMOTE_ADDR只能获取到代理服务器的IP地址,这时我们需要借助另一个HTTP请求头信息项HTTP_X_FORWARDED_FOR,这个选项中存储的是原始客户端IP地址。

//获取代理IP地址

$proxy_ip = $_SERVER['REMOTE_ADDR'];

//获取原始客户端IP地址

$original_ip_arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);

$original_ip = trim(array_pop($original_ip_arr));

//判断是否使用了代理服务器

if (!empty($original_ip) && preg_match('/^\d+\.\d+\.\d+\.\d+$/', $original_ip)){

$ip = $original_ip;

}

else{

$ip = $proxy_ip;

}

通过第三方服务获取IP地址

除了自己通过PHP代码获取IP地址外,也可以通过第三方服务来获取IP地址。常见的第三方服务有ip-api.com、ipstack.com、ipify.org等。这些服务提供了API接口,我们可以通过调用API来获取IP地址。以ip-api.com为例,其API接口为http://ip-api.com/json/$ip。其中,$ip为需要查询的IP地址。返回的数据是JSON格式。

$ip = $_SERVER['REMOTE_ADDR'];

$api_url = "http://ip-api.com/json/".$ip;

$data = file_get_contents($api_url);

$json_data = json_decode($data, true);

if ($json_data['status'] == 'success'){

echo '国家:'.$json_data['country'].'';

echo '城市:'.$json_data['city'].'';

echo '经纬度:'.$json_data['lat'].','.$json_data['lon'].'';

}

else{

echo '无法获取IP地址信息';

}

总结

获取客户端IP地址是网站开发过程中的常见需求。PHP提供了相关函数来帮助我们实现这个功能。同时,我们还可以借助第三方服务来获取IP地址。在获取IP地址时,需要注意是否使用了代理服务器,以及可能存在IP地址伪造的情况。

后端开发标签