千家信息网

php中ip如何转int

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章给大家分享的是有关php中ip如何转int的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php ip转int的方法:1、创建一个PHP示例文件;2、定义一个ip地址
千家信息网最后更新 2025年11月07日php中ip如何转int

这篇文章给大家分享的是有关php中ip如何转int的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

php ip转int的方法:1、创建一个PHP示例文件;2、定义一个ip地址;3、通过PHP中的ip2long函数将ip地址转换整型即可。

本文操作环境:Windows7系统、PHP7.1版本、Dell G3电脑

php ip怎么转int?

PHP中IP地址与整型数字互相转换详解

本文介绍使用PHP函数ip2long与long2ip的使用,以及它们的BUG介绍,最后给出自己写的两个算法,需要的朋友可以参考下

IP转换成整型存储是数据库优化一大趋势,不少人目前存储IP时还在使用字符串类型存储,字符串索引比整型索引消耗资源很多,特别是表中数据量大的时候,以及求查询某一个ip段的数据,今天说的ip是指ip4,ip6不在本文范围内。

系统函数ip2long与long2ip
PHP中有内置函数ip2long可以将ip地址转换整型。

代码如下:

$ip = '210.110.11.49';echo ip2long($ip);

输出:

-764540111

输出的整型有负号是因为我们得到的结果是有符号整型,有符号整型最大值2147483647,要把结果转换为无符号型可以这么写

3530427185

使用long2ip把整型转换回ip地址

$ip = '210.110.11.49';$ip_int = ip2long($ip);echo $ip."
";echo $ip_int."
";echo long2ip($ip_int);

输出:

210.110.011.49-764540623210.110.9.49

转换结果不匹配,我们试着在ip第一段数字前加前导0,再看看

$ip = '021.110.11.49';$ip_int = ip2long($ip);echo $ip."
";echo $ip_int."
";echo long2ip($ip_int);

输出:

021.110.11.4929242449717.110.11.49

转换结果都出错。以上例子都是因为加了前导0后导致转换结果出错,连带逆转结果与原转换ip不匹配。

转换原理

目前有两个算法:
第一、第一段乘以256的三次方,第二段乘以256的平方,第三段乘以256、最后总和

$ip = '0210.110.11.49'; function ipToInt($ip){    $iparr = explode('.',$ip);    $num = 0;    for($i=0;$i';$ip_int = ipToInt($ip);echo $ip_int.'
';echo long2ip($ip_int);

输出:

0210.110.11.493530427185210.110.11.49

第二、通过位运算符

$ip = '0210.110.11.49'; function ipToInt($ip){    $iparr = explode('.',$ip);    return (intval($iparr[0]<<24))|(intval($iparr[1])<<16)|(intval($iparr[2])<<8)| (intval($iparr[3]));} echo  $ip.'
';$ip_int = ipToInt($ip);echo $ip_int.'
';echo long2ip($ip_int);

输出:

0210.110.11.49-764540111210.110.11.49

检测IP是否合法

第一、自己遍历检测

function check_ip($ip){    $iparr = explode('.',$ip);    foreach($iparr as $v){ if($v>255) return false; }    return true;} echo '210.285.11.49,';var_dump(check_ip('210.285.11.49'));echo '
';echo '210.205.11.49,';var_dump(check_ip('210.205.11.49'));[code]输出:[code]210.285.11.49,bool(false)210.205.11.49,bool(true)

第二、使用ip2long返回

function check_ip($ip){    if(ip2long($ip)) return true;    return false;} echo '210.285.11.49,';var_dump(check_ip('210.285.11.49'));echo '
';echo '210.205.11.49,';var_dump(check_ip('210.205.11.49'));

输出:

210.285.11.49,bool(false)210.205.11.49,bool(true)

后记

不少人把ip写库用ip2long转换存放int类型的字段中,但是,在不同的系统平台上,ip2long函数得到的值是不同的,因此可能造成在从数据库中读出数据逆转ip时用long2ip得到的ip与原ip不符合
如果是mysql可以使用mysql系统函数INET_ATON与INET_NTOA解决,或者使用bigint类型处理,要么自己写函数。

感谢各位的阅读!关于"php中ip如何转int"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

输出 函数 结果 地址 数据 系统 类型 存储 不同 两个 内容 前导 字符 字符串 数字 数据库 更多 符号 算法 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 怎么直接修改数据库 学网络安全书籍推荐 土豆服务器干什么的 腾讯软件开发的经常加班吗 网络安全知识教育观后感 天堂 服务器 网络安全意识普及的公众号 计算机网络技术有ps吗 梦幻西游手游再续前缘服务器在哪 软件开发的域名 qq游戏与服务器断开连接 长沙裕邦软件开发有限公司地址 正规网络技术咨询信息推荐 网络安全常见重要标准 数据库编写用什么技术 深信服的网络安全工程师认证 vb数据库列求和 计算机网络技术云计算平台运维 建立山水资源活力数据库 服务器安全性与品牌 服务器远程地址密码怎么管理 工业互联网信息化网络安全 花生壳 web服务器 数字媒体网络技术专业 mysql数据库原理介绍 信息安全与网络安全的就业哪个好 工业互联网东土科技股 连接jdbc怎么向数据库插入表 网络安全防护手段发展阶段 网络强国 网络安全图片
0