ZetCode

PHP checkdnsrr 函数

最后修改于 2025 年 4 月 4 日

PHP checkdnsrr 函数检查给定主机的 DNS 记录。 它对于验证域名和电子邮件地址很有用。

基本定义

checkdnsrr 检查指定主机是否存在 DNS 记录。 它可以验证不同的记录类型,如 MX、A、CNAME 等。

语法:checkdnsrr(string $host, string $type = "MX"): bool。 如果记录存在,则返回 true,否则返回 false。 需要 DNS 服务器访问。

基本电子邮件域名验证

此示例检查域名是否具有用于电子邮件验证的 MX 记录。

email_validation.php
<?php

declare(strict_types=1);

$domain = "example.com";
if (checkdnsrr($domain, "MX")) {
    echo "Domain $domain has valid MX records";
} else {
    echo "Domain $domain has no MX records";
}

这通过验证 MX 记录来检查域名是否可以接收电子邮件。 MX 记录对于服务器之间的电子邮件传递至关重要。

检查 A 记录

这演示了检查 A 记录以验证域名的 IP 解析。

a_record_check.php
<?php

declare(strict_types=1);

$host = "www.example.com";
if (checkdnsrr($host, "A")) {
    echo "$host resolves to an IP address";
} else {
    echo "$host doesn't resolve to an IP";
}

A 记录将主机名映射到 IP 地址。 此检查确认域名具有用于 Web 托管的正确 DNS 配置。

检查多种记录类型

此示例检查多种 DNS 记录类型以进行全面验证。

multi_record_check.php
<?php

declare(strict_types=1);

$domain = "example.com";
$checks = ["A", "MX", "TXT"];

foreach ($checks as $type) {
    $result = checkdnsrr($domain, $type) ? "exists" : "missing";
    echo "$type record: $result\n";
}

这通过验证多种记录类型来提供完整的 DNS 运行状况检查。 不同的记录类型用于域名配置中的不同目的。

电子邮件验证函数

这显示了一个使用 checkdnsrr 的完整电子邮件验证函数。

email_validator.php
<?php

declare(strict_types=1);

function validateEmailDomain($email) {

    $parts = explode('@', $email);
    if (count($parts) != 2) return false;
    
    $domain = $parts[1];
    return checkdnsrr($domain, "MX");
}

$email = "user@example.com";
echo validateEmailDomain($email) ? "Valid" : "Invalid";

此函数拆分电子邮件以提取域名,然后检查 MX 记录。 这比简单的格式验证更可靠。

检查 CNAME 记录

此示例验证主机名是否配置了 CNAME(别名)记录。

cname_check.php
<?php

declare(strict_types=1);

$host = "blog.example.com";
if (checkdnsrr($host, "CNAME")) {
    echo "$host is an alias (CNAME)";
} else {
    echo "$host is not a CNAME record";
}

CNAME 记录创建指向其他域名的别名。 此检查有助于识别主机名是否配置为别名。

最佳实践

来源

PHP checkdnsrr 文档

本教程介绍了 PHP checkdnsrr 函数,并提供了在各种场景中进行 DNS 记录验证的实用示例。

作者

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

列出 所有 PHP 网络函数