使用这段代码获取用户ip地址。我的db表中有ip的unsigned int字段
<?php
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
$ip=$_SERVER['HTTP_CLIENT_IP'];
//proxy check
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip=$_SERVER['REMOTE_ADDR'];
}
$ip = ip2long($ip);
?>
在本地服务器上测试网站。问题是,在ip2long转换后得到'63177408abbad957ed13ae1a2dd3e0b3ed47bd0b48ffcb362'。试过
$ip=$_SERVER['REMOTE_ADDR'];
$ip = ip2long($ip);
太。仍然没有成功。我该如何解决?
答案 0 :(得分:5)
您最有可能使用32位PHP安装,这会破坏IP地址。尝试在mysql中进行转换,这不会遇到问题:
$ip = mysql_real_escape_string('127.0.0.1');
$sql = "INSERT INTO yourtable (ip) VALUES (INET_ATON('$ip'));";
另一种方法是强制PHP将其视为无符号整数,根据ip2long man page上的注释:$ip = sprintf('%u', ip2long($ip));
同样,请记住,“任何一天”都会普及IPv6,你需要使用一个128位的整数来存储这些值(MySQL不支持它们 - 它必须是两个64位的bigint at至少)。