/*---------------------------------------------------------------*/
|
/*
|
Titre : Savoir si plusieurs Nom de Domaines sont réservés
|
|
URL : https://phpsources.net/code_s.php?id=502
|
Auteur : johnstyle
|
Date édition : 03 Avril 2009
|
Date mise a jour : 21 Aout 2019
|
|
Rapport de la maj:
|
- refactoring du code en PHP 7
|
- fonctionnement du code vérifié
|
Date mise a jour : 21 Jan 2026
|
|
Rapport de la maj:
|
- refactoring du code en PHP 8
|
- fonctionnement du code vérifié en PHP 8
|
*/
|
/*---------------------------------------------------------------*/
|
|
// 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."\r\n");
|
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]+EXC"
|
.
|
"EEDED|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',
|
'asthma.fr',
|
'nono.net',
|
'dodo.com',
|
// etc..
|
);
|
|
// Récupération des résultats
|
$output = [];
|
|
// Exécution
|
if($tab){
|
foreach($tab as $host){
|
list($domain, $tdl) = preg_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
|
if (!is_null($output) && isset($output['key'])) {
|
$output[$host] = simpleWhois($domain, $tdl);
|
}
|
|
else { $output[$host] = [];
|
}
|
}
|
}
|
| ?> |