【问题标题】:getting wrong IP address in php在php中获取错误的IP地址
【发布时间】:2011-03-14 05:25:18
【问题描述】:

我有以下 php 代码来获取访问者 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

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

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

谢谢

【问题讨论】:

  • ::1 是您的 IPv6 地址

标签: php mysql ip-address


【解决方案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]


?>

【讨论】:

  • 我删除了您网站上“获取我的 IP”服务的链接。这与此问题相关,而且无论如何您都没有表明它是您的网站。
【解决方案2】:

首先,把这个愚蠢的函数扔掉,因为 HTTP_X_FORWARDED_FOR 不是 IP 地址,而只是一个 HTTP 标头,让它只是

$Users_IP_address = $_SERVER['REMOTE_ADDR'];

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

【讨论】:

  • 看我想要一个PHP代码,它提供本地系统IP和系统的互联网IP。
  • @air 你必须重新配置你的服务器。 apache的htttpd.comf文件中的Listen参数值是什么?
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2014-02-23
    • 2010-12-15
    • 2015-02-23
    • 2011-02-07
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 2017-10-12
    相关资源
    最近更新 更多