ZetCode

PHP dns_get_record 函数

最后修改于 2025 年 4 月 4 日

PHP dns_get_record 函数用于检索给定主机的 DNS 记录。它提供详细的 DNS 信息以供分析和验证。

基本定义

dns_get_record 获取与主机关联的 DNS 资源记录。它可以检索各种记录类型,如 A、MX、CNAME、TXT 等。

语法:dns_get_record(string $hostname, int $type = DNS_ANY, array &$authns = null, array &$addtl = null, bool $raw = false): array|false。成功返回记录数组,失败返回 false。

检索所有 DNS 记录

此示例显示如何获取域的所有 DNS 记录。

all_records.php
<?php

declare(strict_types=1);

$domain = "example.com";
$records = dns_get_record($domain);

echo "DNS records for $domain:\n";
print_r($records);

这将获取域的所有可用 DNS 记录。结果是一个包含所有记录类型的数组。每条记录都有特定于类型的字段。

获取特定记录类型

这演示了仅为域检索 MX(邮件交换)记录。

mx_records.php
<?php

declare(strict_types=1);

$domain = "example.com";
$mx_records = dns_get_record($domain, DNS_MX);

echo "MX records for $domain:\n";
foreach ($mx_records as $record) {
    echo "Priority: {$record['pri']}, Target: {$record['target']}\n";
}

MX 记录指定域的邮件服务器。此示例从每条 MX 记录中提取优先级和目标服务器。这对于电子邮件配置检查很有用。

检查 TXT 记录

此示例检索 TXT 记录,这些记录通常用于验证和 SPF。

txt_records.php
<?php

declare(strict_types=1);

$domain = "example.com";
$txt_records = dns_get_record($domain, DNS_TXT);

echo "TXT records for $domain:\n";
foreach ($txt_records as $record) {
    echo "TXT: {$record['txt']}\n";
}

TXT 记录包含任意文本数据。通常用于域名验证、SPF 记录和 DKIM 配置。此示例提取所有 TXT 条目。

获取 A 和 AAAA 记录

这显示了如何检索 IPv4 (A) 和 IPv6 (AAAA) 地址记录。

ip_records.php
<?php

declare(strict_types=1);

$host = "www.example.com";
$ip_records = dns_get_record($host, DNS_A + DNS_AAAA);

echo "IP records for $host:\n";
foreach ($ip_records as $record) {
    $ip = $record['type'] == 'A' ? $record['ip'] : $record['ipv6'];
    echo "{$record['type']}: $ip\n";
}

A 记录包含 IPv4 地址,AAAA 包含 IPv6 地址。此示例合并了这两种类型以获取与主机名关联的所有 IP 地址。这对于连接性测试很有用。

高级 DNS 分析

此示例使用权威名称服务器执行全面的 DNS 分析。

advanced_dns.php
<?php

declare(strict_types=1);

$domain = "example.com";
$authns = [];
$addtl = [];

$records = dns_get_record($domain, DNS_ALL, $authns, $addtl);

echo "Primary records:\n";
print_r($records);

echo "\nAuthoritative nameservers:\n";
print_r($authns);

echo "\nAdditional records:\n";
print_r($addtl);

这将检索所有记录以及权威名称服务器信息。$authns 参数返回 NS 记录。$addtl 包含其他相关记录。这对于深入的 DNS 故障排除很有用。

最佳实践

来源

PHP dns_get_record 文档

本教程通过在各种场景下检索和分析 DNS 记录的实际示例,介绍了 PHP dns_get_record 函数。

作者

我叫 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出 所有 PHP 网络函数