NETCREATESBLOGネットクリエイツの公式ブログ

IPv6なWindowsでgethostbyaddr()が使えない

わけあってIIS7でPHPを使おうと思いPHP Version 5.2.9-2のWindowsバイナリをダウンロードしてきて設定したのですが、gethostbyaddr()関数を使ったスクリプトで下記のエラーが出ることに気がつきました。

PHP Warning: gethostbyaddr() [function.gethostbyaddr]: Address is not in a.b.c.d form in・・・

引数が「a.b.c.d」という形式じゃないよというエラーなのですが、IPv6でアクセスしたのだから形式が異なって当然です。(IPv6アドレスはコロン(:)で区切りますからね。)

gethostbyaddr()はIPアドレスからホスト名を調べる関数なのですが、同様にIPv6で利用しているCentOS(Linux)上のPHPでは正常に使えているのです。

 

まさかWindowsバイナリだけPHPの「IPv6 Support」がdisabled(無効)になってるんじゃないかと思い、早速、phpinfo()関数でPHPの設定状況を確認したところ、IPv6 Supportはenabledでした。

結局、PHP BugsでWindowsバイナリではなぜかIPv6でgethostbyaddr()が使えないことと、Version. 5.3以上のWindowsバイナリではIPv6でgethostbyaddr()関数が使えることを知った次第です。

もうVersion.5.2では修正されないのでしょうかね・・・。

 

IPv6アドレスは逆引きが設定されていない場合も多いので、とりあえずIPv6アドレスが来たらgethostbyaddr()を使わないよう、スクリプトのソースを書き換えました。

$host = getenv(“REMOTE_ADDR”);
if ($host AND !strpos($host, “:”)) $host = gethostbyaddr($host);

 

インターネット接続サービスやネットワーク機器などインフラのIPv6対応はよく聞きますが、WebサービスなどアプリケーションのIPv6対応はまだまだ情報が少ないです。

“卵が先か、鶏が先か”ではないですけど、インフラに載るコンテンツの部分でもIPv6を普及していきたいですね。

「IPv6で何ができるの?」と言われて、踊るひろゆきが見れるよ」だけでは寂しいので(笑

トラックバック(0)

このブログ記事に対するトラックバックURL: https://netcreates.jp/blog/2009/05/ipv6windowsgethostbyaddr.html/trackback