php实现多ip
PHP 实现多 IP 的方法
获取客户端真实 IP 地址
在 PHP 中获取客户端 IP 地址通常使用 $_SERVER['REMOTE_ADDR'],但在代理或负载均衡环境下需要检查其他服务器变量:
function getClientIP() {
$ip = '';
if (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
处理多 IP 字符串
当 HTTP_X_FORWARDED_FOR 包含多个 IP 时(如代理链),需要拆分处理:
$ipList = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$clientIp = trim($ipList[0]); // 取第一个 IP 作为真实客户端 IP
验证 IP 地址有效性
使用 filter_var 函数验证 IP 格式:

$ip = '192.168.1.1';
if (filter_var($ip, FILTER_VALIDATE_IP)) {
echo "Valid IP";
}
获取服务器所有 IP 地址
通过 gethostbynamel 获取主机名对应的所有 IP:
$ips = gethostbynamel('example.com');
print_r($ips);
多 IP 应用场景(如负载均衡)
在负载均衡环境中,可能需要记录原始客户端 IP:

$realIp = isset($_SERVER['HTTP_X_REAL_IP'])
? $_SERVER['HTTP_X_REAL_IP']
: $_SERVER['REMOTE_ADDR'];
网络接口 IP 获取(Linux 系统)
通过系统命令获取服务器网络接口 IP:
$ifconfig = shell_exec('/sbin/ifconfig');
preg_match_all('/inet (addr:)?((\d+\.){3}\d+)/', $ifconfig, $matches);
$serverIps = $matches[2];
IP 地址转换
IPv4 与整数相互转换:
$ip = '192.168.1.1';
$long = ip2long($ip);
$ip = long2ip($long);
注意事项
- 代理转发的 IP (
HTTP_X_FORWARDED_FOR) 可能被伪造,需结合可信代理列表验证 - IPv6 地址需要使用
FILTER_FLAG_IPV6标志验证 - 云服务环境可能需要检查特定的头字段如
AWS-Client-IP






