【PHP8.x】checkdnsrr関数の使い方

作成日: 更新日:

checkdnsrr関数は、指定されたホスト名やドメイン名に対し、特定のDNS(Domain Name System)レコードの存在を確認するPHP関数です。この関数は、ドメインの有効性チェック、メールサーバーのMXレコード、IPアドレスを示すA/AAAAレコードなど、特定のDNSサービスの設定有無を判別するために使われます。

利用時は、確認したいドメイン名と検索するレコードタイプ(例: MX, A, AAAAなど)を引数に指定します。例えば、メールアドレスのドメインが実際にメールを受信できるか、すなわちMXレコードの有無を確認する際などに有用です。レコードが見つかればtrueを返し、見つからなかった場合やネットワークエラーの場合はfalseを返します。これにより、プログラムはDNS情報に基づいた処理を実行できます。

本関数はPHPのネットワーク関連拡張機能の一部として提供され、ウェブアプリケーションでのドメイン情報検証に役立ちます。ただし、外部のDNSサーバーへの問い合わせが必要なため、この関数を利用する実行環境はインターネットに接続されている必要があります。

基本的な使い方

構文(syntax)

<?php
if (checkdnsrr("example.com", "MX")) {
    echo "example.com には MX レコードがあります。\n";
} else {
    echo "example.com には MX レコードが見つかりません。\n";
}
?>

引数(parameters)

string $hostname, string $type = "MX"

  • string $hostname: DNSレコードの存在を確認したいホスト名またはIPアドレスを指定します。
  • string $type = "MX": 確認したいDNSレコードの種類を指定します。デフォルトは "MX"(メール交換レコード)です。使用できる値には "A", "AAAA", "CNAME", "MX", "NS", "PTR", "SOA", "SRV", "TXT" などがあります。

戻り値(return)

bool

指定されたドメイン名がDNS(ドメインネームシステム)で指定されたレコードタイプ(A, MX, NS, SOA, PTR, CNAME, SRV, TXTなど)に対応しているかをチェックし、存在すればTRUE、存在しなければFALSEを返します。

サンプルコード

checkdnsrr関数でDNSレコードの存在を確認する

<?php

/**
 * 指定されたホスト名に指定されたDNSレコードが存在するか確認するサンプルコード
 */
function checkDnsRecordExample(string $hostname, string $type = "MX"): bool
{
    // checkdnsrr() 関数を使用して、DNSレコードの存在を確認します。
    $result = checkdnsrr($hostname, $type);

    // 結果を返します。
    return $result;
}

// 例: example.com の MX レコードを確認
$hostname = "example.com";
$type = "MX";

if (checkDnsRecordExample($hostname, $type)) {
    echo "{$hostname}{$type} レコードが存在します。\n";
} else {
    echo "{$hostname}{$type} レコードが存在しません。\n";
}

// 例: google.com の A レコードを確認
$hostname = "google.com";
$type = "A";

if (checkDnsRecordExample($hostname, $type)) {
    echo "{$hostname}{$type} レコードが存在します。\n";
} else {
    echo "{$hostname}{$type} レコードが存在しません。\n";
}

このサンプルコードは、PHPのcheckdnsrr関数を使用して、指定されたホスト名に特定のDNSレコードが存在するかどうかを確認する方法を示しています。checkdnsrr関数は、第一引数に確認したいホスト名(文字列)を、第二引数にDNSレコードのタイプ(文字列、デフォルトは"MX")を受け取ります。この関数は、指定されたホスト名に指定されたタイプのDNSレコードが存在する場合にtrue、存在しない場合にfalseを返します。

サンプルコードでは、checkDnsRecordExampleという関数を定義し、checkdnsrr関数をラップしています。この関数は、ホスト名とレコードタイプを引数に取り、checkdnsrr関数の結果をそのまま返します。

コードの例では、まずexample.comのMXレコードの存在を確認しています。次に、google.comのAレコードの存在を確認しています。それぞれの結果に応じて、メッセージを出力することで、checkdnsrr関数の動作を分かりやすく示しています。システムエンジニアを目指す初心者の方にとって、DNSレコードの確認やネットワーク関連のトラブルシューティングに役立つでしょう。checkdnsrr関数を利用することで、Webサイトやメールサーバーなどの設定が正しく行われているかを確認できます。

