如何在离子身份验证中显示IP地址

时间:2013-08-20 07:14:37

标签: php codeigniter ion-auth

我知道我们可以使用离线身份验证的user方法来获取用户数据。

$user = $this->ion_auth->user()->row();
echo $user->ip_address;

但这会给出一个输出u 8/。如何检索实际的ip地址,如127.0.0.1。

更新

只是为了帮助他人。

h2ooooooo 的帮助下,我发现ipaddress通过bin2hex(inet_pton($ip))传递,然后保存在db中。要检索它,请使用

$user = $this->ion_auth->user()->row();
 echo inet_ntop($user->ip_address);

2 个答案:

答案 0 :(得分:2)

您确定使用inet_pton存储IP吗?

如果我们只是将每2个字符转换为十进制,则结果如下:

<?php
    $ipPacked = '75f1382f';

    $ipSegments = array();
    for ($i = 0; $i < 8; $i += 2) {
        $ipSegments[] = hexdec($ipPacked[$i] . $ipPacked[$i + 1]);
    }

    $ipReal = implode('.', $ipSegments);

    var_dump($ipReal); //string(13) "117.241.56.47"
?>

DEMO

这是您正确的IP吗?

如果 inet_pton(由于大多数字符都是常规ASCII范围之外的字符,这没有意义),那么您只需使用inet_ntop即可获得它回来了。

要将IP转换为此十六进制格式,您可以执行以下操作:

<?php
    $ip = '117.241.56.47';
    $ipSegments = explode('.', $ip);
    $ipPacked = '';
    for ($i = 0; $i < 4; $i++) {
        $ipPacked .= sprintf("%02s", dechex((int)$ipSegments[$i]));
    }
    echo $ipPacked; //75f1382f
?>

DEMO

答案 1 :(得分:0)

所以,最好看一下这个功能:

http://php.net/manual/en/function.inet-pton.php

你会看到inet-nton()对它进行解码 - 给出一个尝试&amp;看看你得到了什么