Current Location: Home> Latest Articles> dns_get_record Function Basics and How to Use dns_get_record Efficiently in PHP

dns_get_record Function Basics and How to Use dns_get_record Efficiently in PHP

gitbox 2025-06-27

In PHP, the dns_get_record() function is a very practical tool used to retrieve DNS record information for a specified domain. This function provides developers the ability to query records directly from DNS servers and is widely applied in network diagnostics, mail system development, domain tool platforms, and other scenarios.

1. Basic Usage of dns_get_record

The function prototype of dns_get_record() is as follows:

<span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-title function_ invoke__">dns_get_record</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$hostname</span></span><span> [, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$type</span></span><span> = DNS_ANY [, </span><span><span class="hljs-keyword">array</span></span> &amp;</span><span><span class="hljs-variable">$authns</span></span><span> [, </span><span><span class="hljs-keyword">array</span></span> &amp;</span><span><span class="hljs-variable">$addtl</span></span><span> ]]] )
</span></span>
  • $hostname: The hostname to query (e.g., example.com).

  • $type: The DNS record type to query. Common types include:

    • DNS_A: IPv4 address

    • DNS_AAAA: IPv6 address

    • DNS_MX: Mail exchange records

    • DNS_CNAME: Canonical name (alias) records

    • DNS_TXT: Text records

    • DNS_NS: Name servers

    • DNS_SOA: Start of authority records

    • DNS_ANY: All types of records

  • $authns (optional): Returns authoritative name server information.

  • $addtl (optional): Returns additional records.

Example 1: Querying A Records

<span><span><span class="hljs-variable">$records</span></span><span> = </span><span><span class="hljs-title function_ invoke__">dns_get_record</span></span><span>(</span><span><span class="hljs-string">"example.com"</span></span><span>, DNS_A);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$records</span></span><span>);
</span></span>

This code will return an array containing all A records, with each element being an associative array including fields like host, type, ip, ttl, and more.

Example 2: Querying MX Records

<span><span><span class="hljs-variable">$mxRecords</span></span><span> = </span><span><span class="hljs-title function_ invoke__">dns_get_record</span></span><span>(</span><span><span class="hljs-string">"example.com"</span></span><span>, DNS_MX);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$mxRecords</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$record</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Mail Server: <span class="hljs-subst">{$record[&#039;target&#039;]}</span></span></span><span>, Priority: </span><span><span class="hljs-subst">{$record[&#039;pri&#039;]}</span></span><span>\n";
}
</span></span>

2. Tips for Efficiently Using dns_get_record

To use this function more efficiently, here are some practical tips and recommendations:

1. Specify Record Types Clearly

Avoid using DNS_ANY because it requests all types of records at once, which may cause unnecessary performance overhead. In practice, only query the record types you actually need.

2. Use Caching to Reduce Duplicate Queries

dns_get_record() does not cache results and performs a real DNS query every time it is called. If you need to repeatedly query the same domain during an application lifecycle, it is recommended to use a caching mechanism (such as APCu or Memcached) as shown below:

<span><span><span class="hljs-variable">$cacheKey</span></span><span> = </span><span><span class="hljs-string">&#039;dns_a_example_com&#039;</span></span><span>;
</span><span><span class="hljs-variable">$records</span></span><span> = </span><span><span class="hljs-title function_ invoke__">apcu_fetch</span></span><span>(</span><span><span class="hljs-variable">$cacheKey</span></span><span>);
<p></span>if ($records === </span>false) {<br>
</span>$records = </span>dns_get_record("example.com", DNS_A);<br>
</span>apcu_store($cacheKey, $records, 300); </span>// Cache for 5 minutes<br>
}<br>
</span></span>

3. Error Handling and Result Verification

dns_get_record() returns false if the query fails, so always check the return value in production environments:

<span><span><span class="hljs-variable">$records</span></span><span> = </span><span><span class="hljs-title function_ invoke__">dns_get_record</span></span>("example.com", DNS_MX);
</span><span><span class="hljs-keyword">if</span></span> ($records === false) {
    </span><span><span class="hljs-title function_ invoke__">error_log</span>("DNS query failed");
    </span><span><span class="hljs-comment">// Implement fallback or user notification as needed</span>
}
</span>

4. Analyze Fields of Different Record Types

Fields vary slightly between different DNS record types. For example, A records include an ip field, while MX records contain pri and target fields. Pay attention to these structural differences when processing data:

<span><span><span class="hljs-keyword">foreach</span></span> ($records as $record) {
    switch ($record['type']) {
        case 'A':
            echo "IP: " . $record['ip'] . "\n";
            break;
        case 'MX':
            echo "MX: " . $record['target'] . " (Priority: " . $record['pri'] . ")\n";
            break;
    }
}
</span></span>

3. Conclusion

PHP’s dns_get_record() function offers direct access to domain name resolution records, making it ideal for scenarios requiring dynamic DNS queries. By properly specifying query types, integrating caching mechanisms, and structurally parsing returned values, this function can be used more efficiently and securely in practical applications. When developing DNS-related features, dns_get_record() is an indispensable tool.