checkdnsrr関数は、指定されたホスト名に特定のDNSレコードが存在するかを確認する関数です。この関数を使う際、いくつか注意点があります。まず、$hostnameには有効なホスト名を指定する必要があります。存在しないホスト名を指定すると、意図しない結果になる可能性があります。次に、$type引数には、確認したいDNSレコードのタイプ(例: "A", "MX", "TXT")を指定します。デフォルトは"MX"レコードの確認です。大文字小文字は区別されます。この関数は、DNSサーバーに問い合わせを行うため、ネットワーク環境によっては時間がかかる場合があります。また、DNSサーバーの設定によっては、結果が異なる場合があるので注意が必要です。さらに、この関数は、ホストの存在を保証するものではありません。あくまでDNSレコードの存在を確認するものです。

PHP checkdnsrr でDNSレコードを確認する

<?php

/**
 * 指定されたホスト名に対して、指定されたDNSレコードが存在するか確認するサンプルコード
 *
 * @param string $hostname 確認するホスト名
 * @param string $type DNSレコードタイプ (デフォルトは MX)
 * @return bool DNSレコードが存在する場合は true、存在しない場合は false
 */
function checkDnsRecord(string $hostname, string $type = "MX"): bool
{
    // checkdnsrr() 関数を使用してDNSレコードの存在を確認
    $result = checkdnsrr($hostname, $type);

    // 結果を返す
    return $result;
}

// 使用例
$hostname = 'example.com';

// MXレコードの存在を確認
if (checkDnsRecord($hostname, "MX")) {
    echo "MXレコードが存在します。\n";
} else {
    echo "MXレコードは存在しません。\n";
}

// Aレコードの存在を確認
if (checkDnsRecord($hostname, "A")) {
    echo "Aレコードが存在します。\n";
} else {
    echo "Aレコードは存在しません。\n";
}

PHPのcheckdnsrr関数は、指定されたホスト名に対して、特定のDNSレコードが存在するかどうかを確認するために使用します。この関数は、システムエンジニアを目指す初心者にとって、DNS関連の問題を診断したり、設定を検証したりする際に役立ちます。

checkdnsrr関数は、2つの引数を受け取ります。最初の引数$hostnameは、確認したいホスト名を文字列で指定します。例えば、"example.com"のように指定します。2番目の引数$typeは、確認するDNSレコードのタイプを指定します。デフォルトでは"MX"(メール交換レコード)が設定されていますが、"A"(アドレスレコード)、"TXT"(テキストレコード)など、他のレコードタイプも指定可能です。

関数はbool型の値を返します。指定されたホスト名に対して、指定されたタイプのDNSレコードが存在する場合はtrueを、存在しない場合はfalseを返します。

サンプルコードでは、checkDnsRecordという関数を作成し、checkdnsrr関数をラップしています。checkDnsRecord関数は、ホスト名とレコードタイプを受け取り、checkdnsrr関数を使ってDNSレコードの存在を確認し、その結果を返します。

使用例では、"example.com"というホスト名に対して、まずMXレコードの存在を確認し、次にAレコードの存在を確認しています。結果に応じて、対応するメッセージを出力します。この例を通じて、checkdnsrr関数がどのように使用されるかを具体的に理解できます。この関数を使うことで、DNSレコードの設定が正しく行われているかをプログラムから確認できます。

checkdnsrr関数は、指定されたホスト名に特定のDNSレコードが存在するかどうかを確認します。この関数を使用する際の注意点として、まず、hostname引数には有効なホスト名を指定する必要があります。不正な形式のホスト名を指定すると、予期せぬ結果になる可能性があります。また、type引数には、"A", "MX", "CNAME"などのDNSレコードタイプを指定します。デフォルトは"MX"レコードの確認です。この関数は、DNSサーバーに問い合わせを行うため、ネットワーク環境によっては時間がかかる場合があります。タイムアウト設定などを検討すると良いでしょう。さらに、この関数は、PHPの設定によっては利用できない場合があります。php.iniファイルでallow_url_fopenが有効になっているか確認してください。もし有効になっていない場合は、エラーが発生する可能性があります。

【PHP8.x】checkdnsrr関数の使い方 | いっしー@Webエンジニア