考慮使用 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
它不會發出任何 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 許可證發布的。請參閱許可證文件以獲取更多資訊。