1.0.70 2022-06-10 12:41 UTC


Please use


TLDDatabase Build Status Code Climate codecov

Abstraction layer for Public Suffix List in PHP. Used by TLDExtract.

Main idea of library provide easy and fast access to actual database of Public Suffix List. Library always supplied with actual database.

This package is compliant with PSR-1, PSR-2, PSR-4. If you notice compliance oversights, please send a patch via pull request.


The following versions of PHP are supported:

  • PHP 5.5
  • PHP 5.6
  • PHP 7.0
  • PHP 7.1
  • HHVM

Basic usage

First of all you need load Store class.

$store = new \LayerShifter\TLDDatabase\Store();

For check existence of entry in database you need use isExists method:

$store->isExists(string $suffix) : bool;

$store->isExists('com'); // true
$store->isExists('comcom'); // false

Note: suffix must be without leading dot.

For get type of suffix you need use getType method:

For check existence of entry in database you need use isExists method:

$store->isExists(string $suffix): int;

$store->getType('com'); // \LayerShifter\TLDDatabase\Store::TYPE_ICANN = 1
$store->getType(''); // \LayerShifter\TLDDatabase\Store::TYPE_PRIVATE = 2

If entry doesn't exists method will throw exception, else it will return one of integer constants:

  • \LayerShifter\TLDDatabase\Store::TYPE_ICANN;
  • \LayerShifter\TLDDatabase\Store::TYPE_PRIVATE;

For direct check of type you can use isICANN or isPrivate method.

$store->isICANN(string $suffix) : bool;

$store->isICANN'com'); // true
$store->isICANN(''); // false

$store->isPrivate(string $suffix) : bool;

$store->isPrivate('com'); // false
$store->isPrivate(''); // true

Advanced usage

There are some cool features for developers.

Custom database

If you need operate with custom (non-packaged) database you simply need to add argument to Store constructor.

$store = new \LayerShifter\TLDDatabase\Store(string $filename);
$store = new \LayerShifter\TLDDatabase\Store(__DIR__ . '/cache/datatabase.php');


If you use custom database you need update it 😉 So, you can use Update class.

$update = new \LayerShifter\TLDDatabase\Update(string $filename);
$update = new \LayerShifter\TLDDatabase\Update(__DIR__ . '/cache/datatabase.php');



Basically library uses cURL adapter for updates, but you can use custom adapter.

class customHttp implements \LayerShifter\TLDDatabase\Http\AdapterInterface {
    public function get() {} 

$update = new \LayerShifter\TLDDatabase\Update(__DIR__ . '/cache/datatabase.php', 'customHttp');


Via Composer

$ composer require layershifter/tld-database


$ composer test


Library uses SemVer versioning. Where:

  • major makes incompatible API changes;
  • minor adds functionality, fully backwards-compatible;
  • patch is update of database from Public Suffix List.

Database has every week update cycle.


Please see CONTRIBUTING and CONDUCT for details.


This library is released under the Apache 2.0 license. Please see License File for more information.