พิจารณาใช้ https://github.com/jeremykendall/php-domain-parser เป็นทางเลือกที่ได้รับการปรับปรุง
TLDExtract
แยก gTLD หรือ ccTLD (โดเมนระดับบนสุดทั่วไปหรือรหัสประเทศ) ออกจากโดเมนที่จดทะเบียนและโดเมนย่อยของ URL อย่างถูกต้อง เช่น ตัวแยกวิเคราะห์โดเมน ตัวอย่างเช่น สมมติว่าคุณต้องการเพียงส่วนของ 'google' ของ 'http://www.google.com'
ทุกคนเข้าใจผิดเรื่องนี้ แยกบน '.' และการใช้ 2 องค์ประกอบสุดท้ายจะช่วยได้มากหากคุณคิดถึงโดเมนธรรมดาๆ เช่น .com ลองนึกถึงการแยกวิเคราะห์ http://forums.bbc.co.uk เช่น: วิธีการแยกแบบไร้เดียงสาด้านบนจะทำให้คุณ 'co' เป็นโดเมนและ 'uk' เป็น TLD แทนที่จะเป็น 'bbc' และ 'co.uk' ตามลำดับ .
ในทางกลับกัน TLDExtract
จะรู้ว่า gTLD และ ccTLD ทั้งหมดมีลักษณะอย่างไรโดยการค้นหารายการที่มีอยู่ในปัจจุบันตามรายการส่วนต่อท้ายสาธารณะ ดังนั้น เมื่อระบุ URL แล้ว ระบบจะรู้โดเมนย่อยจากโดเมน และโดเมนจากรหัสประเทศ
$ result = tld_extract ( ' http://forums.news.cnn.com/ ' );
var_dump ( $ result );
object ( LayerShifter TLDExtract Result) #34 (3) {
[ " subdomain " :" LayerShifter TLDExtract Result " :private]=>
string(11) " forums.news"
[ " hostname " :" LayerShifter TLDExtract Result " :private]=>
string(3) " cnn"
[ " suffix " :" LayerShifter TLDExtract Result " :private]=>
string(3) " com"
}
Result
ใช้อินเทอร์เฟซ ArrayAccess เพื่อให้คุณสามารถเข้าถึงผลลัพธ์ได้อย่างง่ายดาย
var_dump ( $ result [ ' subdomain ' ]);
string ( 11 ) " forums.news "
var_dump ( $ result [ ' hostname ' ]);
string ( 3 ) " cnn "
var_dump ( $ result [ ' suffix ' ]);
string ( 3 ) " com "
นอกจากนี้คุณยังสามารถแปลงผลลัพธ์เป็น JSON ได้อีกด้วย
var_dump ( $ result -> toJson ());
string ( 54 ) " { " subdomain": " forums.news " ,"hostname":"cnn","suffix":"com"}"
แพคเกจนี้สอดคล้องกับ PSR-1, PSR-2, PSR-4 หากคุณสังเกตเห็นการกำกับดูแลการปฏิบัติตามกฎระเบียบ โปรดส่งแพตช์ผ่านทางคำขอดึง
ไม่ TLDExtract
ใช้ฐานข้อมูลจาก TLDDatabase ที่สร้างจาก Public Suffix List และอัพเดทเป็นประจำ มันไม่ได้ทำการร้องขอ HTTP ใด ๆ เพื่อแยกวิเคราะห์หรือตรวจสอบความถูกต้องของโดเมน
รองรับ PHP เวอร์ชันต่อไปนี้
ผ่านทางผู้แต่ง
$ composer require layershifter/tld-extract
Class LayerShifter TLDExtract Result
มีวิธีการบางอย่างที่ใช้งานได้:
$ extract = new LayerShifter TLDExtract Extract ();
# For domain 'shop.github.com'
$ result = $ extract -> parse ( ' shop.github.com ' );
$ result -> getFullHost (); // will return (string) 'shop.github.com'
$ result -> getRegistrableDomain (); // will return (string) 'github.com'
$ result -> isValidDomain (); // will return (bool) true
$ result -> isIp (); // will return (bool) false
# For IP '192.168.0.1'
$ result = $ extract -> parse ( ' 192.168.0.1 ' );
$ result -> getFullHost (); // will return (string) '192.168.0.1'
$ result -> getRegistrableDomain (); // will return null
$ result -> isValidDomain (); // will return (bool) false
$ result -> isIp (); // will return (bool) true
ตามค่าเริ่มต้น แพ็คเกจใช้ฐานข้อมูลจากแพ็คเกจ TLDDatabase แต่คุณสามารถแทนที่พฤติกรรมนี้ได้ง่ายๆ:
new LayerShifter TLDExtract Extract ( __DIR__ . ' /cache/mydatabase.php ' );
สำหรับรายละเอียดเพิ่มเติมและวิธีการอัพเดตฐานข้อมูล TLDDatabase
ตามค่าเริ่มต้นหลังจากแยกวิเคราะห์ คุณจะได้รับออบเจ็กต์ของคลาส LayerShifter TLDExtract Result
แต่บางครั้งคุณต้องการวิธีการของตัวเองหรือฟังก์ชันเพิ่มเติม
คุณสามารถสร้างคลาสของตัวเองที่ใช้ LayerShifter TLDExtract ResultInterface
และใช้เป็นผลลัพธ์ในการแยกวิเคราะห์
class CustomResult implements LayerShifter TLDExtract ResultInterface {}
new LayerShifter TLDExtract Extract ( null , CustomResult::class);
แพ็คเกจมีการแยกวิเคราะห์สามโหมด:
เพื่อรักษาความเข้ากันได้กับแพ็คเกจแนวคิดรายการคำต่อท้ายสาธารณะจะทำงานในโหมดเหล่านี้ทั้งหมดตามค่าเริ่มต้น แต่คุณสามารถเปลี่ยนลักษณะการทำงานนี้ได้อย่างง่ายดาย:
use LayerShifter TLDExtract Extract ;
new Extract ( null , null , Extract:: MODE_ALLOW_ICANN );
new Extract ( null , null , Extract:: MODE_ALLOW_PRIVATE );
new Extract ( null , null , Extract:: MODE_ALLOW_NOT_EXISTING_SUFFIXES );
new Extract ( null , null , Extract:: MODE_ALLOW_ICANN | Extract:: MODE_ALLOW_PRIVATE );
โปรดดู CHANGELOG สำหรับข้อมูลเพิ่มเติมว่ามีอะไรเปลี่ยนแปลงเมื่อเร็วๆ นี้
$ composer test
โปรดดูรายละเอียดที่การมีส่วนร่วมและการปฏิบัติ
ไลบรารีนี้เผยแพร่ภายใต้ลิขสิทธิ์ Apache 2.0 โปรดดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม