php获取用户(客户端)真实IP地址的三种方法
第一种方法,还算靠谱,本人以前一直用的是这个方法:
01 | function get_real_ip(){ |
02 | $ip=false; |
03 | if(!empty($_SERVER['HTTP_CLIENT_IP'])){ |
04 | $ip=$_SERVER['HTTP_CLIENT_IP']; |
05 | } |
06 | if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ |
07 | $ips=explode (', ', $_SERVER['HTTP_X_FORWARDED_FOR']); |
08 | if($ip){ array_unshift($ips, $ip); $ip=FALSE; } |
09 | for ($i=0; $i < count($ips); $i++){ |
10 | if(!eregi ('^(10│172.16│192.168).', $ips[$i])){ |
11 | $ip=$ips[$i]; |
12 | break; |
13 | } |
14 | } |
15 | } |
16 | return ($ip ? $ip : $_SERVER['REMOTE_ADDR']); |
17 | } |
第二种方法:
01 | function get_real_ip(){ |
02 | static $realip; |
03 | if(isset($_SERVER)){ |
04 | if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ |
05 | $realip=$_SERVER['HTTP_X_FORWARDED_FOR']; |
06 | }else if(isset($_SERVER['HTTP_CLIENT_IP'])){ |
07 | $realip=$_SERVER['HTTP_CLIENT_IP']; |
08 | }else{ |
09 | $realip=$_SERVER['REMOTE_ADDR']; |
10 | } |
11 | }else{ |
12 | if(getenv('HTTP_X_FORWARDED_FOR')){ |
13 | $realip=getenv('HTTP_X_FORWARDED_FOR'); |
14 | }else if(getenv('HTTP_CLIENT_IP')){ |
15 | $realip=getenv('HTTP_CLIENT_IP'); |
16 | }else{ |
17 | $realip=getenv('REMOTE_ADDR'); |
18 | } |
19 | } |
20 | return $realip; |
21 | } |
第三种方法,摘自DISCUZ,应该还不错吧!
01 | // 获取IP地址(摘自discuz) |
02 | function getIp(){ |
03 | $ip='未知IP'; |
04 | if(!empty($_SERVER['HTTP_CLIENT_IP'])){ |
05 | return is_ip($_SERVER['HTTP_CLIENT_IP'])?$_SERVER['HTTP_CLIENT_IP']:$ip; |
06 | }elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ |
07 | return is_ip($_SERVER['HTTP_X_FORWARDED_FOR'])?$_SERVER['HTTP_X_FORWARDED_FOR']:$ip; |
08 | }else{ |
09 | return is_ip($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:$ip; |
10 | } |
11 | } |
12 | function is_ip($str){ |
13 | $ip=explode('.',$str); |
14 | for($i=0;$i<count($ip);$i++){ |
15 | if($ip[$i]>255){ |
16 | return false; |
17 | } |
18 | } |
19 | return preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/',$str); |
20 | } |
转载请注明出处:
php程序员的笔记
本文介绍了三种使用PHP获取用户真实IP地址的方法,包括通过检查HTTP头部字段和REMOTE_ADDR来确定客户端的实际IP地址。
291

被折叠的 条评论
为什么被折叠?



