Tujuan dari proyek ini adalah untuk membuat representasi objek abstrak dari catatan DNS dalam PHP. Proyek ini terdiri dari berbagai kelas yang mewakili objek DNS (seperti Zone , ResourceRecord , dan berbagai jenis RData ), parser untuk mengonversi file teks gaya bind ke objek PHP, dan pembangun untuk membuat catatan Bind yang menyenangkan secara estetika.
Perpustakaan dapat menguraikan dan menyandikan pesan DNS yang memungkinkan pengembang untuk membuat platform klien/server DNS di PHP murni.
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. Di atas adalah contoh dari AlignedBuilder yang menciptakan catatan yang jauh lebih estetis. Anda juga dapat menggunakan Flat ZoneBuilder , yang outputnya di bawah ini:
. . .
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.Semua tipe DNS di mana -mana didukung. Untuk detail lengkap tentang jenis yang didukung, lihat dokumentasi.
Bind Records dapat diuraikan ke objek PHP menggunakan BadcowDNSParserParser
$ file = file_get_contents ( ' /path/to/example.com.txt ' );
$ zone = Badcow DNS Parser Parser:: parse ( ' example.com. ' , $ file ); //Badcow Zone ObjectSederhana seperti itu.
Lebih banyak contoh dapat ditemukan di dokumen