程序里用的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']);
}