Валидация, форматирование и проверка домена по WHOIS с помощью php
|Для одного из своих проектов мне нужно было выполнять валидацию домена с последующей проверкой по WHOIS, но была еще одна тонкость — надо было определять еще доменную зону, в случае одной доменной зоны — обращаться к одному провайдеру WHOIS, в случае с другой — к другому (речь идет о байнете).
Сервисы которые я решил использовать для выполнения проверки доменов:
- cctld.by для белорусских доменов
- freewhois.us для все остальных доменов
Решение нужно было на php и конечно же, не без регулярных выражений.
Писать будем сразу тестовый скрипт.
На первом этапе давайте определимся, что это будет функция, а передавать мы будем параметр «domain».
<?php $domain = trim($_GET['domain']); if(isset($domain)) { . . . } ?>
На втором шаге добавляем функцию, которая будет отвечать за выполнение всех проверок с переданным в запросе доменом:
<?php $domain = domainCheck(trim($_GET['domain'])); if(isset($domain)) { function domainCheck($domain) { $detect_zone = preg_match("/.+\.(\w{2,5})/", $domain, $zoneMatch); $validate_domain = preg_match("/([a-z0-9\-]+\.[a-z]{2,6})$/i", strtolower($domain), $match); } } ?>
Переменная $detect_zone отвечает за определение доменной зоны (прим.: BY или все остальные) для того, чтобы правильно определить оператора WHOIS к которому мы в последствии будем обращаться.
$validate_domain — выполняет проверку и отдает нам домен второго уровня даже в том случае, если вы захотите выполнить проверку доменов третьего уровня (саб-доменов) или выше. Это нужно для того, чтобы корректно отправить whois запрос. Такая практика применительна не во всех случаях, потому как, домен можно регистрировать к примеру третьего уровня — site.co.uk , но в моем случае такой подход подходил как нельзя лучше.
Далее, мы будем использовать php cURL для отправки запросов и регулярные выражения для получения нужной информации из ответов:
<?php $domain = domainCheck(trim($_GET['domain'])); if(isset($domain)) { function domainCheck($domain) { $detect_zone = preg_match("/.+\.(\w{2,5})/", $domain, $zoneMatch); $validate_domain = preg_match("/([a-z0-9\-]+\.[a-z]{2,6})$/i", strtolower($domain), $match); if($zoneMatch[1] == 'by' || $zoneMatch == 'бел') { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://cctld.by/check/?domain=".$match[1]); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $lookup = curl_exec($ch); curl_close ($ch); $get_mail = preg_match("/(\D+[-a-z0-9]+\@.+?\.\w{2,5})/", $lookup, $emailMatch); $phone_match = preg_match("/\>(\+\d{12})/", $lookup, $phoneMatch); $data = $emailMatch[1].";".$phoneMatch[1]; } else { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://www.freewhois.us/index.php?query=".$match[1]."&submit=Whois"); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $lookup = curl_exec($ch); curl_close ($ch); $get_mail = preg_match("/([-a-z0-9]+\@.+?\.\w{2,5})/", $lookup, $emailMatch); $phone_match = preg_match("/.+(\+\d{3}\.\d+)/", $lookup, $phoneMatch); $data = $emailMatch[1].";".$phoneMatch[1]; } $error = 'none'; if($emailMatch[1] && $phoneMatch[1]) { return $data; } else { return $error; } } } } ?>
Используем простое условие, которое при определении доменной зоне будет выполнять нужный нам сценарий.
В случае, если наш домен совпадает с .BY или .БЕЛ, значит мы будем обращаться к cctld.by, в остальных случаях соответственно — будет использоваться второй сервис.
$get_mail = preg_match("/(\D+[-a-z0-9]+\@.+?\.\w{2,5})/", $lookup, $emailMatch);
Переменная $get_mail помогает нам получить электронный адрес владельца домена, а переменная $phone_match — забирает в свою очередь номер телефона. Так как разметка страницы у операторов whois отличается, регулярные выражения подстраиваются индивидуально.
$phone_match = preg_match("/\>(\+\d{12})/", $lookup, $phoneMatch);
В случае, если домена нет или какой-то информации не хватает — создаем переменную $error и отдаем ее.
$validate_domain = preg_match("/([a-z0-9\-]+\.[a-z]{2,6})$/i", strtolower($domain), $match);
При выполнении проверки регулярным выражением, нам важно, чтобы домен был с маленькой буквы, для этого используем функцию strtolower(), потому как проверка whois у многих сервисов выполняется только с доменами в нижнем регистре.
Может быть интересно:
Добавьте комментарий
Для отправки комментария вам необходимо авторизоваться.
скриптик оказался полезным, благодарю