我正在使用gethostbyname()获取应用程序中域的ip地址。
在某些情况下,还会检查诸如'50.9.49‘之类的无效地址。
echo gethostbyname('50.9.49'); // returns 50.9.0.49在这种情况下,gethostbyname应返回false或未修改的无效ip地址。但是,这些函数返回修改后的IP地址50.9.0.49。
看起来像是php中的一个bug。最快的解决办法似乎是在之前检查无效的数字地址,还有其他建议吗?
发布于 2012-05-17 01:38:21
PHP的gethostbyname实际上uses底层操作系统的gethostbyname的结果,例如,来自Linux的netdb.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));
}
/* }}} */发布于 2012-05-17 01:39:13
这似乎是is如何工作的一个未记录的特性。正如你的问题的评论中提到的,Windows中的ping 50.9.49实际上是ping 50.9.0.49的。如果您输入一个地址作为a.b.d,它会自动插入一个零作为c:a.b.0.d。如果只输入a.d,则会插入两个零:a.0.0.d。
这已经在Windows7和Debian Linux上进行了测试。
https://stackoverflow.com/questions/10623408
复制相似问题