[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 名前解決の関数を持っています。
- gethostbyname()
- gethostbyaddr()
- gethostbyaddrl()
- getmxrr()
- checkdnsrr()
しかし、現時点では、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)