我gethostbyname()
用来获取应用程序中域的 IP 地址。
在某些情况下,还会检查诸如“50.9.49”之类的无效地址。
echo gethostbyname('50.9.49'); // returns 50.9.0.49
在这种情况下gethostbyname
应该返回 false 或未修改的无效 ip 地址。但是函数返回修改后的 IP 地址50.9.0.49
。
看起来像 php 中的一个错误。快速修复似乎是之前检查无效的数字地址,还有其他建议吗?
我gethostbyname()
用来获取应用程序中域的 IP 地址。
在某些情况下,还会检查诸如“50.9.49”之类的无效地址。
echo gethostbyname('50.9.49'); // returns 50.9.0.49
在这种情况下gethostbyname
应该返回 false 或未修改的无效 ip 地址。但是函数返回修改后的 IP 地址50.9.0.49
。
看起来像 php 中的一个错误。快速修复似乎是之前检查无效的数字地址,还有其他建议吗?
PHPgethostbyname
实际上使用底层操作系统的结果gethostbyname
,例如来自 Linuxnetdb.h
或 Windows 的结果Winsock2.h
。真正产生返回值的是那些函数,而不是 PHP。
/* {{{ php_gethostbyname */
static char *php_gethostbyname(char *name)
{
struct hostent *hp;
struct in_addr in;
hp = gethostbyname(name);
if (!hp || !*(hp->h_addr_list)) {
return estrdup(name);
}
memcpy(&in.s_addr, *(hp->h_addr_list), sizeof(in.s_addr));
return estrdup(inet_ntoa(in));
}
/* }}} */
似乎这是 IP 如何工作的未记录功能。正如您问题的评论中提到的那样,ping 50.9.49
在 Windows 中实际上是 pings 50.9.0.49
。如果您输入一个地址a.b.d
,它会自动插入一个零作为c
:a.b.0.d
。如果您只是输入a.d
,则会插入两个零:a.0.0.d
。
这已经在 Windows 7 和 Debian Linux 上进行了测试。