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

时间:2014-10-01 13:47:29

标签: php

我正在尝试使用时间和 IP 地址为用户注册网站时生成唯一ID。我使用的数据库是MySQL,它带有自动增量,但它似乎不是一个实用的技术。我遇到$_SERVER['REMOTE_ADDR']返回不可读地址的问题。我在firebug控制台中获取值的符号。我尝试使用inet_ntopinet_pton,但都没有效果。

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

为什么我会使用符号而不是可读文本?

编辑:

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

两部分问题:1)我是否将IP地址作为IPv6返回:: 1,2)如何转换为127.0.0.1,我认为是IPv4

2 个答案:

答案 0 :(得分:4)

inet_ntop()期望地址采用二进制格式。

Example

$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格式。

<强>更新

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

echo $_SERVER['REMOTE_ADDR'];

该变量已包含人类可读格式的IP,无需任何PHP函数进行转换。

答案 1 :(得分:0)

您可以尝试此功能:

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;
}

修改

这个问题对您有帮助我认为他有同样的问题:Should a MAMP return ::1 as IP on localhost?