首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非完整IP地址和ip2long()

非完整IP地址和ip2long()
EN

Stack Overflow用户
提问于 2013-05-28 09:24:13
回答 3查看 390关注 0票数 1

我结结巴巴地回答了以下问题:

“以下代码的输出是什么?”

代码语言:javascript
复制
echo long2ip(ip2long("127.0.255"));

正确答案是:"127.0.255.0“。

虽然在php手册中提到了这种行为,甚至在德文手册中也有一个例子,这似乎是合乎逻辑的,但我也有问题要复制它。

我的代码产生以下输出:

代码语言:javascript
复制
echo ip2long("127.0.255"); // outputs: FALSE
echo long2ip(ip2long("127.0.255")); //outputs: 0.0.0.0

我在上面测试的机器有以下软件版本:

  • PHP5.3.3-7+Suhosin修补程序压缩15
  • Suhosin贴片0.9.9.1

我的任何同事都不能给我一个准确的解释。我们唯一的假设是,这可能是与苏林补丁的冲突。

如果你有解释,请告诉我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-28 12:12:09

我已经查找了ip2long的PHP源代码。

如果inet_pton可用,则使用inet_pton。否则使用inet_addr。

inet_pton检查,如果ip具有ddd.ddd的格式,则返回0。pton.3.html

如果使用inet_addr,则丢失的ip部分将被0填充。

票数 1
EN

Stack Overflow用户

发布于 2013-05-28 09:29:06

PHP手册还声明(http://de1.php.net/manual/en/function.ip2long.php):

Changelog 版本描述 5.2.10在此版本之前,ip2long()有时会返回一个有效的数字,即使传递的值不是(IPv4) Internet协议虚位地址。

因此,由于您使用的版本比5.2.9更新,它不再工作了。

更新:,但是它可能在某些系统上工作,因为依赖ip2long函数的inet_addr C函数并不是C标准的一部分:每个系统都可能有自己的实现。其中一些实现对于无效的IP地址具有回退模式。你不应该依赖这一点,因为大多数unix衍生产品没有这样的退路。

票数 1
EN

Stack Overflow用户

发布于 2013-05-28 09:29:22

如果您使用ip2long进行IP验证,我建议使用filter_var($ip, FILTER_VALIDATE_IP

PHP过滤器验证

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16788425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档