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. Redis实战(十二)Redis实现分布式锁

    序言 SET my_key my_value NX PX milliseconds 资料 如何优雅地用Redis实现分布式锁?

  2. POJ 3660 Cow Contest 任意两点之间的关系 Floyd

    题意:牛之间有绝对的强弱,给出一些胜负关系,问有多少头牛可以确定其绝对排名. #include <iostream> #include <cstdio> #include &l ...

  3. 2019 Multi-University Training Contest 3 T6 - Fansblog

    Fansblog Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  4. Oracle-手工生成AWR

    运行awrrpt脚本 SQL> @?/rdbms/admin/awrrpt   Current Instance ~~~~~~~~~~~~~~~~      DB Id    DB Name   ...

  5. ACCESS数据库注入

    0X01 我们想来了解一下access数据库 Access注入是暴力猜解 Access数据结构(access只有一个数据库) Access数据库 表名 列名 数据 没有库这个概念 只有表这个概念 这应 ...

  6. 7.并发编程--多线程通信-wait-notify

    并发编程--多线程通信-wait-notify 多线程通信:线程通信的目的是为了能够让线程之间相互发送信号; 1. 多线程通信: 线程通信的目的是为了能够让线程之间相互发送信号.另外,线程通信还能够使 ...

  7. pwd命令学习

    pwd命令学习 1.学习pwd命令 pwd命令功能为输出当前所在工作目录的绝对路径名称. 绝对路径和相对路径: 绝对路径:从根目录开始直到文件位置 相对路径:相对于程序当前所在目录到文件位置 例:程序 ...

  8. prism Callback应用

    Mock<IEventAggregator> mockEventAggregator; Mock<MyEvent> mockEvent; mockEventAggregator ...

  9. SAP屏幕事件的控制

    1. INITALIZATION事件 该事件在屏幕未显示之前执行,对程序设置值及屏幕元素进行初始化赋值. REPORT  Y001. PARAMETERS QUAL_DAY TYPE D DEFAUL ...

  10. Lua增加一个节点到文件中

    新建一个文件touch /etc/config/ddns 增加一个节点到文件中uci set ddns.newadd=config <config>:即配置文件,如ddns,ipv6等&l ...