ip2long-long2ip

php中文网
发布: 2016-07-29 09:14:45
原创
3038人浏览过

一,需求原因

Ip地址转换成整形存储,对于数据库优化来说是非常重要的。很多人把ip地址当做字符串类型来存储,当数据量庞大的时候,会很严重的消耗资源。而且,整形的索引速度要远远大于字符串的索引,所以就要用到ip转整形存储,使用时再将整形转回ip。php的ip转换,此文章讲解为ipv4,ipv6不做讲解。

二,系统内置函数

Ip转换整形用到的函数是:ip2long

例:

$ip=” 60.6.205.138”;

echo ip2long($ip);
登录后复制

整形转换ip用到的函数是:long2ip

例:

$ip=”60.6.205.138”;

$ipInt=ip2long($ip);

echo long2ip($ipInt);
登录后复制

三,常见的问题

1. 当ip地址比较大时,转换后的整数会有超过最大整形范围的情况。有符号整型最大值2147483647,当超过这个值就会变为负数。

    解决办法:写成$ip = bindec(decbin(ip2long($ip)));

    例:
$ip = "192.168.10.1":

$ip= bindec(decbin(ip2long($ip)));

echo $ip;
登录后复制

说明:decbin函数将十进制转换为二进制,bindec函数将二进制转换为整形。

2. 当一些ip地址有前缀0时,转换就会出错。

免费语音克隆
免费语音克隆

这是一个提供免费语音克隆服务的平台,用户只需上传或录制一段 5 秒以上的清晰语音样本,平台即可生成与用户声音高度一致的 AI 语音克隆。

免费语音克隆 207
查看详情 免费语音克隆
    例:
$ip = '021.110.11.49';

$ip_int = ip2long($ip);

echo $ip."<br />";

echo $ip_int."<br />";

echo long2ip($ip_int);
登录后复制

当ip转换为整形后,再转回ip时就会出错,ip地址与原来不符。原因为有前导0.

解决办法:

第一,因为ip转换整形是是以:第一段乘以256的三次方,第二段乘以256的平方,第三段乘以256、最后总和得出的结果。
$ip = '060.06.205.138';

function ipToInt($ip){

$iparr = explode('.',$ip);

$num = 0;

for($i=0;$i<count($iparr);$i++){

$num += intval($iparr[$i]) *pow(256,count($iparr)-($i+1));

}

return $num;

}

echo $ip.'<br />';
登录后复制

说明:

intval把变量转换为整数类型

pow(4,2)返回16,返回x的y次方

第二,通过位运算符解决。

$ip = '060.06.205.138'; 

function ipToInt($ip){

$iparr = explode('.',$ip);

return (intval($iparr[0]<<24))|(intval($iparr[1])<<16)|(intval($iparr[2])<<8)| (intval($iparr[3]));
} 
echo  $ip.'<br />';

$ipInt = ipToInt($ip);

echo $ipInt.'<br />';

echo long2ip($ipInt);
登录后复制

位运算符算法简单说就是,左移三位把当前数乘以2的三次方,左移两位乘以2的平方。右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定。

如果大家不理解,就按第一种方法来。

文章到此就结束了,如果大家有什么问题可以留言我们一起讨论。希望大家多动手练练,好加深印象,我们一起加油!


以上就介绍了ip2long-long2ip,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号