2012-06-25 56 views
0

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

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; 

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

+1

_why_它应该显示127.0.0.1如果您通过IPv6连接? – Wrikken

回答

1

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

+1

@dinda如果你通过IPv6连接到服务器,那么** IPv4根本不涉及连接**并显示客户端的IPv4地址是没有意义的,因为从服务器的角度来看,**客户端没有IPv4地址**。如果你想让“localhost”参考127.0.0.1,那么你将需要编辑你的主机文件,并从“localhost”定义中删除“:: 1”。 – cdhowie

+0

如何编辑我的hosts文件并从localhost定义中删除:: 1:抱歉太多要求,因为我是新手。谢谢。 – dinda

+0

如何编辑我的主机文件并从localhost定义中删除:: 1:抱歉太多要求,因为我是新手。谢谢。 – dinda

0
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();