7

如果我们有一个如下的IP地址:

127.0.0.1

这两个函数是否将 ip 地址转换为相同的数字,或者它们是否不同并具有不同的结果?

4

2 回答 2

11

它们几乎完全相同。ip2long有时会返回负值,因为 PHP 使用有符号数进行估值,而 MySQL 使用无符号数。

两者都被评估为x*(2^24) + y*(2^16) + z*(2^8) + w*(2^0),但在 PHP 中,由于长期签名,某些 IP 地址将显示负值。

For signed long, the range is 
(2^31) - 1 = −2,147,483,648 to +2,147,483,647

因此,地址转换为 +2,147,483,647 时将环绕并给出负值。

ip2long("254.254.254.254"); // -16843010

链接详细描述了这一点。

于 2012-07-19T08:27:01.113 回答
7

简而言之,不,但这个功能是:

function ipv4touint($ipv4){
    return sprintf('%u',ip2long($ipv4));
}
于 2015-08-28T20:17:52.877 回答