阅读模式:

php ip2long和long2ip函数实现

查看:983  回复:0  类型:  来源:php自学网  标签 php

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

php-ip2long.png

一、ip2long函数实现

//php函数实现
$ip = "8.8.8.8";
echo ip2long($ip);  // 134744072

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

<?php
$ip = "8.8.8.8";
list($ip1,$ip2,$ip3,$ip4) = explode('.',$ip);
echo ($ip1<<24)|($ip2<<16)|($ip3<<8)|($ip4); 

// 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(这取决于之前保存的符号位)。代码实现如下:

?php
$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

*有问题之处烦请在评论中指出非常感谢!
不是我想要的内容,继续搜索:

扫描二维码手机查看

发布评论:


登录:
  表情:
评论话题
推荐阅读:
什么是天使轮?什么是A轮融资?B轮融资?   阅读:5317mysql 为什么添加索引可以提高访问速度   阅读:6317linux php7安装yaf扩展   阅读:8860php文件下载防盗链   阅读:10249centos 7 忘记root密码   阅读:5127知乎百万赞作者告诉你:年薪百万的人都在靠什么赚钱   阅读:6901php设置cookie为HttpOnly防止XSS攻击   阅读:13175php翻转字符串   阅读:3817shell发送邮件脚本   阅读:8723centos 7 忘记root密码   阅读:5127shell发送邮件脚本   阅读:8723人性漫画:打工与创业的残酷区别   阅读:5175移动端js触摸touch详解(附带案例源码)   阅读:17271给网站添加一键qq登录的功能   阅读:7863session与cookie的区别   阅读:4386给网站添加一键新浪微博登录的功能   阅读:6798给网站添加一键qq登录的功能   阅读:7863mongodb设置shell开机启动脚本   阅读:10694web项目高并发量网站解决方案   阅读:4909栈和堆的区别   阅读:5306centos 7 安装 redis 3.2.9   阅读:6896linux top命令详解   阅读:9910php删除一个文件夹内的所有文件夹和文件   阅读:5128php 使用 smtp.php 类在线发送邮件功能   阅读:6042nginx安装mysql和json模块   阅读:5545php生成二维码   阅读:7161linux命令中执行php脚本   阅读:8477centos 7 修改系统屏幕分辨率   阅读:46441解决 nginx 413 request entity too large   阅读:4720php 读取和设置redis的键值   阅读:7568企业让你去面试,可能不是真的招人   阅读:6135php 读取和设置redis的键值   阅读:7568centos 7 忘记root密码   阅读:5127linux时间戳有趣的情人节秒1234567890   阅读:5728centos 7 设置 nginx-1.11.10 开机启动   阅读:8279给网站添加一键qq登录的功能   阅读:7863mysql5.7主从同步中binlog同步模式详解   阅读:7880HTTP 1.1 协议详解   阅读:12924centos 7 安装 redis 3.2.9   阅读:6896给网站添加一键qq登录的功能   阅读:7863linux top命令详解   阅读:9910shell发送邮件脚本   阅读:8723centos 7搭建zabbix3.4   阅读:6874centos 7 安装 php-7.1.3   阅读:20834mysql的四种索引类型   阅读:23207nginx安装mysql和json模块   阅读:5545shell脚本统计当前服务器并发连接数   阅读:8035小米手机端商城rem适配原理   阅读:6990php删除一个文件夹内的所有文件夹和文件   阅读:5128把php session 会话保存到redis   阅读:7616