فكر في استخدام https://github.com/jeremykendall/php-domain-parser كبديل يتم الحفاظ عليه.
يقوم TLDExtract
بفصل نطاق gTLD أو ccTLD (نطاق المستوى الأعلى العام أو رمز البلد) بدقة عن النطاق المسجل والنطاقات الفرعية لعنوان URL، على سبيل المثال محلل النطاق. على سبيل المثال، لنفترض أنك تريد فقط الجزء "google" من "http://www.google.com".
الجميع يفهم هذا الخطأ. الانقسام على '.' وأخذ العنصرين الأخيرين يقطع شوطًا طويلًا فقط إذا كنت تفكر في نطاقات .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 التي تم إنشاؤها من قائمة اللواحق العامة ويتم تحديثها بانتظام. ولا يقدم أي طلبات HTTP لتحليل المجال أو التحقق من صحته.
الإصدارات التالية من PHP مدعومة.
عبر الملحن
$ composer require layershifter/tld-extract
تحتوي الفئة 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
افتراضيًا، تستخدم الحزمة قاعدة بيانات من حزمة TDDatabase، ولكن يمكنك تجاوز هذا السلوك ببساطة:
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 );
الرجاء مراجعة سجل التغيير لمزيد من المعلومات عما تغير مؤخرًا.
$ composer test
يرجى الاطلاع على المساهمة والسلوك للحصول على التفاصيل.
تم إصدار هذه المكتبة بموجب ترخيص Apache 2.0. يرجى الاطلاع على ملف الترخيص لمزيد من المعلومات.