ip2long-long2ip

WBOY
Lepaskan: 2016-07-29 09:14:45
asal
2715 orang telah melayarinya

一,需求原因

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

二,系统内置函数

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

例:

$ip=” 60.6.205.138”;

echo ip2long($ip);
Salin selepas log masuk

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

例:

$ip=”60.6.205.138”;

$ipInt=ip2long($ip);

echo long2ip($ipInt);
Salin selepas log masuk

三,常见的问题

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

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

    例:
$ip = "192.168.10.1":

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

echo $ip;
Salin selepas log masuk

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

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

    例:
$ip = '021.110.11.49';

$ip_int = ip2long($ip);

echo $ip."<br>";

echo $ip_int."<br>";

echo long2ip($ip_int);
Salin selepas log masuk

当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 intval return echo></count>';
Salin selepas log masuk

说明:

intval把变量转换为整数类型

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

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

$ip = '060.06.205.138'; 

function ipToInt($ip){

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

return (intval($iparr[0]';

$ipInt = ipToInt($ip);

echo $ipInt.'<br>';

echo long2ip($ipInt);
Salin selepas log masuk

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

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

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


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

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan