php之获取访客IP
php内置变量参数
REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR
REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。
HTTP_CLIENT_IP 是代理服务器发送的HTTP头。如果是“超级匿名代理”,则返回none值。同样,REMOTE_ADDR也会被替换为这个代理服务器的IP。
- $_IP['REMOTE_ADDR']; //访问端(有可能是用户,有可能是代理的)IP
- $_IP['HTTP_CLIENT_IP']; //代理端的(有可能存在,可伪造
- $_IP['HTTP_X_FORWARDED_FOR']; //用户是在哪个IP使用的代理(有可能存在,也可以伪造)
代码示例
<?php
$ip=$_SERVER["REMOTE_ADDR" ];
echo $ip ;
$user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR" ];
$user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR" ];
echo $user_IP ;
?>
<?php
function get_real_ip (){
$ip=false ;
if(!empty($_SERVER["HTTP_CLIENT_IP" ])){
$ip = $_SERVER["HTTP_CLIENT_IP" ];
}
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR' ])) {
$ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR' ]);
if ($ip) { array_unshift($ips, $ip); $ip = FALSE ; }
for ($i = 0; $i < count($ips); $i ++) {
if (!eregi ("^(10|172.16|192.168).", $ips[$i ])) {
$ip = $ips[$i ];
break;
}
}
}
return ($ip ? $ip : $_SERVER['REMOTE_ADDR' ]);
}
echo get_real_ip ();
?>