จุดมุ่งหมายของโครงการนี้คือการสร้างการแสดงวัตถุที่เป็นนามธรรมของบันทึก DNS ใน PHP โครงการประกอบด้วยคลาสต่าง ๆ ที่เป็นตัวแทนของวัตถุ DNS (เช่น Zone , ResourceRecord และประเภท RData ที่หลากหลาย) ตัวแยกวิเคราะห์เพื่อแปลงไฟล์ข้อความสไตล์การผูกเป็นวัตถุ PHP และผู้สร้างเพื่อสร้างบันทึกการผูกที่สวยงาม
ไลบรารีสามารถแยกวิเคราะห์และเข้ารหัสข้อความ DNS ที่ทำให้นักพัฒนาสามารถสร้างแพลตฟอร์มไคลเอนต์/เซิร์ฟเวอร์ DNS ใน PHP บริสุทธิ์
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 ที่แพร่หลายทั้งหมดได้รับการสนับสนุน สำหรับรายละเอียดทั้งหมดเกี่ยวกับประเภทที่รองรับโปรดดูเอกสารประกอบ
บันทึกการผูกสามารถแยกวิเคราะห์ลงในวัตถุ PHP โดยใช้ BadcowDNSParserParser
$ file = file_get_contents ( ' /path/to/example.com.txt ' );
$ zone = Badcow DNS Parser Parser:: parse ( ' example.com. ' , $ file ); //Badcow Zone Objectเรียบง่ายอย่างนั้น
ตัวอย่างเพิ่มเติมสามารถพบได้ในเอกสาร