【问题标题】:how to show The IP address in IPv4 which show ::1 in the web page如何在 IPv4 中显示在网页中显示 ::1 的 IP 地址
【发布时间】:2012-06-27 02:00:17
【问题描述】:

我想显示计算机客户端的 IP 地址。但是在我在本地主机中运行的计算机中只显示 "::1" 。如果我在 localhost 中运行,它应该显示 127.0.0.1。那么如何显示IP地址,尤其是在IPv4中。因为我在另一篇文章中读到 ::1 在 IPv6 中。这是我的代码:

function get_ip()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet
    {
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //to check ip is pass from proxy
    {
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
      $ip=$_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

$ip = get_ip(); 

echo $ip;

帮我解决这个问题。谢谢。

【问题讨论】:

  • 为什么如果您通过 IPv6 连接,它应该显示 127.0.0.1?

标签: php ip ipv4


【解决方案1】:

如果您希望网络服务器看到您从 127.0.0.1 连接,那么您必须通过 IPv4 连接。尝试导航到 http://127.0.0.1 而不是 http://localhost。如果您通过 IPv6 连接,那么当然网络服务器将报告 IPv6 地址。

【讨论】:

  • @dinda 如果你通过 IPv6 连接到服务器,那么 IPv4 根本不参与连接 并且显示客户端的 IPv4 地址是没有意义的,因为从服务器的从角度来看,客户端没有 IPv4 地址。如果你想让“localhost”引用 127.0.0.1,那么你需要编辑你的 hosts 文件并从“localhost”定义中删除“::1”。
  • 如何编辑我的主机文件并从本地主机定义中删除 ::1?抱歉问太多了,因为我是新手。谢谢。
  • 如何编辑我的主机文件并从本地主机定义中删除 ::1?抱歉问太多了,因为我是新手。谢谢。
  • 这不是一个真正的 stackoverflow 问题。尝试在谷歌上搜索您的问题,如果找不到答案,请在 superuser.com 上提问。
【解决方案2】:
function getIP() {
    $ip = $_SERVER['SERVER_ADDR'];

    if (PHP_OS == 'WINNT'){
        $ip = getHostByName(getHostName());
    }

    if (PHP_OS == 'Linux'){
        $command="/sbin/ifconfig";
        exec($command, $output);

        $pattern = '/inet addr:?([^ ]+)/';

        $ip = array();
        foreach ($output as $key => $subject) {
            $result = preg_match_all($pattern, $subject, $subpattern);
            if ($result == 1) {
                if ($subpattern[1][0] != "127.0.0.1")
                $ip = $subpattern[1][0];
            }

        }
    }

    return $ip;
}

echo getIP();

【讨论】:

    猜你喜欢
    • 2022-02-22
    • 2018-04-18
    • 2012-06-21
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    相关资源
    最近更新 更多