Steve TENZA
Web développeur
Facebook Me contacter Cookie
Télécharger
Noter:
3.7/5 (3)
Ajouté/Modifié le 2023-12-21
Visionné 4560 fois

Vérifier la disponibilité d'un domaine en PHP (sans API)

Description

Mon script vous fournit une méthode pratique pour vérifier la disponibilité d'un domaine sans avoir besoin d'une API tiers.

J'utilise les fonctions PHP intégrées gethostbyname et checkdnsrr pour effectuer ces vérifications, ce qui peut être utile dans des cas simples et pour des besoins légers, car il est important de noter que cette approche n'est pas infaillible, la disponibilité d'un domaine peut être impactée par plusieurs facteurs tels que les configurations du serveur DNS ou les erreurs temporaires du site à vérifié.

Dans le cas d'une application professionnelle, l'utilisation d'une API de vérification de domaine spécialisée peut offrir une fiabilité supérieure et une gamme plus étendue de fonctionnalités, ceci dit, pour des scénarios plus simples, le script actuel est une solution pratique et légère !

Domaine à vérifier

Partons du principe qu'un utilisateur puisse fournir un domaine depuis un formulaire, il peut le proposer via un input HTML sous la forme d'une URL.
// Mettons www.c2script.com pour l'exemple.
$input_domaine = 'www.c2script.com';

Extraction du domaine de 1er niveau

J'ai codé le script pour qu'il accepte un domaine avec ou sans le préfixe "http://" ou "https://", ainsi qu'avec ou sans le sous-domaine "www." mais aussi d'autres sous-domaines potentiels et une nombre infini de points qu'il les séparent.

J'utilise une expression régulière pour extraire le domaine principal de l'URL fourni par l'utilisateur et m'assure également que le format du domaine est valide/correct à ce que j'attends.
if(!preg_match("#^(?:https?://(?:www\.)?)?(?:[-\w.]+\.)?(?<principal>[-\w]+\.[a-z]+)$#", $input_domaine, $matching))
exit("Domaine incorrect");

Préparation du domaine avec un point à la fin

Le point est nécessaire pour gethostbyname et checkdnsrr afin de demander d'arrêter la recherche au caractère qui le précède (dans notre cas, à ".com"), sinon il va rechercher c2script.com.votre-domaine.tld.
$domaine = $matching['principal'];
$domain_with_dot = $domaine . '.';

1ère vérification de la disponibilité avec gethostbyname

Si le domaine est disponible, gethostbyname renvoi ce qu'on lui a passé (ici $domain_with_dot), si il renvoi une adresse IP (donc != $domain_with_dot), le domaine n'est pas disponible.
//on met echo en array, pour l'afficher plus tard avec un saut de ligne entre chaque informations qu'on va récupérer
$echo = [];

if(gethostbyname($domain_with_dot) != $domain_with_dot){

$dispo = false;
$echo[] = "Domaine non disponible avec <i>gethostbyname</i>";

}else{

$echo[] = "Domaine disponible avec <i>gethostbyname</i>";

}

2ème vérification de disponibilité avec checkdnsrr

Si des enregistrements DNS sont trouvés, le domaine est considéré comme indisponible.

Seulement si $dispo est encore à true, on fait la vérification avec checkdnsrr pour avoir une sureté supplémentaire concernant la disponibilité, ceci afin d'économiser du temps de recherche et des ressources.

Pour la petit info, le "rr" à la fin du nom de la fonction signifie "Resource Record", soit "Check DNS RR".
Comprendre le nom des fonctions permet de s'en rappeler plus facilement. ✨

if($dispo){

// Lorsque vous mettez "ANY", la fonction check tous les types d'enregistrements.
// Rechercher avec "A" peut être plus efficace en termes de performances, vous pouvez rechercher seulement l'existence d'un enregistrement de type "A" pour savoir si le domaine a une adresse IP. Le type "A" est généralement utilisé pour associer un domaine à une adresse IP.

if(checkdnsrr($domain_with_dot, "ANY") === true){

$dispo = false;
$echo[] = "Domaine non disponible avec <i>checkdnsrr</i>";

}else{

$echo[] = "Domaine disponible avec <i>checkdnsrr</i>";

}

}

