getenv 获取不了IP地址的原因找到了

程序里用的ip地址获取函数”getenv(“REMOTE_ADDR”)“更换为”$_SERVER['REMOTE_ADDR']“,覆盖更新,再看数据库,ip地址已经成功记录,搞定。
既然再次遇到这问题,就还是记录下吧:php中获取访客(客户端)的ip地址函数getenv(“REMOTE_ADDR”) 与$_SERVER['REMOTE_ADDR']的区别,其实,通过这件事,已经很清楚了。getenv(“REMOTE_ADDR”)函数在 apache下能正常获取ip地址,而在iis中,一点作用都没,而$_SERVER['REMOTE_ADDR']函数,既可在apache中成功获取 访客的ip地址,在iis下也同样有效。

总结:

getenv("REMOTE_ADDR") //apache2 下使用正常

$_SERVER['REMOTE_ADDR'] //iis apache2 下使用都正常

function getRealIp()

{

$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']);

}



修改后的函数:

public function getRealIp()
{
$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])) 
if (!preg_match ('/^(10│172.16│192.168)./i', $ips[$i]))
{
$ip = $ips[$i];
break;
}
}

}
return ($ip?$ip:$_SERVER['REMOTE_ADDR']);
}

发表评论 / Comment

提示:本文章评论功能已关闭