考虑使用 https://github.com/jeremykendall/php-domain-parser 作为维护的替代方案。
TLDExtract
准确地将 gTLD 或 ccTLD(通用或国家/地区代码顶级域)与 URL 的注册域和子域分开,例如域解析器。例如,假设您只需要“http://www.google.com”的“google”部分。
每个人都误解了这一点。在“.”上拆分仅当您考虑简单的例如 .com 域时,采用最后 2 个元素才会有很大帮助。以解析 http://forums.bbc.co.uk 为例:上面的简单拆分方法将为您提供“co”作为域名,“uk”作为 TLD,而不是分别为“bbc”和“co.uk” 。
另一方面, TLDExtract
通过根据公共后缀列表查找当前有效的 gTLD 和 ccTLD,了解所有 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
默认情况下,包使用 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 );
请参阅变更日志以了解最近更改的更多信息。
$ composer test
有关详细信息,请参阅贡献和行为。
该库是根据 Apache 2.0 许可证发布的。请参阅许可证文件以获取更多信息。