ispserverfarm/domain-extraction-tool

一个PHP库,可以从URL或域名中准确提取有效顶级域名、注册域名和子域名

v1.0.1 2018-12-12 11:56 UTC

README

域名提取工具(DET)是一个PHP库,可以从URL/DOMAIN中准确提取有效顶级域名、注册域名和子域名。例如,您可以使用它从“http://www.google.com””中获取域名“google”,或从“http://www.bbc.co.uk/””中获取TLD“co.uk”。

示例

<?php

require_once(__DIR__ . "/vendor/autoload.php");

use \ISPServerfarm\Library\TLDExtract\TLDExtract;

## Aufruf
$extract = new TLDExtract(true, __DIR__ . "/.cache");
$components = $extract($_GET['domain']);

## Ausgabe 
echo "<pre>";
echo "SUBDOMAIN: " . $components->subdomain . PHP_EOL; // www
echo "DOMAIN: " . $components->domain  . PHP_EOL;    // bbc
echo "TLD: " . $components->tld . PHP_EOL;       // co.uk
echo "</pre>";

?>

介绍

大多数人尝试通过在“.”上分割域名名,并假设最后一个组件是顶级域名,下一个组件是域名,以此类推。这在理论上是可行的——根据定义,域名名中的最后一个标签是顶级域名。然而,在实践中,你通常想要的是所谓的“公共后缀”或“有效顶级域名”——域名名下,互联网用户可以直接注册名称的部分。

例如,考虑一个URL如“http://www.darwinhigh.nt.edu.au/”。在这种情况下,“www”是子域名,“darwinhigh”是用户注册的域名(Darwin High School),而“nt.edu.au”是注册商控制的域名后缀。在点字符上分割将给出“au”作为TLD和“edu”作为域名,这通常不是你想要的。

另一方面,tldextract.php使用Mozilla维护的公共后缀列表来确定实际使用的gTLD、ccTLD和域名后缀,以及了解任何TLD或国家特定的例外。因此,它会给出正确的答案。

这个库是tldextract Python模块的PHP端口。

安装

下载tldextractphp.zip。解压缩归档并将tldextractphp目录移动到您的“库”(或等效)目录中。将此行添加到脚本顶部

foo@bar:~$ composer require ispserverfarm/domain-extraction-tool

要求

tldextract.php需要PHP 5.3或更高版本。它应该在PHP 5.2上也能工作,但我还没有测试过。

用法

$extract = new \ISPServerfarm\Library\TLDExtract\TLDExtract();
$components = $extract('www.bbc.co.uk');

echo $components->subdomain; // www
echo $components->domain;    // bbc
echo $components->tld;       // co.uk

或者,您还可以使用数组语法访问域名组件


$extract = new \ISPServerfarm\Library\TLDExtract\TLDExtract();
$components = $extract('domain.org.kg');

echo $components['tld']; // org.kg

请注意,tldextract()返回的值不是一个原生的PHP数组,所以大多数数组操作函数(例如implode())将不起作用。请使用toArray()方法将组件作为数组获取

$extract = new \ISPServerfarm\Library\TLDExtract\TLDExtract();
$components = $extract('www.bbc.co.uk');

print_r($components->toArray());

// 数组 ( [subdomain] => www [domain] => bbc [tld] => co.uk )

缓存和高级用法

当您第一次运行此库时,它将自动尝试从公共后缀列表下载最新的TLD列表。然后,它将在/path/to/tldextractphp//.tld_set中缓存该列表。缓存无限期有效,因此除非您手动删除.tld_set,否则它不会再次下载列表。

要防止此下载或选择缓存文件的另一个位置,您需要创建自己的TLDExtract实例。类的构造函数接受两个可选参数

$fetch – 将其设置为true以启用TLD列表下载,或设置为false以禁用。如果禁用,库将回退到使用包含的快照(.tld_set_snapshot)。$cacheFile – 为TLD列表缓存设置不同的文件名。示例

// 禁用实时TLD规则集更新。库将回退到使用包含的快照。

$extract = new \ISPServerfarm\Library\TLDExtract\TLDExtract(false);
$components = $extract('http://example.com');

// 将TLD缓存存储在其他位置。

$extract = new \ISPServerfarm\Library\TLDExtract\TLDExtract(true, '/path/to/alternative/cache_file');
$components = $extract('http://example.com');

运行测试

此库包含一组PHPUnit测试。要运行测试,打开您喜欢的命令行终端,导航到tldextractphp目录,然后输入

foo@bar:~$ phpunit ./tests

请注意,完整的测试套件可能需要一些时间来执行。这是因为除了正常的单元测试外,它还会尝试从公共后缀列表下载顶级域名列表,并验证本地快照是否是最新的。要跳过该测试,请运行以下命令

foo@bar:~$ cd tests
foo@bar:~$ phpunit ExtractorTest

来源: https://w-shadow.com/blog/2012/08/28/tldextract/