好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHP中如何将ip地址转成十进制数 - php高级应用

PHP中如何将ip地址转成十进制数

ip地址转成十进制数是根据的公式算出来的:74×256^3+30×256^2+10×256+243 = 1243482867或者说分别将IP地址的四位数字化成十六进制,将得到的十六进制去掉\"小数点\"后再化为十进制即可.

PHP 中如何将ip地址转成十进制数呢?现在PHP中有很多时候都会用到ip地址,但是这个ip地址获取的时候都不是10进制的,那么PHP中如何将ip地址转成十进制数就是我们比较头疼的事情了,下面两种方法是我整理处理来相对比较简单的IP地址转成十进制数的方法,希望能对大家有所帮助.

方法一,代码如下:

public   function  ipToLong(){            $ip  =  $_SERVER [ 'REMOTE_ADDR' ];            $ip  =  explode ( '.' ,  $ip );            $ip  =  array_reverse ( $ip ); //数组反转             $r  = 0;            for ( $i =0, $j = count ( $ip );  $i < $j ;  $i ++){                $r  +=  $ip [ $i ] * pow(256,  $i );           }            $r  = sprintf( "%u" ,  $r );            echo   $r ;   } 

方法二,代码如下:

public   function  ipToLong(){            $ip  =  $_SERVER [ 'REMOTE_ADDR' ];            $ip  =  explode ( '.' , $ip );            $r  = ( $ip [0] << 24) | ( $ip [1] << 16) | ( $ip [2] << 8) |  $ip [3];            if ( $r  < 0)  $r  += 4294967296;            echo   $r  ;   } 

两个结果在本地服务器中的结果都是3232235877,运用的ip是192.168.1.101,我们用ping 192.168.1.101 和 ping 3232235877来进行检测,看是否一样.

可能有些朋友不知道mysql与php中都提供了IP转换十进制数函数,MySQL 提供了INET_ATON 和 INET_NTOA 两个函数来进行地址和整数之间的转换.

1. IP 由点分格式,转换为数字格式,代码如下:

mysql>  select  inet_aton( '127.0.0.1' );  + ------------------------+   | inet_aton( '127.0.0.1' ) |  + ------------------------+   | 2130706433 |   + ------------------------+   1 row  in   set  (0.00 sec) 

2. IP 由数字格式转换为点分格式,代码如下:

mysql>  select  inet_ntoa(2130706433);  + -----------------------+   | inet_ntoa(2130706433) |  + -----------------------+   | 127.0.0.1 |   + -----------------------+   1 row  in   set  (0.00 sec) 

php可直接使用ip2long函数,代码如下:

echo   ip2long ( '192.168.1.38' );  //输出:3232235814  

查看更多关于PHP中如何将ip地址转成十进制数 - php高级应用的详细内容...

  阅读:47次