PHP - Code vérifier la disponibilité d'un nom de domaine

WRInaute accro
Salut les Wrinautes !!

Apres des mois a surfer sur WRI je sais que beaucoup d'entre vous attendent ce code avec impatience. Il a été testé chez OVH sur 1 serveur mutualisé et retourne sans erreur la disponibilité d'un nom de domaine avec les extentions suivantes:

.com .eu .fr .net .org .info .ca .biz .de me.uk co.uk org.uk

Sans plus attendre, voici le code:

Code:
<?php

$result = '';
$theNdd = trim($_POST['theNdd']);
$theExt = $_POST['theExt'];

if (!empty($theNdd) AND !empty($theExt)) {

       $theNdd = preg_replace(array( '/http:\/\/www\./',
                                     '/http:\/\//',
                                     '/www\./' ),
                              array( '', '', '') ,$theNdd);

       $theNdd = preg_replace(array( '/\.eu/',
                                     '/\.fr/',
                                     '/\.com/',
                                     '/\.net/',
                                     '/\.org/',
                                     '/\.info/',
                                     '/\.biz/',
                                     '/\.de/',
                                     '/\.me.uk/',
                                     '/\.co.uk/',
                                     '/\.org.uk/',
                                     '/\.ca/' ),
                              array( '', '', '', '', '', '', '', '', '', '', '', '') ,$theNdd);

        $theNdd = escapeshellcmd($theNdd);
        //on definit les case du tableau à vérifier
        $caseForVerif['.net']=7;
        $caseForVerif['.com']=7;
        $caseForVerif['.org']=0;
        $caseForVerif['.fr']=13;
        $caseForVerif['.ca']=5;
        $caseForVerif['.info']=0;
        $caseForVerif['.biz']=1;
        $caseForVerif['.de']=35;
        $caseForVerif['.eu']=50;
        $caseForVerif['.me.uk']=30;
        $caseForVerif['.co.uk']=30;
        $caseForVerif['.org.uk']=40;
        //on definit les phrase à vérifier dans ces cases
        $strForVerif['.com']='No match for "'.$theNdd.'.COM".';
        $strForVerif['.fr']='%% No entries found in the AFNIC Database.';
        $strForVerif['.net']='No match for "'.$theNdd.'.NET".';
        $strForVerif['.org']='NOT FOUND';
        $strForVerif['.ca']='';
        $strForVerif['.info']='NOT FOUND';
        $strForVerif['.biz']='';
        $strForVerif['.de']='';
        $strForVerif['.eu']='';
        $strForVerif['.me.uk']='';
        $strForVerif['.co.uk']='';
        $strForVerif['.org.uk']='';
        foreach($theExt as $anExt) {
            $myArray="";
            $anExt=escapeshellcmd($anExt);
            exec('whois '.$theNdd.$anExt,$myArray,$retval);
               $result.=(strtolower($myArray[$caseForVerif[$anExt]])==strtolower($strForVerif[$anExt]))?"->> ".$theNdd.$anExt." est libre<br/>":"->> ".$theNdd.$anExt." est d&eacute;j&agrave; r&eacute;serv&eacute;<br />";
        }
}
?>

<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" name="formVeirfNdd" enctype="multipart/form-data" method="post">
www.<input type="text" name="theNdd" value="<?php echo $theNdd; ?>" />
<input name="theExt[]" type="checkbox" value=".com" id="com" checked><label for="com">.com</label>
<input name="theExt[]" type="checkbox" value=".eu" id="eu"><label for="eu">.eu</label>
<input name="theExt[]" type="checkbox" value=".fr" id="fr"><label for="fr">.fr</label>
<input name="theExt[]" type="checkbox" value=".net" id="net"><label for="net">.net</label>
<input name="theExt[]" type="checkbox" value=".org" id="org"><label for="org">.org</label>
<input name="theExt[]" type="checkbox" value=".info" id="info"><label for="info">.info</label>
<input name="theExt[]" type="checkbox" value=".ca" id="ca"><label for="ca">.ca</label>
<input name="theExt[]" type="checkbox" value=".biz" id="biz"><label for="biz">.biz</label>
<input name="theExt[]" type="checkbox" value=".de" id="de"><label for="de">.de</label>
<input name="theExt[]" type="checkbox" value=".me.uk" id="me.uk"><label for="me.uk">me.uk</label>
<input name="theExt[]" type="checkbox" value=".co.uk" id="co.uk"><label for="co.uk">co.uk</label>
<input name="theExt[]" type="checkbox" value=".org.uk" id="org.uk"><label for="org.uk">org.uk</label>
<input type="submit" value="V&eacute;rifier">
</form>

<?php echo '<h3>'.$result.'</h3>';  ?>
 
WRInaute impliqué
Ben justement, exec c'est pas pour exécuter une appli du serveur??

Enfin, il y a un problème, c'est que c'est très long pour tester
 
WRInaute impliqué
J'ai fais un benchmark dessus, et voila ce que j'obtiens : 120.06942 secondes c'est pour cela que je voudrais comprendre le fonctionnement du whois pour savoir pourquoi j'ai autant de délais d'attente
 
WRInaute passionné
KOogar a dit:
http://www.cybwarrior.com/download/dl/php/whois/index.php
"Le nom de domaine phpsources.org semble libre" ...

ca ma l'air un peu foireux comme script..
en effet ça marche pas avec les .org
le serveur whois interrogé ne doit pas être le bon
 
Nouveau WRInaute
Bonjour,

Comment fait-on pour autoriser son propre serveur à pouvoir exécuter ces scripts whois ?

