php将ip写入到数据库,如何将IP存入数据库,PHP提供ip2long和long2ip函数来实现

ip2long函数会把一个ipv4转换成一串整型数字的形式,便于存储在数据库中可以节省空间和索引。ip2long函数的实现是先通过 . 把ip切割成4个数字,并进行位左移运算,最终拼接而成。反之就是long2ip的实现了。

ip2long如图:

065858a619d50a233297ff8aff38f302.png

一、ip2long函数实现

//php函数实现

$ip = "8.8.8.8";

echo ip2long($ip);  // 134744072

?>

1.实现1,根据上图方式进行相应位运算实现

//php函数实现

$ip = "8.8.8.8";

echo ip2long($ip);  // 134744072

?>

2.实现2

$ip = "8.8.8.8";

$ips = explode('.', $ip);

$result = 0;

$result += $ips[0]<<24;

$result += $ips[1]<<16;

$result += $ips[2]<<8;

$result += $ips[3];

echo $result;

// 134744072

?>

二、long2ip函数实现

//php函数实现

echo long2ip(134744072);

//8.8.8.8

?>

以上代码是由PHP的内置函数long2ip来实现的。但是对于想通过移位来自己实现的童鞋来说,可能没有那么简单。因为PHP的>>运算符是算术右移运算符,所以如果最高位是1的话,右移的结果是在高位补1,这跟结果不符。但是我们可以用另一种思路去解决:保存最高位(符号位),然后将最高位置0,之后再将高8位的最高位置1(这取决于之前保存的符号位)。代码实现如下:

$ip_long = 134744072;

$ip1 = ($ip_long >> 24) & 0xff; // 跟0xff做与运算的目的是取低8位

$ip2 = ($ip_long >> 16) & 0xff;

$ip3 = ($ip_long >> 8) & 0xff;

$ip4 = $ip_long & 0xff;

echo $ip1 . '.' . $ip2 . '.' . $ip3 . '.' . $ip4 . "\n";

//8.8.8.8

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值