PHPresolver - a simple dns resolver library for php SourceForge Logo
project page | download | browse CVS | reference | demonstration

[English]

ニュース

2003/06/11

おひさしぶりです。まだプロジェクトは生きてます…。パッチを送ってくれたり有用なコメントをくださった方、ありがとうございました。まもなく新しいバージョンをリリースする予定ですので、ご期待ください。

2002/08/26

最近気づいたのですが、Eric Kilfoil さんによる Net_DNS が、PEAR レポジトリにインポートされたようです。
もし、ダイナミック DNS アップデートなどの機能をお求めでしたら、試してみてはいかがでしょうか。

What is PHPresolver?

PHPresolver は LGPL ライセンスの DNS リゾルバライブラリで、純粋に PHP スクリプトだけで書かれています。オブジェクト指向インターフェイスと、プラットホーム非依存が特長です。

サンプルコード: MX レコードを取得する.
<?php

    require_once( "DNS.php" );

    $mailaddr = "example@example.com";

    list( $dummy, $domain ) = explode( '@', $mailaddr );

    $resolver = new DNSResolver( "ns.example.com" );
    $dnsname = & DNSName::newFromString( $domain );
    $answer = & $resolver->sendQuery(
        new DNSQuery(
            new DNSRecord( $dnsname, DNS_RECORDTYPE_MX )
        )
    );
    if( !$answer || !$answer->rec_answer ) {
        print "DNS resolution failed.";
    } else {
        $i = count( $answer->rec_answer );
        while( --$i >= 0 ) {
            if( $answer->rec_answer[$i]->type == DNS_RECORDTYPE_MX ) {
                $record = & $answer->rec_answer[$i];
                $mxname = $record->specific_fields['exchange'];
                print "mail exchange: ";
                print $mxname->getCanonicalName();
                print "<BR>\n";
            }
        }
    }
?>

開発の背景

PHP(3 or 4) は 次のような DNS 名前解決の関数を持っています。
しかし、現時点では、getmxrr() も checkdnsrr() も (cygwinに対して)ネイティブ Win32 版(NTでlibbind.dll を利用する場合を除く) や BeOS 版ではサポートされていません。
というのは、これらのPHP関数をビルドするのに必要な DNS リゾルバの実装がこれらのプラットフォームでは欠如しているからなのです。
Win32 や BeOS の PHP を利用していたなら、「なんで getmxrr() is not supported ワーニングが出るんだ?」と疑問に思いつつも、電子メールアドレスが有効かどうかチェックするコードをあきらめたことがあるかもしれません。
まあ、でも、お分かりのように、将来の PHP のバージョンで、そういった関数がサポートされれば、このライブラリは必要なくなるのですが…。

必要なもの

はじめよう

インストール

単に DNS.php を適当な場所に置くだけです。

テスト

もし、PHP を HTTP サーバとともにお使いなら、dnstest.php を試してみましょう。

注意: 必要に応じて、 dnstest.php の始めにある require_once 文を、ライブラリをインストールした場所に書き換えてください。

資料

RFC1034: DOMAIN NAMES - CONCEPTS AND FACILITIES
RFC1035: DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION
RFC1886: DNS Extensions to support IP version 6
RFC2874: DNS Extensions to Support IPv6 Address Aggregation and Renumbering

AAAA RR v.s. A6 RR 論争

RFC3363: Representing Internet Protocol version 6 (IPv6) Addresses in the Domain Name System (DNS)
RFC3364: Tradeoffs in Domain Name System (DNS) Support for Internet Protocol version 6 (IPv6)