Bonjour,
voici une fonction qui va vous permettre de vérifier la disponibilité d’un nom de domaine.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | <?php // ----------------------------------------------------------- // Auteur : johnstyle // Date édition : 03 Avril 2009 // Website auteur : http://www.johnstyle.fr // Website script : http://www.johnstyle.fr/langage/php/noms-de-domaine-script-php-whois/ // ----------------------------------------------------------- // Informations spécifiques aux extenssions $info = array( 'fr' => array( 'host' => 'whois.nic.fr', 'regexp' => 'No[s]*entries[s]*found', 'pending' => 'status[s]*:[s]*REDEMPTION' ), 'com' => array( 'host' => 'whois.crsnic.net', 'regexp' => 'No[s]*match[s]*for' ), 'net' => array( 'host' => 'whois.crsnic.net', 'regexp' => 'No[s]*match[s]*for' ), ); function simpleWhois($domain, $tdl, $debug=false){ // Fonction de traitement // ----------------------------------------------- // 0 => Info, le nom est pris // 1 => Info, le nom est libre // 2 => Info, le nom est en pending // 3 => Avertissement, trop de requêtes // 4 => Erreur, il faut spécifier une chaine à rechercher (regexp) // 5 => Erreur, la requête retournée était vide // ----------------------------------------------- global $info; // Initialisation de la sortie $output = ''; // Initialisation de la requête $req = fsockopen($info[$tdl]['host'], 43, $errno, $errstr, 5); // le 5 permet de stoper la requete si aucune réponse au bout de 5 secondes // Récupération de la requête if($req){ fputs($req, $domain.'.'.$tdl."rn"); while(!feof($req)) $output .= fgets($req, 4096); fclose($req); }else unset($req); // mode debug if($debug) return $output; // Sortie vide if(empty($output)) return 5; // Trop de requêtes if(preg_match("/(Too[s]+many[s]+requests|Your[s]+connection[s]+limit[s]+exceeded|daily[s]+whois[s]+limit[s]+exceeded|Maximum[s]+queries|WHOIS[s]+LIMIT[s]+EXCEEDED|referral[s]+host[s]+not[s]+responding|Excessive[s]+querying)/i", $output)) return 3; // Pending if(isset($info[$tdl]['pending']) && !empty($info[$tdl]['pending']) && preg_match("/".$info[$tdl]['pending']."/i", $output)) return 2; // Info de recheche manquant if(!isset($info[$tdl]['regexp']) || empty($info[$tdl]['regexp'])) return 4; // Libre if(preg_match("/".$info[$tdl]['regexp']."/i", $output)) return 1; // Pris return 0; } // ========================================== // Exemple d'utilisation // ========================================== // Traitement d'une liste de domaines // -------------------------------------------------- // Tableau des domaines $tab = array( 'toto.com', 'momo.com', 'yoyo.fr', '65qs4df56q4qsdqsd.com', 'koko.net', 'zozo.net', 'soso.net', 'qoqo.net', 'qs56d4qs56d4qs65d4qs564.net', 'xoxo.net', 'coco.com', 'hoho.fr', 'nono.net', 'dodo.com', // etc.. ); // Récupération des résultats $output = false; // Exécution if($tab){ foreach($tab as $host){ list($domain, $tdl) = split(".", $host, 2); // le 2 permet de s'arreter après le 1er point ce qui permet d'avoir des extenssion du type .com.fr $output[$host] = simpleWhois($domain, $tdl); } } // Affichage "brut" des données traitées if($output){ print_r($output); } // Mode debug // -------------------------------------------------- echo simpleWhois('azerty', 'com', true); // ========================================== // ========================================== ?> |






Vendredi 17 avril 2009 at 2 h 25 min
Salut,
En testant le script tel quel, fsockopen plante chez moi, tout les noms de domaines testés renvoient « 5″.
Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known in /Library/WebServer/Documents/ndd.php on line 44
Warning: fsockopen() [function.fsockopen]: unable to connect to :43 (php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known) in /Library/WebServer/Documents/ndd.php on line 44
(oui, je suis sous mac, mais avec la dernière version de php/apache)
@+
Vendredi 17 avril 2009 at 20 h 02 min
Apparemment il s’agirait d’un problème de configuration du serveur, malheureusement je n’ai jamais rencontré ce type d’erreur et je n’ai pas de solution à vous proposer. Cependant vous pouvez faire quelques recherches ici :
– http://www.google.fr/search?q=php_network_getaddresses:%20getaddrinfo%20failed
– http://bugs.php.net/bug.php?id=11058
Si vous trouvez la solution, n’hésitez pas à nous la faire partager :)
A bientôt.
Dimanche 21 juin 2009 at 20 h 40 min
Nikel ce script mais j’ai esseyer de rajouter des extensions mais sa ne fonctionne pas par exemple pour le .org:
‘org’ => array(
‘host’ => ‘whois.pir.org’,
‘regexp’ => ‘NOT[\s]*FOUND’
),
Mais cela ne fonctionne pas, une solutions pour connaitre les serveurs whois et leurs réponse??
Jeudi 1 octobre 2009 at 19 h 14 min
Merci pour le script.
J’ai remarqué qu’il fonctionne bien sur un serveur et non sur l’autre. il m’affiche occupé pour tous les noms de domaines chez hostgator pendant que chez 1and1, j’ai certains noms disponibles. comment cela peut-il s’expliquer?
2- chez 1and1 http://oyamnvo.com/script_disponibilite_nom_de_domaine.php
2- chez hostgator http://www.lenetpourtous.com/script_disponibilite_nom_de_domaine.php
merci de m’aider à trouver une solution
Mercredi 21 octobre 2009 at 5 h 28 min
Bonjour,
excusez moi pour le temps de réponse…
Je pense que hostgator n’autorise pas les requête par socket, pour vérifier activez les erreur PHP en plaçant cette ligne au début de votre fichier : error_reporting(E_ALL);
Ensuite essayez de faire un debug avec le script de disponibilité. (cf: exemple).