2012-07-19 58 views

回答

8

它们几乎完全一样。 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 

这个link描述了这个细节。

+0

如果我只给了第一个十月份,这些功能会接受吗?我需要它来转换GEOLocation国家。例如从127.0.0.1 127到int?谢谢。 – ALH 2012-07-19 08:40:45

+0

ip2long要求输入为包含(IPv4)互联网协议虚线地址的字符串。虽然INET_ATON()不会抛出错误,但它可能/不会返回正确的值。 '127'可以翻译为'127.0.0.0',而不是'127.0.0.1'。 [详细信息](http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_inet-aton) – 2012-07-19 08:50:37

+1

我已经在这里得到了我的答案:http://phpweby.com/软件/ ip2country – ALH 2012-07-19 08:54:20

2
总之

,没有,不过这个功能是:

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

我会解释为什么这是一个正确的答案。在接受的答案中提到,在32位平台上'ip2long'可以返回负数。 sprintf技巧会将负数转化为正确的数字。顺便说一句,它是从PHP手册推荐的解决方法。 – Stalinko 2016-11-02 05:24:49

相关问题