我读到在数据库中存储IP地址的最佳方法是创建一个Unsigned Int(10)字段 . 如何使用PHP转换IP地址?我试过用了
$this->ip = long2ip($_SERVER['REMOTE_ADDR']);
但这似乎不起作用 . 我找到了使用它将其转换回IP地址的方法
$this->ip = sprintf("%u", ip2long($result['ip']));
我最初如何转换IP地址?我应该使用PHP吗?或者更好地集成到MySQL查询中?
long2ip将整数转换为IP格式,ip2long执行反转 .
因此,使用 ip2long 将 $_SERVER['REMOTE_ADDR'] 转换为整数,以便将其存储在数据库中,并在从数据库中读取整数后使用 long2ip :
ip2long
$_SERVER['REMOTE_ADDR']
long2ip
$long = ip2long($_SERVER['REMOTE_ADDR']); $ip = long2ip($long);
最好把这个逻辑放在你的SQL查询中:
INSERT INTO `table` (`ip`) VALUES INET_ATON('192.168.0.1')
然后在选择数据时隐藏地址:
SELECT INET_NTOA(`ip`) FROM `table`
我用过这个
function ip2int($ip) { $a = explode(".",$ip); return $a[0] * 256 * 256 * 256 + $a[1] * 256 * 256 + $a[2] * 256 + $a[3]; }
如果您使用MySQL,则可以使用 INET_ATON (ip2long等效)和 INET_NTOA (long2ip)函数,而不是使用PHP进行处理:
INET_ATON
INET_NTOA
您将要使用 ip2long 转换IP的虚线字符串版本,然后使用 long2ip 转换 . 看起来你现在倒退了 .
$integer_ip = ip2long($_SERVER["REMOTE_ADDR"]); // => 1113982819 $dotted_ip = long2ip($integer_ip); // => "66.102.7.99"
5 回答
long2ip将整数转换为IP格式,ip2long执行反转 .
因此,使用
ip2long
将$_SERVER['REMOTE_ADDR']
转换为整数,以便将其存储在数据库中,并在从数据库中读取整数后使用long2ip
:最好把这个逻辑放在你的SQL查询中:
然后在选择数据时隐藏地址:
我用过这个
如果您使用MySQL,则可以使用
INET_ATON
(ip2long等效)和INET_NTOA
(long2ip)函数,而不是使用PHP进行处理:您将要使用
ip2long
转换IP的虚线字符串版本,然后使用long2ip
转换 . 看起来你现在倒退了 .