Как обычно неделя была насыщенная, но это не помешало мне заниматься сайтом регистрации и продажи доменных имен. За неделю была произведена регистрации и подключение приема платежей. Поиск доменов пока нет, но это дело поправимое. В частности эта статья написана про поиск доменных имен. Как оказалось в интернете «Тема не раскрыта». Пришлось взять инициативу в свои руки.

После анализа доступных скрипов и расширений было принято решение о написании копонента проверки занятости домена. Изучив, теоретическую часть на свет появилась реализация в виде класса «iregsWhois». Который и представляется для обсуждения. Это только подготовительный этап к написанию компонента для Joomla, но и этот код уже можно использовать в других проектах.
-
<?php
-
/**
-
* Работа с whois сервисами
-
*
-
* Класс создавался в рамках проекта iregs.ru (Регистрация доменных имен).
-
* Для работы необходимо, чтобы у вашего хостига были открыты исходящие коннекты
-
* и доступна функция fsockopen.
-
* @package iregs.ru
-
* @subpackage whois
-
* @author Луценко Андрей,
-
* @copyright Copyright (c) 2010, Луценко Андрей
-
* @license GNU/GPL
-
* @link http://www.iregs.ru
-
* @since Version 1.0
-
* @filesource
-
*/
-
-
// ————————————————————————
-
-
/**
-
* Класс работы с whois сервисами
-
*
-
* Класс для работы с whois сервисами, работает по протоколу whois. Обращаясь напрямую к
-
* whois серверам. Помимо получения whois информации, класс определяет занято или совобдно
-
* доменное имя.
-
* Пример использования:
-
* <code>
-
* $whois=new iregsWhois();
-
* if ($whois->whoisDomain('iregs.ru')){
-
* if ($whois->result==iregsWhois::IREGS_WHOIS_NOT_FOUND){
-
* echo "Домен свободен.";
-
* }else{
-
* echo "Домен занят.";
-
* }
-
* }
-
* </code>
-
* @package iregs.ru
-
* @subpackage whois
-
* @author Луценко Андрей,
-
* @link http://blog.yousoft.ru/
-
*/
-
-
class iregsWhois{
-
/**
-
* Ошибка: Домен первого уровня не найден в списке.
-
*/
-
const IREGS_WHOIS_ERROR_TOP=0;
-
/**
-
* Ошибка: Невозможно подключиться к whois серверу.
-
*/
-
const IREGS_WHOIS_ERROR_CONNECT=1;
-
/**
-
* Ошибка: Превышен лимит обращений к серверу whois.
-
*/
-
const IREGS_WHOIS_ERROR_LIMIT=2;
-
/**
-
* Whois описание домена найдено.
-
*/
-
const IREGS_WHOIS_FOUND=10;
-
/**
-
* Whois описание домена не найдено.
-
*/
-
const IREGS_WHOIS_NOT_FOUND=11;
-
-
/**
-
* Ответ whois сервера.
-
*
-
* @var boolean
-
*/
-
public $response=null;
-
/**
-
* Результат работы функции.
-
*
-
* В переменной $result сохраняется результат выполнения функции whoisDomain,
-
* может принимать следующие значения:
-
* Функция вернула true: IREGS_WHOIS_FOUND, IREGS_WHOIS_NOT_FOUND
-
* Функция вернула false: IREGS_WHOIS_ERROR_TOP, IREGS_WHOIS_ERROR_CONNECT, IREGS_WHOIS_ERROR_LIMIT
-
* @var integer
-
*/
-
public $result=null;
-
-
/**
-
* Массив доменов первого уровня
-
*
-
* В массиве хранятся соответствия между доменами первого уровня и серверами,
-
* которые поддерживают эту зону. А также предусмотренно хранение любой другой информации
-
* @var array
-
*/
-
static $whois_top=array(
-
'ru' =>array('id'=>1, 'checked'=>true, ),
-
'su' =>array('id'=>1, 'checked'=>true, ),
-
);
-
/**
-
* Описание серверов whois
-
*
-
* В массиве хранятся:
-
* server: URL whois сервера
-
* response_not_found: строка содержащаяся в ответе сервера, если домен не найден
-
* response_limit: строка содержащаяся в ответе сервера, превышен лмимт обращений к серверу
-
* @var array
-
*/
-
static $whois=array(
-
1 =>array('server'=>'whois.ripn.net',
-
'response_not_found'=>'No entries found for the selected source',
-
'response_limit'=>'You have exceeded allowed connection rate'),
-
);
-
-
/**
-
* Отправить запрос whois серверу
-
*
-
* Функция по переданым $domain и $topdomain пытается получить информацию с соответствующего whois сервера.
-
* В качестве результата возварщает логическое значение указывающее на успешность выполнения.
-
* Расшифровка результат доступна в переменой result. Ответ сервера содержиться в переменной response.
-
* В случае вызова функции с двумя параметрами, параметр $domain должен содержать доменное имя без зоны,
-
* а $topdomain – зону.
-
* <code>
-
* $whois=new iregsWhois();
-
* $whois->whoisDomain('iregs.ru');
-
* $whois->whoisDomain('iregs','ru');
-
* </code>
-
* @param string $domain доменое имя, если зона не указана, она должна быть передана в параметре $topdomain.
-
* @param string $topdomain используемая зона.
-
* @return boolean
-
*/
-
function whoisDomain($domain,$topdomain=''){
-
-
if (!isset(self::$whois_top[$topdomain])){
-
$topdomain=end(explode('.',$domain));
-
}else{
-
$domain.=".$topdomain";
-
}
-
if (!isset(self::$whois_top[$topdomain])){
-
$this->result=self::IREGS_WHOIS_ERROR_TOP;
-
return false;
-
}
-
$_whois=self::$whois[self::$whois_top[$topdomain]['id']];
-
-
$con = fsockopen($_whois['server'], 43);
-
if (!$con){
-
$this->result=self::IREGS_WHOIS_ERROR_CONNECT;
-
return false;
-
}
-
fputs($con, $domain."\r\n");
-
$this->response = '';
-
while(!feof($con)) {
-
$this->response.= fgets($con,128);
-
}
-
fclose($con);
-
-
if ($this->response){
-
if (strpos($this->response, $_whois['response_limit'])){
-
$this->result=self::IREGS_WHOIS_ERROR_LIMIT;
-
return false;
-
}elseif(strpos($this->response, $_whois['response_not_found'])!==false){
-
$this->result=self::IREGS_WHOIS_NOT_FOUND;
-
return true;
-
}else{
-
$this->result=self::IREGS_WHOIS_FOUND;
-
return true;
-
}
-
} else {
-
return false;
-
}
-
}
-
}
-
?>
Похожие записи:
- Компонент для Joomla: iregs_domains – проверка домена на занятость
- Регистрация домена в зоне .РФ
- Регистрация доменов. Начало пути
Метки: iregs.ru
