我知道我们可以使用离线身份验证的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);
答案 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"
?>
这是您正确的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
?>
答案 1 :(得分:0)
所以,最好看一下这个功能:
http://php.net/manual/en/function.inet-pton.php
你会看到inet-nton()对它进行解码 - 给出一个尝试&amp;看看你得到了什么