amphp / dns
Amp. 异步DNS解析
Requires
- php: >=8.1
- ext-filter: *
- amphp/amp: ^3
- amphp/byte-stream: ^2
- amphp/cache: ^2
- amphp/parser: ^1
- amphp/windows-registry: ^1.0.1
- daverandom/libdns: ^2.0.2
- revolt/event-loop: ^1 || ^0.2
Requires (Dev)
- amphp/php-cs-fixer-config: ^2
- amphp/phpunit-util: ^3
- phpunit/phpunit: ^9
- psalm/phar: 5.20
- 2.x-dev
- v2.2.0
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.1
- v2.0.0
- v2.0.0-beta.5
- v2.0.0-beta.4
- v2.0.0-beta.3
- v2.0.0-beta.2
- v2.0.0-beta.1
- 1.x-dev
- v1.2.3
- v1.2.2
- v1.2.1
- v1.2.0
- v1.1.0
- v1.0.0
- v0.9.x-dev
- v0.9.15
- v0.9.14
- v0.9.13
- v0.9.12
- v0.9.11
- v0.9.10
- v0.9.9
- v0.9.8
- v0.9.7
- v0.9.6
- v0.9.5
- v0.9.4
- v0.9.3
- v0.9.2
- v0.9.1
- v0.9.0
- v0.8.15
- v0.8.14
- v0.8.13
- v0.8.12
- v0.8.11
- v0.8.10
- v0.8.9
- v0.8.8
- v0.8.7
- v0.8.6
- v0.8.5
- v0.8.4
- v0.8.3
- v0.8.2
- v0.8.1
- v0.8.0
- v0.7.1
- v0.7.0
- v0.6.0
- v0.5.0
- v0.4.2
- v0.4.1
- v0.4.0
- v0.3.4
- v0.3.3
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.4
- v0.2.3
- v0.2.2
- v0.2.1
- v0.2.0
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1.0
- dev-ci
- dev-dep/libdns-v3
This package is auto-updated.
Last update: 2024-09-03 03:20:38 UTC
README
AMPHP 是一组针对 PHP 设计的事件驱动库,考虑到纤维和并发性。 amphp/dns
提供主机名到 IP 地址的解析和查询特定 DNS 记录。
安装
此包可以作为 Composer 依赖项安装。
composer require amphp/dns
使用方法
配置
amphp/dns
会自动检测系统配置并使用它。在类 Unix 系统中,它读取 /etc/resolv.conf
并尊重名称服务器、超时和尝试的设置。在 Windows 中,它会查找 Windows 注册表中的正确条目并使用列出的名称服务器。您可以将自定义的 ConfigLoader
实例传递给 Rfc1035StubResolver
以加载另一个配置,例如静态配置。
它在 Unix 和 Windows 系统上尊重系统主机文件,因此可以在像 Docker 这样的具有命名容器的环境中正常工作。
该包使用全局默认解析器,可以通过 Amp\Dns\resolver()
访问和更改。如果提供了除 null
以外的参数,则解析器用作全局实例。
通常不需要更改解析器。如果您想为某个特定的请求使用自定义配置,可以创建一个新的解析器实例并使用它而不是更改全局实例。
主机名到 IP 解析
Amp\Dns\resolve
提供主机名到 IP 地址的解析。默认情况下,它返回一个包含 IPv4 和 IPv6 地址的数组。可以通过传递第二个参数并指定相应的类型来限制返回的 IP 地址类型。
// Example without type restriction. Will return IPv4 and / or IPv6 addresses. // What's returned depends on what's available for the given hostname. /** @var Amp\Dns\DnsRecord[] $records */ $records = Amp\Dns\resolve("github.com");
// Example with type restriction. Will throw an exception if there are no A records. /** @var Amp\Dns\DnsRecord[] $records */ $records = Amp\Dns\resolve("github.com", Amp\Dns\DnsRecord::A);
自定义查询
Amp\Dns\query
支持其他各种 DNS 记录类型,如 MX
、PTR
或 TXT
。它自动重写传递给 PTR
查询的 IP 地址。
/** @var Amp\Dns\DnsRecord[] $records */ $records = Amp\Dns\query("google.com", Amp\Dns\DnsRecord::MX);
/** @var Amp\Dns\DnsRecord[] $records */ $records = Amp\Dns\query("8.8.8.8", Amp\Dns\DnsRecord::PTR);
缓存
默认情况下,Rfc1035StubResolver
使用 Amp\Cache\LocalCache
缓存响应。您可以通过创建自定义的 Rfc1035StubResolver
实例并将其通过 Amp\Dns\resolver()
设置来设置任何其他 Amp\Cache\Cache
实现,但通常是不必要的。如果您有很多非常短运行的脚本,您可能需要考虑使用带有缓存的本地 DNS 解析器而不是设置自定义缓存实现,例如 dnsmasq
。
重新加载配置
Rfc1035StubResolver
(该包默认提供的解析器)默认情况下会缓存 /etc/resolv.conf
/ Windows 注册表中的配置以及读取的主机文件。如果您希望重新加载它们,可以设置一个周期性定时器,请求后台重新加载配置。
EventLoop::repeat(600, function () use ($resolver) { Amp\Dns\dnsResolver()->reloadConfig(); });
注意 上述代码依赖于解析器没有被更改。
reloadConfig
是Rfc1035StubResolver
的特定功能,而不是Resolver
接口的一部分。
示例
<?php require __DIR__ . '/examples/_bootstrap.php'; $githubIpv4 = Amp\Dns\resolve("github.com", Dns\Record::A); pretty_print_records("github.com", $githubIpv4); $firstGoogleResult = Amp\Future\awaitFirst([ Amp\async(fn() => Amp\Dns\resolve("google.com", Dns\Record::A)), Amp\async(fn() => Amp\Dns\resolve("google.com", Dns\Record::AAAA)), ]); pretty_print_records("google.com", $firstGoogleResult); $combinedGoogleResult = Amp\Dns\resolve("google.com"); pretty_print_records("google.com", $combinedGoogleResult); $googleMx = Amp\Dns\query("google.com", Amp\Dns\DnsRecord::MX); pretty_print_records("google.com", $googleMx);