为什么我用以下代码获取的ip是“::1”而不是“127.0.0.1”?注:我用的是xampp套件
<?php
$iipp=$_SERVER["REMOTE_ADDR"];
echo $iipp;
?>

解决方案 »

  1.   

    function get_real_ip(){
    $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']);
    }echo get_real_ip();
    ?>
      

  2.   

    public function IP(){//获取IP
                if ($_SERVER['REMOTE_ADDR'])
                    $XXC_IP_IP=$_SERVER['REMOTE_ADDR'];
                else if(getenv("REMOTE_ADDR"))
                    $XXC_IP_IP=getenv("REMOTE_ADDR");
                elseif (getenv("HTTP_CLIENT_IP"))
                    $XXC_IP_IP=getenv("HTTP_CLIENT_IP");
                else
                    $XXC_IP_IP="unknown";
                return $XXC_IP_IP;
    }这个是我经常用得 再不行就是你的问题了
      

  3.   

    print_r($_SERVER);//找找你想要的。“::1” 这种情况应该是你的ip没有设置
      

  4.   

    应该是IPV6协议的问题,检查一下你机子的网络是否已经安装了IPV6的协议IPv6 地址大小为 128 位。首选 IPv6 地址表示法为 x:x:x:x:x:x:x:x,其中每个 x 是地址的 8 个 16 位部分的十六进制值。IPv6 地址范围从 0000:0000:0000:0000:0000:0000:0000:0000 至 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff。除此首选格式之外,IPv6 地址还可以用其他两种短格式指定:
    省略前导零 
    通过省略前导零指定 IPv6 地址。例如,IPv6 地址 1050:0000:0000:0000:0005:0600:300c:326b 可写作 1050:0:0:0:5:600:300c:326b。 
    双冒号 
    通过使用双冒号(::)替换一系列零来指定 IPv6 地址。例如,IPv6 地址 ff06:0:0:0:0:0:0:c3 可写作 ff06::c3。一个 IP 地址中只可使用一次双冒号。 
    IPv6 地址的替代格式组合了冒号与点分表示法,因此可将 IPv4 地址嵌入到 IPv6 地址中。对最左边 96 个位指定十六进制值,对最右边 32 个位指定十进制值,来指示嵌入的 IPv4 地址。在混合的网络环境中工作时,此格式确保 IPv6 节点和 IPv4 节点之间的兼容性。
      

  5.   

    但是我用ipconfig查了一下,所有的ipv6都没有出现连续零
    而且我用下面代码获取的输出结果是前面两个为空,后面两个为“::1”
    <?php// 获取用户真实 IPfunction get_real_ip(){
    $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']);
    }echo $_SERVER['HTTP_CLIENT_IP']."<br />";
    echo $_SERVER['HTTP_X_FORWARDED_FOR']."<br />";
    echo $_SERVER['REMOTE_ADDR']."<br />";
    echo get_real_ip();
    ?>
      

  6.   

    我的朋友用echo $_SERVER['REMOTE_ADDR']可以测出“127.0.0.1”所以我在想是不是我的apache哪里设置没搞好?
      

  7.   


    你們的IP地址不同...他的可能是ipv4 而你的是不是ipv6啊?