function GetIP(){
                if(!empty($_SERVER["HTTP_CLIENT_IP"])){
                  $cip = $_SERVER["HTTP_CLIENT_IP"];
                }
                elseif(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
                  $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
                }
                elseif(!empty($_SERVER["REMOTE_ADDR"])){
                  $cip = $_SERVER["REMOTE_ADDR"];
                }
                else{
                  $cip = "unknown";
                }
                return $cip;
        }        function list_ic(){
                $tempip = GetIP();
                $tempdate =date('Y-m-d H:i:s',time());
                if ($tempip != "unknown" ){
                        $sql_where.=" ip = '". $tempip . "' and date >= NOW() - interval 22 hour";
                                $isplay=M('special_ic');
                                $ipfind =$isplay->where($sql_where)->find();
                 if(!isset($ipfind['IP']))
                 {                          $sql_where2.=" IP = '". $tempip . "' " ;
                          $isplay2=M('special_ic');
                          $ipfind2 =$isplay2->where($sql_where2)->find();
                           if(isset($ipfind2['IP']))
                           {
                                   $isplay3=M('special_ic');
                                  $ipdata['IP']=$tempip ;
                            $ipdata['date']=$tempdate; 
                            $updatedate = $isplay3->save($ipdata);
                                    
                                   }
                           else
                           {
                          
                          $dbinsert = M('special_ic');
                          $ipdata['IP']=$tempip ;
                          $dbinsert->add($ipdata);
                     }
                          return '代码';
                        }           }
        }
就是本身我是没有经过中转的话程序获取的是我本地的IP 如果经过CDN中转的话会出现 2个IP 我IP和我中转机器IP 

解决方案 »

  1.   

    同样遇到这个问题 我获取的一直是cdn的地址,获取不到客户真实地址,求解
      

  2.   

    可以用 $_SERVER['HTTP_CDN_SRC_IP'] 获取,我一直用,至少我这cdn可以用,其它的不清楚。
    function get_client_ip(){
    $ip = $_SERVER['HTTP_CDN_SRC_IP'];  //如果加了cdn就获取真实的Ip
    if(!$ip) {
            if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) {
                $ip = getenv("HTTP_CLIENT_IP");
            } else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) {
                $ip = getenv("HTTP_X_FORWARDED_FOR");
            } else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) {
                $ip = getenv("REMOTE_ADDR");
    } else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))  {
                $ip = $_SERVER['REMOTE_ADDR'];
        } else  {
                $ip = "unknown";
    }
    }
            if(strpos($ip,',')>=0) {
             $arr = explode(',',$ip);
             $ip = $arr[0];
            } 
            return $ip;
        }
        
    echo "您的IP是:".get_client_ip();