我正在尝试使用时间和 IP 地址为用户注册网站时生成唯一ID。我使用的数据库是MySQL
,它带有自动增量,但它似乎不是一个实用的技术。我遇到$_SERVER['REMOTE_ADDR']
返回不可读地址的问题。我在firebug控制台中获取值的符号。我尝试使用inet_ntop
和inet_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
答案 0 :(得分:4)
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格式。
<强>更新强>
在问题中,您声明您需要可读格式的地址。
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?