繁体   English   中英

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

[英]Getting IP address with PHP to display correctly

我正在尝试使用时间和IP地址为用户注册该站点生成唯一的ID。 我正在使用的数据库是MySQL ,它具有自动递增功能,但似乎并不实用。 $_SERVER['REMOTE_ADDR']返回无法读取的地址时出现问题。 我正在萤火虫控制台中获取该值的符号。 我尝试使用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 ['REMOTE_ADDR']。

有两个部分的问题:1)如果IP地址返回:: 1,我是否将其获取为IPv6,2)我如何转换为我认为是IPv4的127.0.0.1

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

范例

$packed = chr(127) . chr(0) . chr(0) . chr(1);
$expanded = inet_ntop($packed);

/* Outputs: 127.0.0.1 */
echo $expanded;

您需要使用inet_pton()代替,它要求IP以$_SERVER['REMOTE_ADDR']格式提供。

更新

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

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是否应将:: 1作为本地主机上的IP返回?

暂无
暂无

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

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