阅读模式:

php ip2long和long2ip函数实现

查看:1647  回复: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

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

扫描二维码手机查看

发布评论:


登录:
  表情:
评论话题
推荐阅读:
mysql中文分词全文搜索索引讯搜的安装   阅读:8146centos 7 添加 redis 3.2.9 开机启动脚本   阅读:10628简单的DOS攻击之死亡之ping详解   阅读:70451用php从1加到100的值   阅读:10146javascript获取两个日期间的所有日期   阅读:7877nginx安装mysql和json模块   阅读:6750shell脚本统计当前服务器并发连接数   阅读:8936一步步带你,如何网站架构   阅读:5067csv文件一键导入数据到mysql数据库   阅读:7781html5 离线缓存的使用   阅读:5104centos 7 开启网络   阅读:8361纯干货,程序员面试的超实用技巧   阅读:5118mysql 为什么添加索引可以提高访问速度   阅读:7096用php从1加到100的值   阅读:10146mysql共享锁和排他锁详解   阅读:8584面试都会问你为什么你从上一家公司离职的真实意思   阅读:12601php打印九九加法表   阅读:12559php 使用 smtp.php 类在线发送邮件功能   阅读:6734企业让你去面试,可能不是真的招人   阅读:6827浅谈javascript的函数节流   阅读:5603用php从1乘到100的值   阅读:7313centos 7 设置 nginx-1.11.10 开机启动   阅读:9053linux时间戳有趣的情人节秒1234567890   阅读:6418比phpexcel还要简单的excel CSV 一键导入数据到数据库   阅读:6172php打印九九加法表   阅读:12559linux php7编译安装mongodb扩展   阅读:10170nginx安装mysql和json模块   阅读:6750php设置cookie为HttpOnly防止XSS攻击   阅读:14254mysql数据一键导出到csv文件   阅读:6780纯干货,程序员面试的超实用技巧   阅读:5118企业让你去面试,可能不是真的招人   阅读:6827centos 7 安装 mysql-5.7   阅读:8935centos 7 忘记root密码   阅读:5864简单的DOS攻击之死亡之ping详解   阅读:70451linux rarcrack破解rar、zip和7z压缩包简单密码的工具   阅读:19561session与cookie的区别   阅读:4918session与cookie的区别   阅读:4918php连接redis   阅读:6561“米粉节”背后的故事——小米网抢购系统开发实践   阅读:4963csv文件一键导入数据到mysql数据库   阅读:7781centos 7.2 添加php7 的 php-fpm 开机启动   阅读:26849分享:淘宝技术这十年   阅读:5517php 读取和设置redis的键值   阅读:8328php打印九九加法表   阅读:12559csv文件一键导入数据到mysql数据库   阅读:7781php+redis实现消息队列   阅读:17042PHP 鸟哥:我也曾经是“不适合”编程的人   阅读:16479centos 7 设置 nginx-1.11.10 开机启动   阅读:9053centos7开启交换内存   阅读:12525centos7中颁发CA证书并开启web https   阅读:9654