function getIP()
{
     $realip;
    if (isset($_SERVER)){
        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
            $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
            $realip = $_SERVER["HTTP_CLIENT_IP"];
        } else {
            $realip = $_SERVER["REMOTE_ADDR"];
        }
    } else {
        if (getenv("HTTP_X_FORWARDED_FOR")){
            $realip = getenv("HTTP_X_FORWARDED_FOR");
        } else if (getenv("HTTP_CLIENT_IP")) {
            $realip = getenv("HTTP_CLIENT_IP");
        } else {
            $realip = getenv("REMOTE_ADDR");
        }
    }    return $realip;
}
我用这个获取不到正确的ip 为什么?谁能帮我改进一下

解决方案 »

  1.   

    你的是什么ip. 怎么获取不到。
    http://developer.51cto.com/art/200911/164514.htm
      

  2.   

    if($_SERVER['HTTP_CLIENT_IP']){
         $m_ip=$_SERVER['HTTP_CLIENT_IP'];
    } else if($_SERVER['HTTP_X_FORWARDED_FOR']){
         $m_ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    } else{
         $m_ip=$_SERVER['REMOTE_ADDR'];
    }再不正确,应该是你的IP不正确了……
      

  3.   

    你说的不正确,是因为你在内网,而获取到的IP是你的出口IP吧....
      

  4.   

    我们获取的IP是指什么ip,我用电脑查看了,我能获取到的是 
    ppp 适配器 宽带连接:
     连接特定的dns 后缀...........:
    ipv4地址....................:60.161.156.69这个ip,这个ip是真实的吗?什么样的ip才是真实的呀?我有些不懂了?谁能给我解释一下吗?
      

  5.   

    IP都是真实的,不过是不是局域网NAT出去的就不好说了。什么宽带类型?
      

  6.   

    内网ip真实吗?你输入cmd看看ip是否正确。或者是linux输入ifconfig
      

  7.   

    除了 REMOTE_ADDR 其余都是可以伪造的60.161.156.69 小区宽带?既然是 ppp 适配器,那就是了
    这实际上接入到你当地电信(网通、联通)供应商的提供互联网服务的局域网中
    外网的服务器看到的ip是这个局域网的出口ip
      

  8.   


    function get_client_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";
       return($ip);
    }
    试下这个获取ip的方法看看。
      

  9.   

    ip.php<?php
    echo $_SERVER['HTTP_X_FORWARDED_FOR'], '<br>';
    echo $_SERVER['HTTP_CLIENT_IP'], '<br>';
    echo $_SERVER['REMOTE_ADDR'], '<br>';骗你一下$url = 'http://localhost/ip.php';$ip = array(
      "X-FORWARDED-FOR:888.888.888.888",
      "CLIENT-IP:abc.123.456.789",
      "REMOTE_ADDR:222.222.333.444",
    );$ch=curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $ip);//构造IP
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_exec($ch);
    curl_close($ch);
    888.888.888.888
    abc.123.456.789
    127.0.0.1 这个是真的可见楼上得到的 ip 有自欺欺人之嫌疑
      

  10.   

    你获取的ip是外网ip   路由ip是内网ip
      

  11.   

    查查 myipaddress.com