首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP: gethostbyname错误

PHP: gethostbyname错误
EN

Stack Overflow用户
提问于 2012-05-17 01:14:00
回答 2查看 1.2K关注 0票数 6

我正在使用gethostbyname()获取应用程序中域的ip地址。

在某些情况下,还会检查诸如'50.9.49‘之类的无效地址。

代码语言:javascript
复制
echo gethostbyname('50.9.49'); // returns 50.9.0.49

在这种情况下,gethostbyname应返回false或未修改的无效ip地址。但是,这些函数返回修改后的IP地址50.9.0.49

看起来像是php中的一个bug。最快的解决办法似乎是在之前检查无效的数字地址,还有其他建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-17 01:38:21

PHP的gethostbyname实际上uses底层操作系统的gethostbyname的结果,例如,来自Linux的netdb.h或Windows的Winsock2.h。真正产生返回值的是这些函数,而不是PHP。

代码语言:javascript
复制
/* {{{ 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));
}
/* }}} */
票数 7
EN

Stack Overflow用户

发布于 2012-05-17 01:39:13

这似乎是is如何工作的一个未记录的特性。正如你的问题的评论中提到的,Windows中的ping 50.9.49实际上是ping 50.9.0.49的。如果您输入一个地址作为a.b.d,它会自动插入一个零作为ca.b.0.d。如果只输入a.d,则会插入两个零:a.0.0.d

这已经在Windows7和Debian Linux上进行了测试。

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

https://stackoverflow.com/questions/10623408

复制
相关文章

相似问题

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