SilvarCode Domain Parser is a robust and efficient PHP library for parsing and validating domain names using the Public Suffix List.
It supports complex TLD structures and wildcard suffixes, making it suitable for both general-purpose and enterprise-level domain validation.
- ✅ Parses registrable domains from full hostnames
- 🔍 Extracts subdomain and subdomain hierarchy
- 🌐 Supports wildcard and multi-level TLDs (e.g., *.k12.ak.us,*.sch.uk)
- 📥 Uses the official Public Suffix List
- 🧠 Configurable in-memory caching
- 🛠️ Custom suffix injection for internal/private networks
- PHP 8.2 or higher
composer require silvarcode/domain-parserYou can create a new instance of the DomainParser class with optional memory caching enabled and provide custom suffixes if needed:
| Parameter | Type | Description | 
|---|---|---|
| memoryCache | bool | Whether to load the suffix set into memory for improved performance | 
| suffixSet | array | An optional list of custom suffixes (e.g., for internal domains) | 
use SilvarCode\DomainParser\Parser\DomainParser;
// Instantiate parser with memory cache enabled
$parser = new DomainParser(true);
// Instantiate parser with memory cache and custom suffixes
$parser2 = new DomainParser(true, ['com.internal']);
$checkHost1 = 'sub2.sub1.example.com';
$checkHost2 = 'sub2.sub1.example.com.internal';
// Show parsing results for checkHost1 using $parser
$parser->showResult([
    'tld' => $parser->tld($checkHost1),
    'domain' => $parser->getRegistrableDomain($checkHost1),
    'subdomain' => $parser->getSubdomain($checkHost1),
    'subdomains' => $parser->getSubdomains($checkHost1),
]);
// Show parsing results for checkHost2 using $parser
$parser->showResult([
    'tld' => $parser->tld($checkHost2),
    'domain' => $parser->getRegistrableDomain($checkHost2),
    'subdomain' => $parser->getSubdomain($checkHost2),
    'subdomains' => $parser->getSubdomains($checkHost2),
]);
// Show parsing results for checkHost2 using $parser2 with custom suffixes
$parser2->showResult([
    'tld' => $parser2->tld($checkHost2),
    'domain' => $parser2->getRegistrableDomain($checkHost2),
    'subdomain' => $parser2->getSubdomain($checkHost2),
    'subdomains' => $parser2->getSubdomains($checkHost2),
]);If you’ve defined the CLI entry point in composer.json like this:
"bin": [
  "bin/check.php"
],
"scripts": {
  "check-domain": "bin/check.php"
}
You can run domain checks directly from the terminal:
composer check-domain sub2.sub1.example.comOutput:
Host: sub2.sub1.example.com
Domain: example.com
Subdomain: sub2
Subdomains:
  - sub2
  - sub1We’ve published an in-depth blog post on our website that covers the design, features, and practical usage of the SilvarCode Domain Parser.
It’s a great resource if you want to understand the package better or see real-world examples.
👉 Read the full blog post here
Feel free to share your feedback or questions in the GitHub issues or discussions!
MIT License
© 2025 SILVARCODE LTD
Author: Marcus Ribeiro (mds@silvarcode.com)
This software is provided "as is", without any warranty of any kind whatsoever.