DNS
v4.3.0
該項目的目的是在PHP中創建DNS記錄的抽像對象表示。該項目由代表DNS對象的各種類(例如Zone , ResourceRecord和各種RData類型)組成,將綁定樣式文本文件轉換為PHP對象的解析器,以及創建美學上令人愉悅的綁定記錄的構建器。
該庫可以解析和編碼DNS消息,使開發人員可以在純PHP中創建DNS客戶端/服務器平台。
require_once ' /path/to/vendor/autoload.php ' ;
use Badcow DNS Classes ;
use Badcow DNS Zone ;
use Badcow DNS Rdata Factory ;
use Badcow DNS ResourceRecord ;
use Badcow DNS AlignedBuilder ;
$ zone = new Zone ( ' example.com. ' );
$ zone -> setDefaultTtl ( 3600 );
$ soa = new ResourceRecord ;
$ soa -> setName ( ' @ ' );
$ soa -> setClass (Classes:: INTERNET );
$ soa -> setRdata (Factory:: Soa (
' example.com. ' ,
' post.example.com. ' ,
' 2014110501 ' ,
3600 ,
14400 ,
604800 ,
3600
));
$ ns1 = new ResourceRecord ;
$ ns1 -> setName ( ' @ ' );
$ ns1 -> setClass (Classes:: INTERNET );
$ ns1 -> setRdata (Factory:: Ns ( ' ns1.nameserver.com. ' ));
$ ns2 = new ResourceRecord ;
$ ns2 -> setName ( ' @ ' );
$ ns2 -> setClass (Classes:: INTERNET );
$ ns2 -> setRdata (Factory:: Ns ( ' ns2.nameserver.com. ' ));
$ a = new ResourceRecord ;
$ a -> setName ( ' sub.domain ' );
$ a -> setRdata (Factory:: A ( ' 192.168.1.42 ' ));
$ a -> setComment ( ' This is a local ip. ' );
$ a6 = new ResourceRecord ;
$ a6 -> setName ( ' ipv6.domain ' );
$ a6 -> setRdata (Factory:: Aaaa ( ' ::1 ' ));
$ a6 -> setComment ( ' This is an IPv6 domain. ' );
$ mx1 = new ResourceRecord ;
$ mx1 -> setName ( ' @ ' );
$ mx1 -> setRdata (Factory:: Mx ( 10 , ' mail-gw1.example.net. ' ));
$ mx2 = new ResourceRecord ;
$ mx2 -> setName ( ' @ ' );
$ mx2 -> setRdata (Factory:: Mx ( 20 , ' mail-gw2.example.net. ' ));
$ mx3 = new ResourceRecord ;
$ mx3 -> setName ( ' @ ' );
$ mx3 -> setRdata (Factory:: Mx ( 30 , ' mail-gw3.example.net. ' ));
$ zone -> addResourceRecord ( $ soa );
$ zone -> addResourceRecord ( $ mx2 );
$ zone -> addResourceRecord ( $ ns1 );
$ zone -> addResourceRecord ( $ mx3 );
$ zone -> addResourceRecord ( $ a );
$ zone -> addResourceRecord ( $ a6 );
$ zone -> addResourceRecord ( $ ns2 );
$ zone -> addResourceRecord ( $ mx1 );
$ builder = new AlignedBuilder ();
echo $ builder -> build ( $ zone ); $ ORIGIN example.com.
$ TTL 3600
@ IN SOA (
example.com. ; MNAME
post.example.com. ; RNAME
2014110501 ; SERIAL
3600 ; REFRESH
14400 ; RETRY
604800 ; EXPIRE
3600 ; MINIMUM
)
; NS RECORDS
@ IN NS ns1.nameserver.com.
@ IN NS ns2.nameserver.com.
; A RECORDS
sub.domain A 192.168.1.42; This is a local ip.
; AAAA RECORDS
ipv6.domain AAAA ::1; This is an IPv6 domain.
; MX RECORDS
@ MX 10 mail-gw1.example.net.
@ MX 20 mail-gw2.example.net.
@ MX 30 mail-gw3.example.net.以上是AlignedBuilder的一個示例,它創建了在美學上更令人愉悅的記錄。您也可以使用平面ZoneBuilder ,其輸出在下面:
. . .
echo ZoneBuilder:: build ( $ zone ); $ ORIGIN example.com.
$ TTL 3600
@ IN SOA example.com. post.example.com. 2014110501 3600 14400 604800 3600
@ MX 20 mail-gw2.example.net.
@ IN NS ns1.nameserver.com.
@ MX 30 mail-gw3.example.net.
sub.domain A 192.168.1.42; This is a local ip.
ipv6.domain AAAA ::1; This is an IPv6 domain.
@ IN NS ns2.nameserver.com.
@ MX 10 mail-gw1.example.net.支持所有無處不在的DNS類型。有關支持類型的完整詳細信息,請參見文檔。
綁定記錄可以使用BadcowDNSParserParser分解為PHP對象
$ file = file_get_contents ( ' /path/to/example.com.txt ' );
$ zone = Badcow DNS Parser Parser:: parse ( ' example.com. ' , $ file ); //Badcow Zone Object那樣簡單。
可以在文檔中找到更多示例