在php中获取错误的IP地址

时间:2010-07-10 10:33:43

标签: php mysql ip-address

我有以下PHP代码来获取vistor ip

 function VisitorIP()
  { 
  if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
  $TheIp=$_SERVER['HTTP_X_FORWARDED_FOR'];
  else $TheIp=$_SERVER['REMOTE_ADDR'];
  return trim($TheIp);
  }
  $Users_IP_address = VisitorIP();

但是每次我在我的localhost上执行这个脚本时,我得到了:: 1作为IP

我怎样才能获得准确的互联网IP&系统IP地址 因为我的脚本将在LAN nwteork上运行,我想记录lan pcs&互联网IP并将其保存在mysql数据库中。

我需要PHP代码,它提供本地系统IP和系统互联网IP。

由于

3 个答案:

答案 0 :(得分:3)

从技术上讲,您获得了正确的IP。 ::1是您的环回(localhost)IPv6地址。

答案 1 :(得分:2)

首先,抛弃这个愚蠢的函数,因为HTTP_X_FORWARDED_FOR不是一个IP地址而只是一个HTTP头,并且只是

$Users_IP_address = $_SERVER['REMOTE_ADDR'];

接下来,您必须将服务器设置为使用ipv4,而不是ipv6 虽然它不是真正的PHP问题,应该在serverfault上询问,提供完整的系统设置:操作系统,版本,您的权利等。

答案 2 :(得分:1)

当您在localhost上运行上述脚本时,您可以获得::1此结果。

这很常见。

如果您想使用localhost获取系统IP地址,请使用此代码。

1)localhost

的脚本
<?PHP

$ip = @file_get_contents("http://www.apps-tube.com/apps/ip-address/ip.php");

echo $ip;

?>

2)Servers

的脚本
<?PHP

function getUserIP()
{
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];

    if(filter_var($client, FILTER_VALIDATE_IP))
    {
        $ip = $client;
    }
    elseif(filter_var($forward, FILTER_VALIDATE_IP))
    {
        $ip = $forward;
    }
    else
    {
        $ip = $remote;
    }

    return $ip;
}


$user_ip = getUserIP();

echo $user_ip; // Output IP address [Ex: 177.87.193.134]


?>