On affiche les résultats

var_dump($domaine, $dispo);
echo implode('<br>', $echo);

Code final

//supposons que l'utilisateur puisse entrer un domaine
// $input_domaine = 'htto://wwww.c2script.com';
$input_domaine = 'www.c2script.com';

//vérification du domaine
//on peut le proposer avec ou sans http/https, et avec ou sans www.
//si le domaine proposé est avec un sous-domaine, on récupère seulement le domaine principal
//on fait une correspondance avec <principal> pour le trouver facilement dans notre array matching
if(!preg_match("#^(?:https?://(?:www\.)?)?(?:[-\w.]+\.)?(?<principal>[-\w]+\.[a-z]+)$#", $input_domaine, $matching))
exit("Domaine incorrect");

$domaine = $matching['principal'];

//le point est nécessaire pour demander d'arrêter la recherche au caractère qui le précède (dans notre cas, à .com), sinon il va rechercher c2script.com.votre-domaine.tld
$domain_with_dot = $domaine . '.';

//echo array, pour afficher plus tard les infos avec un saut de ligne
$echo = [];

$dispo = true;

if(gethostbyname($domain_with_dot) != $domain_with_dot){

$dispo = false;
$echo[] = "Domaine non disponible avec <i>gethostbyname</i>";

}else{

$echo[] = "Domaine disponible avec <i>gethostbyname</i>";

}

//seulement si $dispo est encore à true afin d'économiser du temps de recherche et des ressources
//fait la vérification avec checkdnsrr pour avoir une sureté supplémentaire concernant la disponibilité
if($dispo){

//vérifie si disponibilité avec checkdnsrr
if(checkdnsrr($domain_with_dot, "ANY") === true){
//DNS trouvé, domaine non disponible

$dispo = false;
$echo[] = "Domaine non disponible avec <i>checkdnsrr</i>";

}else{

$echo[] = "Domaine disponible avec <i>checkdnsrr</i>";

}

}

var_dump($domaine, $dispo);
echo implode('<br>', $echo);


J'espère que ce script gratuit vous sera utile dans vos projets.
Si vous souhaitez soutenir mon travail, un simple clic sur le bouton "Donner remercier" ci-dessous ou une note serait grandement apprécié. Merci pour votre générosité !
Votre réussite en ligne commence ici

Vous cherchez à pousser encore plus loin vos idées ou à les concrétiser avec un site internet sur mesure ? Je suis là pour vous aider ! Mon expérience en développement web est à votre disposition.

Que ce soit la création de votre site web pro ou l'apport de fonctionnalités avancées à votre projet, contactez-moi pour en discuter et avoir un devis gratuit personnalisé.

Mon objectif est de vous offrir des solutions sur mesure qui répondent à vos besoins, et votre vision associée à mon expertise donnera vie à votre projet web parfait. Contactez-moi aujourd'hui, je réponds en général en moins d'une heure :

Demander un devis
Réponse rapide !

Vous recherchez un script précis ?

Dites-moi ce dont vous avez besoin, je peux développer le script demandé et vous envoyer un mail dès qu'il est dispo !

🔔 Vous pouvez laisser votre mail pour recevoir les nouveaux scripts. Pas de pub, pas de tracas. Vous êtes libre de le supprimer à tout moment.

Je prends en compte toutes les demandes. Les idées les plus populaires passent en priorité et seront publiées dès qu'elles seront prêtes. 2842 demandes reçues.

Commentaires

Ajouter un commentaire

Commenter
Pseudo/Nom
Email
Message
Captcha
memo1memo2
Commenter
Ajoutez un commentaire, soyez le premier !

Retour à la liste des scripts

Un site à créer ?
Contactez-moi