获取ip的方法

  1. function GetIP(){  
  2.    if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))  
  3.            $ip = getenv("HTTP_CLIENT_IP");  
  4.        else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))  
  5.            $ip = getenv("HTTP_X_FORWARDED_FOR");  
  6.        else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))  
  7.            $ip = getenv("REMOTE_ADDR");  
  8.        else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))  
  9.            $ip = $_SERVER['REMOTE_ADDR'];  
  10.        else  
  11.            $ip = "unknown";  
  12.    return($ip);  
  13. }  
  14.   
  15.   
  16. $ip = GetIP();  
  17.   
  18. echo "你的真实IP地址:".$ip; 
PHP参考方法
  1. /** 
  2. * 获得用户的真实IP地址 
  3. * @access public 
  4. * @return string 
  5. */  
  6. function real_ip()  
  7. {  
  8. // 初始化一个变量$realip  
  9.     static $realip = NULL;  
  10.   
  11.     // 如果$realip不真等于NULL,返回之  
  12.     if ($realip !== NULL)  
  13.     {  
  14.         return $realip;  
  15.     }  
  16. // 如果$_SERVER有值  
  17.     if (isset($_SERVER))  
  18.     {  
  19.     // 如果$_SERVER['HTTP_X_FORWARDED_FOR']有值  
  20.     // 表明客户端通过代理上网  
  21.         if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))  
  22.         {  
  23.         // 使用explode()函数将其用','分割成数组  
  24.             $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);  
  25.   
  26.             /* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */  
  27.             // 开始遍历数组  
  28.             foreach ($arr AS $ip)  
  29.             {  
  30.             // 去掉首尾的空白  
  31.                 $ip = trim($ip);  
  32.      // 不是unknown就是真实上网地址,存值并退出循环  
  33.                 if ($ip != 'unknown')  
  34.                 {  
  35.                     $realip = $ip;  
  36.                     break;  
  37.                 }  
  38.             }  
  39.         }  
  40.         // $_SERVER['HTTP_X_FORWARDED_FOR']无值 且  
  41.         // $_SERVER['HTTP_CLIENT_IP']有值,取其值作为真实IP  
  42.         elseif (isset($_SERVER['HTTP_CLIENT_IP']))  
  43.         {  
  44.             $realip = $_SERVER['HTTP_CLIENT_IP'];  
  45.         }  
  46.         // $_SERVER['HTTP_X_FORWARDED_FOR']无值(不是用过代理上网)并且  
  47.         // $_SERVER['HTTP_CLIENT_IP']也没有值  
  48.         else  
  49.         {  
  50.         // 如果$_SERVER['REMOTE_ADDR']有值,取其值作为真实IP  
  51.             if (isset($_SERVER['REMOTE_ADDR']))  
  52.             {  
  53.                 $realip = $_SERVER['REMOTE_ADDR'];  
  54.             }  
  55.             else // 都没有值返回'0.0.0.0'  
  56.             {  
  57.                 $realip = '0.0.0.0';  
  58.             }  
  59.         }  
  60.     }  
  61.     // $_SERVER没有值  
  62.     else   
  63.     {  
  64.     // 如果getenv('HTTP_X_FORWARDED_FOR')非空取其值作为真实IP  
  65.         if (getenv('HTTP_X_FORWARDED_FOR'))  
  66.         {  
  67.             $realip = getenv('HTTP_X_FORWARDED_FOR');  
  68.         }  
  69.         // 如果getenv('HTTP_CLIENT_IP')非空取其值作为真实IP  
  70.         elseif (getenv('HTTP_CLIENT_IP'))  
  71.         {  
  72.             $realip = getenv('HTTP_CLIENT_IP');  
  73.         }  
  74.         // 否则取getenv('REMOTE_ADDR')的值作为真实IP  
  75.         else  
  76.         {  
  77.             $realip = getenv('REMOTE_ADDR');  
  78.         }  
  79.     }  
  80.   
  81.     preg_match("/[\d\.]{7,15}/", $realip, $onlineip);  
  82.     $realip = !emptyempty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';  
  83.   
  84.     return $realip;  
  85. }  
  86.   
  87.   
  88. $ip = real_ip();  
  89.   
  90. echo "你的IP地址:".$ip;

posted on 2009-11-25 11:33  14的路  阅读(434)  评论(0编辑  收藏  举报

导航

友情链接:源码下载