Depuis que je suis sur mon nouveau serveur, j'ai une erreur fsockopen :
Code:
Warning: fsockopen() [function.fsockopen]: unable to connect to whois.verisign-grs.com:43 (Connection timed out) in

Les techniciens me disent que c'est un problème de firewall et que c'est "mon" problème. Ils me l'avaient débloqué l'an passé sur le précédent serveur, mais rien à faire cette année. :evil: .
Donc où peut-on régler ce problème ?
Serveur privé sur Linux, avec plesk8.3
J'ai accès au serveur par Putty et Winscp.

Si vous savez comment faire, ce sera super sympa de m'aider !
 
WRInaute discret
Ton script fonctionne très bien, je le garde sous le coude, ça peut servir ;)

Merci KOogar pour cette contribution :)

ps: une petite reco pour toi ;)
 
WRInaute accro
efz a dit:
Ton script fonctionne très bien, je le garde sous le coude, ça peut servir ;)

Merci KOogar pour cette contribution :)

ps: une petite reco pour toi ;)

c'est pas moi qui mérite la reco mais le script ;)

Je viens de mettre la mouture définitive, j'ai préféré gérer les erreurs directement sans rapports.
Par exemple si le client met malencontreusement le "http://" dans la requete, au lieu de lui demander de l'enlever, le script le fait pour lui et le client peut continuer d'envoyer ses requêtes sans perdre de temps.
 
WRInaute discret
Le script est sympa sauf que le whois n'est pas un outil pour verifier la disponibilité d'un nom de domaine !
Pour verifier à coup sur la dispo d'un NDD, mieux vaut utiliser les API d'un registrar, c'est plus efficace et fiable ;)

MADdanny
 
WRInaute accro
tu peux nous donner le code dont tu parles ?

Les rapports ne changent pas comme ca, ce code avec le whois devrait rester actualisé pendant quelques années.
 
WRInaute passionné
J'ai trouvé l'API OVH. la spec est là : http://www.ovh.com/soapi/fr/domainCheck.xml
il suffit juste de renseigner son login et mot de passe OVH et remplacer example.com par le domaine a tester.
Ce script ne marche qu'en PHP5. il faut donc mettre une extension php5 ou ajouter la ligne suivante dans le .htaccess :
Code:
SetEnv PHP_VER 5
Code:
<?php
$soap = new SoapClient('http://www.ovh.com/soapi/ovh.wsdl');

//login
try {
	$login = "XXXXX-ovh";
	$password = "********";
	$session = $soap->login($login,$password,null);
} catch(SoapFault $fault) {
	echo "Error : ".$fault . '<br>';
}

//domainCheck
try {
	$result = $soap->domainCheck($session, 'example.com');
	foreach($result as $value) {
		echo $value->reason . '<br>';
	}
} catch(SoapFault $fault) {
	echo "Error : ".$fault . '<br>';
}

//logout
try {
 $result = $soap->logout($session);
} catch(SoapFault $fault) {
 echo "Error : ".$fault . '<br>';
}
?>
 
WRInaute accro
Nickel cet API d'OVH !!

toplien.fr:

domain owned by Ovh
This domain name is renewable
domain owned by Ovh

:D
 
WRInaute discret
Salut,

Cette méthode fonctionne bien, par contre, il peut il y avoir des restrictions au niveau des whois.
En effet, pour lutter contre le spam, les serveurs interrogés par le whois peuvent mettre en place un nombre maximum de requêtes par jour et par utilisateur/ip. Le problème se pose donc lorsque l'on doit vérifier plusieurs milliers de noms de domaines par jour, ce qui est mon cas sur domaines-expires.com .

Je ne suis pour l'instant jamais tombé sur une limitation de ce genre, mais ma base de noms de domaine expirés commence à grandir (près de 9000) et je préfère prendre des dispositions avant....

J'ai donc fait une alternative en faisant tout d'abord une requête pour lister les DNS attribués à un domaine. Ce genre de requête est vraiment fréquente sur le net et il n'existe donc aucune restriction. Si je reçois une réponse positive, cela signifie qu'il existe des DNS associées à ce domaine et que celui-ci est donc forcément enregistré. Si je n'obtiens aucune réponse, dans ce cas, j'utilise la requête whois pour avoir des précisions. En effet, un domaine peut très bien être enregistré sans avoir d'enregistrements DNS déclaré.
 
WRInaute accro
@KOogar: tu as une solution pour les .asia ? parce que le Whois en ligne déconne sévère... (pas encore testé avec le Whois sous Linux).
Au fait, qqn connaît un Whois sous Windows (suis pour le moment plus souvent sous Windows XP que Linux) ?
 
WRInaute accro
Je n'avais pas essayer avec le .asia chez OVH, pour l'instant le rapport me retourne ce message : "No whois server is known for this kind of object" mais comme l'API génère aussi des erreurs, c'est peut du à une simple interruption momentanée du service.
 
WRInaute accro
KOogar a dit:
Je n'avais pas essayer avec le .asia chez OVH, pour l'instant le rapport me retourne ce message : "No whois server is known for this kind of object" mais comme l'API génère aussi des erreurs, c'est peut du à une simple interruption momentanée du service.
Non, en fait, ça marche chez Gandi et EuroDNS. Mais quand tu vas sur le whois officiel, whois.asia, il te sort des domaines libres alors qu'ils sont pris. C'est assez pénible. Me suis fait de faux espoirs comme ça l'autre jour avec loans.asia ^^.
 
Discussions similaires
Haut