php ip2long mysql,PHP基于ip2long实现IP转换整形

b473c6233e933feb77a9404a913e74bc.png

如何将四个字段以点分开的IP网络址协议地址转换成整数呢?PHP里有这么一个函数ip2long.比如

echo ip2long("10.2.1.3");

?>

我们将得到

167903491

这是如何计算的,目前我知道有两个算法。其一

function ip2int($ip){

//我们先把ip分为四段,$ip1,$ip2,$ip3,$ip4

list($ip1,$ip2,$ip3,$ip4)=explode(".",$ip);

//然后第一段乘以256的三次方,第二段乘以256的平方,第三段乘以256

//这即是我们得到的值

return $ip1*pow(256,3)+$ip2*pow(256,2)+$ip3*256+$ip4;

}

?>

其二,用位运算

function ip2int($ip){

list($ip1,$ip2,$ip3,$ip4)=explode(".",$ip);

return ($ip1<<24)|($ip2<<16)|($ip3<<8)|($ip4);

}

?>

我们会发现,有些ip转化成整数后,是负的,这是因为得到的结果是有符号整型,最大值是2147483647.要把它转化为无符号的,可以用

sprintf("%u",ip2long($ip);

就能转换为正整数。而且得到的结果用long2ip也可以正常转换回原来的ip地址。也可以用ip2long来验证一个ip是否是有效的,如

function chk_ip($ip){

if(ip2long($ip)=="-1") {

return false;

}

return true;

}

//应用

var_export(chk_ip("10.111.149.42"));

var_export(chk_ip("10.111.256.42"));

?>

将输出true和false

把ip数据保存在数据库(MySQL)中时候,我们习惯用ip2long函数生成整型,然后存放在一个int(11)类型的字段中,但是,在不同的系统平台上,ip2long函数得到的值是不同的,因此可能造成在从数据库中读出数据,用long2ip得到ip的时候产生错误,说一下我们碰到的情况:

我们用一个int(11)类型(范围-2147483648 - 2147483647)来保存把一个ip地址用ip2long处理得到的结果,例如ip是"202.105.77.179′,那么在32位机器上得到的结果是:-899068493,而在64位机器上却得到3395898803.然后把它写入数据库,由于超过int(11)的范围,因此64位机器上的结果被保存为int(11)的最大值:2147483647.于是在从数据库中取出的时候,便得到了错误的结果,会得到”127.255.255.255″这个ip地址.

解决的办法很多,比如可以用mysql的函数:INET_ATON和INET_NTOA来处理ip地址;或者把保存ip地址的字段改为bigint类型,这样在64位机器上虽然保存的是3395898803,使用long2ip函数仍能得到正确的结果.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。

原文链接:https://www.cnblogs.com/ghjbk/p/6957155.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查看你某条sql是哪个用户执行的_django_debug_toolbar:查看访问某个页面执行sql的详细...

django_debug_toolbar 是django的第三方工具包&#xff0c;给django扩展了调试功能&#xff0c;包括查看执行的sql语句&#xff0c;db查询次数&#xff0c;request&#xff0c;headers&#xff0c;调试概览等。1、官方推荐的安装方式是&#xff1a;pip install django-debug-to…

050666 获取tableview的cell

在这个例子中&#xff0c;当改变picker值的时候&#xff0c;Cell中的值也跟着改变。以前就一直很纠结怎么获取选中的Cell&#xff0c;看过这个例子后&#xff0c;真是豁然开朗呀&#xff01; 这个例子里用到了一个方法&#xff1a;indexPathForSelectedRow&#xff0c;用这个方…

java中如何合并两个网格,Hazelcast: Java分布式内存网格框架(平台)

转自&#xff1a;http://blog.csdn.net/iihero/article/details/7385641下边是它的宣传内容&#xff1a;hazelcast是一个开放源码集群和高度可扩展的数据分发平台&#xff0c;这是为Java&#xff1a;1. 快如闪电;数以千计的运算/秒。2. 故障安全;崩溃后没有丢失数据。3. 作为新…

unzip 解压_每天一条Linux命令(11) unzip (超详细)

在Linux系统中&#xff0c;命令 unzip 用于解压zip命令或其他压缩软件压缩的zip格式文件。语法&#xff1a;unzip [选项] [压缩文件]常用参数说明&#xff1a;-o 解压时不提示是否覆盖文件-v 解压时显示详细信息-d 指定解压目录-l 不解压&#xff0c;只显示压缩文件内所包含的…

php 查找键名,array_key_exists()函数搜索数组键名步骤详解

这次给大家带来array_key_exists()函数搜索数组键名步骤详解&#xff0c;array_key_exists()函数搜索数组键名的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。array_key_exists() 定义和用法array_key_exists() 函数判断某个数组中是否存在指定的 key…

poi导出Excel(分行单元格颜色设置,字体设置,合并单元格,插入图片)

这是一个日报导出功能的代码;图片是用JfreeChars生成好的&#xff0c;话不多少 看代码 public String excelExport(HttpServletRequest request,HttpServletResponse response,CarSaledailyDTO carSaledailyDTO){//获取需要导出的报表数据     List<List<List>>…

vim 复制一行并且粘贴_Vim常用命令2之文本操作

文本操作无非增删改查&#xff0c;搜索&#xff0c;替换&#xff0c;复制粘贴&#xff0c;总结有如下命令&#xff08;正常模式下&#xff09;九四干&#xff1a;Vim常用命令1之移动光标​zhuanlan.zhihu.com1. 增1.1 行内插入i 光标之前插入I 行首插入a光标之后插入A 行末插入…

数据访问增删改查之单项查询

封装类 <?php //纯php,可以删掉html代码直接写 //封装类&#xff0c;这样用起来方便&#xff0c;不必每次都去再写了 //用驼峰法命名类名&#xff0c;首字母大写 class ChaXun { public $host"localhost";//数据库地址,可以直接赋值为"localhost"pu…

matlab中noisbloc,基于小波变换的微弱信号检测技术的研究.doc

毕业论文基于小波变换的微弱信号检测技术研究学生姓名&#xff1a; 学号&#xff1a;学 院&#xff1a;专 业&#xff1a;指导教师&#xff1a;2012年 6月基于小波变换的微弱信号检测技术研究摘要&#xff1a;微弱信号检测的目的是要提取需要检测到的微弱信息&#xff0c;利用小…

import是引进外部函数吗_vue3已正式发布,你学了吗

慌慌张张,匆匆忙忙,vue2还没用好,vue3就来了&#xff1f;&#xff1f;&#xff1f;&#xff1f;真的学不动了.......嘴上说着学不动,只见有的人在偷偷的在学习&#xff0c;我也利用假期看了看vue3...,倒吸一口气&#xff0c;还好差别并不是很大。别问我什么原理&#xff0c;底层…

aoa定位算法matlab仿真,基于信号到达角度(AOA)的定位算法研究

内容摘要&#xff1a;基于信号到达角度(AOA)的定位算法是一种常见的无线传感器网络节点自定位算法&#xff0c;算法通信开销低&#xff0c;定位精度较高。由于各种原因&#xff0c;估测的多个节点位置可能存在不可靠位置&#xff0c;提出了一种改进的基于信号到达角的定位方法&…

R语言-时间日期函数

R语言时间日期函数 1. 返回当前日期时间&#xff0c;有两种方式&#xff1a; Sys.time() date() 举例 format(Sys.time(), "%a %b %d %X %Y %Z")#[1] "周五 五月 06 14:17:40 2016 CST"format(Sys.time(), "%H:%M:%OS3")#[1] "14:17:40.6…

各种水龙头拆卸图解_水龙头上包卫生纸,竟有这种效果!邻居看了都想学

你家该大扫除了吗&#xff1f;如何打扫厨房可是个大问题厨房的卫生问题今天一一教你解决洗碗池洗碗池经常不擦&#xff0c;污渍会积得很厚&#xff0c;陈旧老污渍怎么清除呢&#xff1f;方法&#xff1a;白醋 用毛巾裹在水龙头上&#xff0c;倒上白醋。因为白醋具有腐蚀性&…

php按id获取整条数据库,Ajax取得数据库的json值,想通过id获取对应信息,但是都默认获取第一条了...

PHP<?PHP header("Content-Type: text/html; charsetutf-8");include(conn.php);//链接数据库$sql select id,article_name,check_box,radio_box,content,input_name,input_number,input_title,input_describe from article;$res mysqli_query($conn,$sql);$da…

服务器系统及软件常见漏洞

服务器系统及软件常见漏洞 漏洞名称允许Traceroute探测远端WWW服务支持TRACE请求远端WWW服务提供了对WebDAV的支持远端WEB服务器上存在/robots.txt文件远端VNC服务正在运行远端HTTP服务器类型和版本信息泄漏远端DNS服务允许递归查询远程代理服务器允许连接任意端口远程代理服务…

链式存储结构 php,【PHP 实现数据结构】链式队列

什么是链式队列队列是一种“先进先出”的存储结构,是一种特殊的线性表&#xff0c;于它只允许在表的前端(front)进行删除操作&#xff0c;而在表的后端(rear)进行插入操作。通常队列可以分为顺序队列和链式队列两种实现&#xff0c;顺序队列顾名思义就是采用顺序存储&#xff0…

base64_encode() 和 base64_decode() 8bit图片通过网络传输

一、为什么要使用base64编码&#xff1f; Base64是一种基于64个可打印字符来表示二进制数据的表示方法。 有些网络传送渠道并不支持所有的字节&#xff0c;例如传统的邮件只支持可见字符的传送&#xff0c;像ASCII码的控制字符就 不能通过邮件传送。这样用途就受到了很大的限制…

图标圆角角度_UI设计中图标的规范及原则【附全套视频】

icon是一种图标格式&#xff0c;用于系统图标、软件图标等&#xff0c;这种图标扩展名为*.icon、*.ico。常见的软件或windows桌面上的那些图标一般都是ICON格式的。icon元素包括两个可选的子元素:small-icon子元素和large-icon子元素。文件名是Web应用归档文件(WAR)的根的相对路…

设计模式(十一):从文Finder中认识组合模式(Composite Pattern)

上一篇博客中我们从从电影院中认识了"迭代器模式"(Iterator Pattern)&#xff0c;今天我们就从文件系统中来认识一下“组合模式”&#xff08;Composite Pattern&#xff09;。说到组合模式&#xff0c;在此我想聊一下在类图中有组合与聚合的关系&#xff0c;这两者都…

PHP7不能用string类名,解决thinkphp php7 Cannot use ‘String’ as class name as it is reserved...

我有一网站之前用php7运行thinkphp没有什么问题&#xff0c;但是最近发现开启验证码的时候发现有错误Cannot use String as class name as it is reserved在google baidu搜索了一下还是没有解决方法于是自己动手解决&#xff0c;看来我是第一个分享出来的人原因&#xff1a;有一…