php手动实现ip2long和long2ip
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的更多相关文章
- php中的ip2long和long2ip的理解
IPv4地址是如何表示的 IPv4使用无符号32位地址,因此最多有2的32次方减1(4294967295)个地址.一般的书写法为用4个小数点分开的十进制数,记为:A.B.C.D,比如:157.23.5 ...
- PHP的ip2long和long2ip函数的实现原理
最近要做个十进制数字的可逆转换做邀请码,一直没搞清楚怎么弄的,实在太复杂了,今天弄IP时想到这个可以进行转换,于是研究了下原理: 主要是自己整理了下: $ip = '12.34.56.78'; $ip ...
- ip2long与long2IP 分析
<?php $ip='47.93.97.127'; $long=sprintf("%u",ip2long($ip));//string(9) "794648959& ...
- php ip2long负数的问题
大家可能都知道php提供了ip2long与long2ip方法对ip地址处理.抛砖引玉,说点概念性滴: 1.ip2long — 将一个IPV4的字符串互联网协议转换成数字格式 int ip2long ( ...
- 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引
本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类 ...
- 【转】MySQL性能优化的最佳21条经验
文章转自: http://blog.csdn.net/waferleo/article/details/7179009 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关 ...
- MYSQL性能优化的最佳20+条经验
MYSQL性能优化的最佳20+条经验 2009年11月27日 陈皓 评论 148 条评论 131,702 人阅读 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数 ...
- 【转】【MySql】MySql优化要点
如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个时候NoSQL的出现暂时解决了这一危机 ...
- 170105、MySQL 性能优化的最佳 20+ 条经验
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...
随机推荐
- Qt类图
Qt对象命名与类图 QWidget=Windows get,即获得窗体,凡是我们能看到的界面都是从QWidget继承而来的. QDialog QAbstractButton 这是一个抽象类,不能直接使 ...
- 【转载】opencv 二值化函数——cv2.threshold
https://blog.csdn.net/weixin_38570251/article/details/82079080 threshold:固定阈值二值化, ret, dst = cv2.thr ...
- 3D Computer Grapihcs Using OpenGL - 15 Draw Element Instanced
友情提示:继续本节之前,需要保存此前的代码,本节为了试验,会对代码做一些修改,但后续的修改需要我们把代码返回之前的进度. OpenGL内置支持Instancing,有专门的函数来处理这件事情. 为了方 ...
- Linux安装配置redis 、启动redis、redis设置密码
由于间隔时间较长.机器的环境不同等等原因,所以每次安装redis的时候总是不那么顺利,所以这次我要做个笔记 文章大部分内容源于https://blog.csdn.net/gisredevelopmen ...
- Iterator(遍历器) 和 for...of 循环
是generator的前置知识 generator :https://www.cnblogs.com/wangtong111/p/11322961.html 遍历器(Iterator)就是这样一种机制 ...
- [LeetCode]-algorithms-Longest Palindromic Substring
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- php 错误提示开启
开发环境项目,通常需要错误提示:php.ini文件,设置 display_errors = On 项目上线以后,当然不想把错误提示显示. 一般不直接修改php.ini文件,下面两行代码直接加入报错ph ...
- MySQL的explain分析sql语句
explain分析查询 使用 EXPLAIN 关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的.这可以帮你分析你的查询语句或是表结构的性能瓶颈.通过explain命 ...
- python - Tkinter 模块 - python 自带的gui模块
Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口,位Python的内置模块,直接import tkinter即可使用. 1.创建窗口 from Tk ...
- 【ABAP系列】SAP ABAP 实现FTP的文件上传与下载
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 实现FTP的文 ...