6

gethostbyname()アプリケーションのドメインのIPアドレスを取得するために使用しています。

場合によっては、「50.9.49」などの無効なアドレスもチェックされます。

echo gethostbyname('50.9.49'); // returns 50.9.0.49

この場合gethostbyname、falseまたは変更されていない無効なIPアドレスを返す必要があります。ただし、関数は変更されたIPアドレスを返します50.9.0.49

PHPのバグのようです。簡単な解決策は、以前に無効な数値アドレスをチェックすることのようですが、他に何か提案はありますか?

4

2 に答える 2

7

PHPは、gethostbyname実際には、基盤となるOSの結果を使用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));
}
/* }}} */
于 2012-05-16T17:38:21.220 に答える
3

これは、IPがどのように機能するかについての文書化されていない機能のようです。あなたの質問へのコメントで述べたように、ping 50.9.49Windowsでは実際にpingを実行し50.9.0.49ます。としてアドレスを入力するとa.b.d、:として自動的にゼロが挿入されcますa.b.0.d。を入力するだけa.dで、2つのゼロが挿入されますa.0.0.d

これは、Windows7とDebianLinuxの両方でテストされています。

于 2012-05-16T17:39:12.840 に答える