在PHP中获取客户端IP地址可以使用$_SERVER
超全局变量中的REMOTE_ADDR
键获取,示例代码如下:
<?php
$ip = $_SERVER['REMOTE_ADDR'];
echo "客户端IP地址为:$ip";
?>
但是,REMOTE_ADDR
键并不是一定可靠的,因为它只会返回直接连接到服务器的客户端IP地址,如果客户端通过代理服务器或者CDN等中间件访问网站,则REMOTE_ADDR
键返回的是中间件的IP地址,而不是真实客户端的IP地址。
如果要获取真实的客户端IP地址,可以通过获取HTTP头中的X-Forwarded-For
或者X-Real-IP
字段来实现。示例代码如下:
<?php
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}elseif(isset($_SERVER['HTTP_X_REAL_IP'])){
$ip = $_SERVER['HTTP_X_REAL_IP'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
echo "客户端IP地址为:$ip";
?>
这段代码首先判断是否存在X-Forwarded-For
字段,如果存在则说明客户端通过了代理服务器,X-Forwarded-For
字段的值是一个以逗号分隔的IP地址列表,第一个IP地址就是客户端的真实IP地址;如果X-Forwarded-For
字段不存在,则判断是否存在X-Real-IP
字段,如果存在则说明客户端通过了CDN等中间件,X-Real-IP
字段的值就是客户端的真实IP地址;如果X-Real-IP
字段也不存在,则说明客户端直接连接到了服务器,REMOTE_ADDR
键的值就是客户端的真实IP地址。