background image

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

系统函数

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."<br />";
echo $ip_int."<br />";
echo long2ip($ip_int);

输出:
210.110.11.49
-764540111
210.110.11.49
从结果可以看到,

ip 与整型可以通过函数完成。

系统函数小

bug

这中

bug 网上一搜都是,大意说的是 ip 某段加个前导 0,先来看看这个 bug 实例

代码如下
$ip = '210.110.011.49';
$ip_int = ip2long($ip);
echo $ip."<br />";
echo $ip_int."<br />";
echo long2ip($ip_int);

输出:
210.110.011.49
-764540623
210.110.9.49
转换结果不匹配,我们试着在

ip 第一段数字前加前导 0,再看看

代码如下
$ip = '021.110.11.49';
$ip_int = ip2long($ip);
echo $ip."<br />";
echo $ip_int."<br />";