介绍
在网站开发过程中,获取访客真实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地址伪造的情况。