PHP中的ip2long()是否等于MySQL中的INET_ATON()函数


Is ip2long() in PHP equal to INET_ATON() function in MySQL?

如果我们有如下ip地址:

127.0.0.1

这两个函数是将ip地址转换为相同的数字,还是它们不同,结果不同?

它们几乎完全相同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

因此,当地址转换到+21474833647以上时,将进行环绕并给出负值。

ip2long("254.254.254.254"); // -16843010

此链接对此进行了详细描述。

简而言之,没有,但这个函数是:

function ipv4touint($ipv4){
    return sprintf('%u',ip2long($ipv4));
}