ispserverfarm / domain-extraction-tool
一个PHP库,可以从URL或域名中准确提取有效顶级域名、注册域名和子域名
Requires
- php: ^5.3 || ^7.0
- ext-curl: *
This package is auto-updated.
Last update: 2024-09-13 03:53:51 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