使用PHP获取IP地址以正确显示


Getting IP address with PHP to display correctly

我正在尝试使用时间和IP地址为用户注册网站时生成唯一ID。我使用的DB是MySQL,它带有自动递增功能,但这似乎不是一种实用的技术。$_SERVER['REMOTE_ADDR']返回无法读取的地址时,我遇到问题。我正在firebug控制台中获取值的符号。我尝试使用inet_ntopinet_pton,但都不起作用。

$ip_address = $_SERVER['REMOTE_ADDR'];
$test = inet_ntop($ip_address);
echo($test);

为什么我得到的是符号而不是可读文本?

编辑:

我想要存储的是IP和时间的组合。我需要IP以"79.104.9.7105"的格式显示-Niet the Dark Absol,但我得到的是���������������如果我使用inet_ntop或inet_pton,或者::1如果我只使用$_SERVER['REMOTE_ADDR']。

由两部分组成的问题:1)如果IP地址返回::1,我会得到IPv6的IP地址吗?2)我如何转换到127.0.0.1,我认为它是IPv4

inet_ntop()需要二进制格式的地址。

示例:

$packed = chr(127) . chr(0) . chr(0) . chr(1);
$expanded = inet_ntop($packed);
/* Outputs: 127.0.0.1 */
echo $expanded;

您需要使用inet_pton(),这需要$_SERVER['REMOTE_ADDR']格式的IP in。

更新

在问题中,您说明您需要可读格式的地址。

echo $_SERVER['REMOTE_ADDR'];

该变量已经包含了人类可读格式的IP,不需要任何PHP函数来转换它。

您可以尝试此功能:

function getRealIP(){
    if (!empty($_SERVER['HTTP_CLIENT_IP'])){
      $ip = $_SERVER['HTTP_CLIENT_IP'];
    }else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
      $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }else{
      $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

编辑

这个问题可能会帮助你——我认为他也有同样的问题:MAMP是否应该在localhost上返回:1作为IP?