2022-8-8 396 0
牛B技术

程序里用的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']//iisapache2下使用都正常functiongetRealIp(){$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']);}修改后的函数:publicfunctiongetRealIp(){$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']);}