php手动实现ip2long和long2ip

    /**
* 测试
*/
public function testipAction() {
$ip = '10.58.101.175';
echo ip2long($ip);
echo "<br>";
echo $this->myip2long($ip);
echo "<br>";
echo long2ip('171599279');
echo "<br>";
echo $this->mylong2ip('171599279');
} /**
* 自己实现ip2long
* @param $ip
* @return float|int|string
*/
protected function myip2long($ip) {
$newhex = '';
// 将ip分割成数组
$ipsArr = explode('.', $ip);
foreach ($ipsArr as $key => $value) {
// 十进制最大值是255,如果超过,则直接返回
if ($value > 255) {
return '';
}
// 将十进制转化为十六进制
$hex = dechex($value);
// 每个ip最大是255,十六进制是FF,最大是两位
// 比如ip:1.1.1.1如果不补0,则十六进制是1111,十进制是4369
// 如果补0,则十六进制是01010101,十进制是16843009
if (strlen($hex) < 2) {
// 如果十六进制长度小于2,则自动补0
$hex = '0' . $hex;
}
$newhex .= $hex;
}
// 十六进制转化为十进制
$intStr = hexdec($newhex);
return $intStr;
} /**
* 自己实现long2ip
* @param $int
* @return string
*/
protected function mylong2ip($int) {
// FFFFFF最大为4294967295
$int = $int > 4294967295 ? 4294967295 : $int;
// 将十进制转为十六进制
$hex = dechex($int);
//为了避免7位ip出现,我们手动补0
if (strlen($hex) < 8) {
// 长度小于8,则自动补0
$hex = '0'. $hex;
}
// 每两位进行分组。然后查看每组的第一位是否是0,如果是则去掉。然后把得到的值转为十进制,放在数组中,最后把数组用.连接起来
for ($i =0; $i<8;$i+=2) {
$a = substr($hex, $i, 2);
$ippart = substr($a, 0, 1);
if ($ippart === '0') {
$a = substr($a, 1, 1);
}
$aparr[] = hexdec($a);
}
return implode('.', $aparr);
}

php手动实现ip2long和long2ip的更多相关文章

  1. php中的ip2long和long2ip的理解

    IPv4地址是如何表示的 IPv4使用无符号32位地址,因此最多有2的32次方减1(4294967295)个地址.一般的书写法为用4个小数点分开的十进制数,记为:A.B.C.D,比如:157.23.5 ...

  2. PHP的ip2long和long2ip函数的实现原理

    最近要做个十进制数字的可逆转换做邀请码,一直没搞清楚怎么弄的,实在太复杂了,今天弄IP时想到这个可以进行转换,于是研究了下原理: 主要是自己整理了下: $ip = '12.34.56.78'; $ip ...

  3. ip2long与long2IP 分析

    <?php $ip='47.93.97.127'; $long=sprintf("%u",ip2long($ip));//string(9) "794648959& ...

  4. php ip2long负数的问题

    大家可能都知道php提供了ip2long与long2ip方法对ip地址处理.抛砖引玉,说点概念性滴: 1.ip2long — 将一个IPV4的字符串互联网协议转换成数字格式 int ip2long ( ...

  5. 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引

    本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类 ...

  6. 【转】MySQL性能优化的最佳21条经验

    文章转自: http://blog.csdn.net/waferleo/article/details/7179009 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关 ...

  7. MYSQL性能优化的最佳20+条经验

    MYSQL性能优化的最佳20+条经验 2009年11月27日 陈皓 评论 148 条评论  131,702 人阅读 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数 ...

  8. 【转】【MySql】MySql优化要点

    如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个时候NoSQL的出现暂时解决了这一危机 ...

  9. 170105、MySQL 性能优化的最佳 20+ 条经验

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...

随机推荐

  1. Android应用系列:仿MIUI的Toast动画效果实现

    前言 相信有些人用过MIUI,会发现小米的Toast跟Android传统的Toast特么是不一样的,他会从底部向上飞入,然后渐变消失.看起来效果是挺不错的,但是对于Android原生Toast是不支持 ...

  2. QtCreator常用之快捷键

    1. Ctrl(按住)+ Tab快速切换已打开的文件 2. 自动添加成员函数实体(.cpp)定义: 将光标移动到h文件中的方法声明. 按Alt(按住)+ Enter,再按回车键 将在cpp中添加该函数 ...

  3. Oracle数据库表空间查看和更改

    set linesize 200  --设置输出一行字符个数为200 1.查看表空间名称和大小(单位MB) SELECT t.tablespace_name, round(SUM(bytes / (1 ...

  4. Burpsuiet爆破

    burpsuite中intruder标签内attack type四种类型的用法和区别 2016年07月24日 18:13:26 xss_01 阅读数:9802更多 个人分类: burpsuite网络安 ...

  5. linux cut sort wc sed>vi awk (文本处理)

    cut: 显示切割的行数据 -f: 选择显示的列 (1: 显示第一列; 1,3: 显示第一列.第三列; 1-3: 显示第一列到第三列) -s: 不显示没有分隔符的行 -d: 自定义分隔符(' '空格 ...

  6. linux日常---2、lamp.sh安装lamp环境中的linux操作

    linux日常---2.lamp.sh安装lamp环境中的linux操作 一.总结 一句话总结: 学不如用,学一百遍还不如真正多用几遍的来的效果好 1.linux下查看进程命令? ps 常用 ps - ...

  7. Mac securecrt 破解版安装

    破解一 1.先链接:https://pan.baidu.com/s/1-1nu4eRf7BmuLg5MtlCRvw  密码:30pq    默认下载到了当前用户的”下载”目录中 在”Finder”中 ...

  8. 下载vuejs,Hello Vue(vscode)

    下载vuejs,Hello Vue(vscode) Hello Vue 下载使用vue.js 动图演示 Vue的基本使用步骤  传送门:https://cn.vuejs.org/v2/guide/in ...

  9. leetcode-mid-others-150. Evaluate Reverse Polish Notation

    mycode   42.30%. 注意:如果不考虑符号,-1//3=-1而不是等于0,因为是向下取整 class Solution(object): def evalRPN(self, tokens) ...

  10. 卡死浏览器使IPhone的自带safari打开重启的JS循环代码

    <html> <body> <script> var total=""; for (var i=0; i < 1000000; i++) ...