繁体   English   中英

在PHP中获取错误的IP地址

[英]getting wrong IP address in php

我有以下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();

但是每次我在本地主机上执行此脚本时,都会得到:: 1作为IP

我如何获得确切的Internet IP和系统IP地址,因为我的脚本将在LAN nwteork上运行,并且我想记录lan pc和Internet IP的IP并将其保存在mysql数据库中。

我需要专用于本地系统IP和系统Internet IP的PHP代码。

谢谢

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

首先,丢掉这个愚蠢的函数,因为HTTP_X_FORWARDED_FOR不是IP地址,而仅仅是HTTP标头,并且使其变得仅仅是

$Users_IP_address = $_SERVER['REMOTE_ADDR'];

接下来,您必须设置服务器以使用ipv4,而不是ipv6。
尽管这并不是真正的PHP问题,应该在serverfault上进行询问,并提供完整的系统设置:操作系统,版本,您的权利等。

当您在本地主机上运行以上脚本时,可以获得::1结果。

这很常见。

如果要使用本地主机获取系统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]


?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM