PHPackages                             mesour/dns-checker - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. mesour/dns-checker

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

mesour/dns-checker
==================

DNS checker written in PHP for check and compare real DNS records for domain.

v0.3.0(2y ago)2024.6k—6.3%8BSD-3-ClausePHPPHP &gt;=8.0

Since Jan 20Pushed 2y ago2 watchersCompare

[ Source](https://github.com/mesour/dns-checker)[ Packagist](https://packagist.org/packages/mesour/dns-checker)[ GitHub Sponsors](https://github.com/mesour)[ RSS](/packages/mesour-dns-checker/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (6)Dependencies (10)Versions (8)Used By (0)

Mesour DNS checker
==================

[](#mesour-dns-checker)

- [Author](http://mesour.com)
- DNS checker written in PHP for check and compare real DNS records for domain.
- In `AaaaDnsRecord` is IPv6 compressed to short format.
- Problem with PHP warning: `dns_get_record(): A temporary server error occurred.` is resolved.

Install
=======

[](#install)

- With [Composer](https://getcomposer.org)

    ```
      composer require mesour/dns-checker

    ```
- Or download source from [GitHub](https://github.com/mesour/dns-checker/releases)

Usage
=====

[](#usage)

1. Create instance `\Mesour\DnsChecker\Providers\DnsRecordProvider`:

```
$provider = new \Mesour\DnsChecker\Providers\DnsRecordProvider();
```

2. Create instance `\Mesour\DnsChecker\DnsChecker`:

```
$checker = new \Mesour\DnsChecker\DnsChecker($provider);
```

3. Get DNS record set (second parameter `type` have same values as parameter `type` for [PHP function dns\_get\_record()](http://php.net/manual/en/function.dns-get-record.php).):

```
$dnsRecordSet = $checker->getDnsRecordSet('example.com', DNS_A + DNS_AAAA);
```

`$dnsRecordSet` contains for example:

```
Mesour\DnsChecker\DnsRecordSet
   dnsRecords private => array (3)
   |  0 => Mesour\DnsChecker\MxRecord #86b8
   |  |  priority private => 40
   |  |  target private => "alt3.aspmx.l.example.com" (24)
   |  |  type private => "MX" (2)
   |  |  name private => "example.com" (11)
   |  |  content private => "40 alt3.aspmx.l.example.com" (27)
   |  |  ttl private => 404
   |  1 => Mesour\DnsChecker\MxRecord #5a7b
   |  |  priority private => 50
   |  |  target private => "alt4.aspmx.l.example.com" (24)
   |  |  type private => "MX" (2)
   |  |  name private => "example.com" (11)
   |  |  content private => "50 alt4.aspmx.l.example.com" (27)
   |  |  ttl private => 404

```

DnsRecordSet
============

[](#dnsrecordset)

- Implements `\ArrayAccess`, `\Countable` and `\Iterator`.

Check if exist domain record:

```
$dnsRecord = new \Mesour\DnsChecker\Records\DnsRecord('NS', 'example.com', 'ns3.example.com');
Assert::true($dnsRecordSet->hasRecord($dnsRecord));
```

Get matching DNS record:

```
$dnsRecord = new \Mesour\DnsChecker\Records\DnsRecord('AAAA', 'example.com', '2a00:4444:5555:6666::200e');
$nsDnsRecord = $dnsRecordSet->getMatchingRecord($dnsRecord);
```

More information in one DnsRecordSet
------------------------------------

[](#more-information-in-one-dnsrecordset)

```
$request = new DnsRecordRequest();
$request->addFilter('example.com');
$request->addFilter('www.example.com', DNS_CNAME);
// ... more lines

/** @var \Mesour\DnsChecker\DnsChecker $checker */
/** @var \Mesour\DnsChecker\DnsRecordSet $records */
$records = $checker->getDnsRecordSetFromRequest($request);
```

Difference between two DnsRecordSets
====================================

[](#difference-between-two-dnsrecordsets)

```
$factory = new DnsRecordSetDiffFactory();

$expected = $this->createExpectedDnsRecordSet();

$checker = new DnsChecker(new DnsRecordProvider());
$recordSet = $checker->getDnsRecordSet('example.com');

/** @var Mesour\DnsChecker\Diffs\DnsRecordSetDiff $diff */
$diff = $factory->createDiff($expected, $recordSet);

Assert::true($diff->hasDifferentRecord());

$diffs = $diff->getDiffs();

Assert::count(5, $diffs);
Assert::type(Mesour\DnsChecker\Diffs\DnsRecordDiff::class, $diffs[0]);

/** @var DnsRecordDiff $recordDiff */
$recordDiff = $diffs[4];
Assert::true($recordDiff->isDifferent());

// Can use this for get array of similar records with same type
$recordDiff->getSimilarRecords();
```

Mock DNS record provider
------------------------

[](#mock-dns-record-provider)

For mock DNS provider your tests can use `Mesour\DnsChecker\StaticDnsRecordProvider` or `Mesour\DnsChecker\ArrayDnsRecordProvider`.

Values are as return values of [PHP function dns\_get\_record()](http://php.net/manual/en/function.dns-get-record.php).

```
$provider = new \Mesour\DnsChecker\Providers\StaticDnsRecordProvider([
	[
    	'host' => 'example.com',
    	'class' => 'IN',
    	'ttl' => 34,
    	'type' => 'A',
    	'ip' => '216.58.201.78',
    ],
]);
```

Development
===========

[](#development)

Run command `make qa`

PhpUnit
-------

[](#phpunit)

Run command `make phpunit`

PHP Stan
--------

[](#php-stan)

Run command `make phpstan`

Code style
----------

[](#code-style)

Run command `make cs`

Run command `make csf` for fix

Parallel lint
-------------

[](#parallel-lint)

Run command `make lint`

###  Health Score

37

—

LowBetter than 83% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity37

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~392 days

Recently: every ~490 days

Total

6

Last Release

1079d ago

PHP version history (3 changes)v0.1.0PHP &gt;=7.0

v0.2.0PHP &gt;=7.1

v0.3.0PHP &gt;=8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/a73dd796d901629d3063ead8ab7e11cf2bd80c5c691feacd029354b01b068d88?d=identicon)[mesour](/maintainers/mesour)

---

Top Contributors

[![mesour](https://avatars.githubusercontent.com/u/1161897?v=4)](https://github.com/mesour "mesour (37 commits)")

---

Tags

diffdnsdns-checkerdns-diffdnsdns checker

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/mesour-dns-checker/health.svg)

```
[![Health](https://phpackages.com/badges/mesour-dns-checker/health.svg)](https://phpackages.com/packages/mesour-dns-checker)
```

###  Alternatives

[daverandom/libdns

DNS protocol implementation written in pure PHP

16339.1M9](/packages/daverandom-libdns)[spatie/dns

Retrieve DNS records

6082.3M17](/packages/spatie-dns)[orrison/cumulus

Import DNS records from Laravel Vapor into Cloudflare

3817.1k](/packages/orrison-cumulus)[astrotomic/laravel-dns

327.4k](/packages/astrotomic-laravel-dns)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
