Регистрация доменов. Прошла неделя


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

iregs.ru - регистрация доменов

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

Игровые автоматы еще недавно заселяли каждый уголок города, сейчас со вступлением в силу закона можно говорить об их отсутствии, но если вы скучаете по одноруким бандитам, то посетите виртуальные игровые автоматы. Они помогут отвлечься и вспомнить былые времена.
  1. <?php
  2. /**
  3.  * Работа с whois сервисами
  4.  *
  5.  * Класс  создавался в рамках проекта iregs.ru (Регистрация доменных имен).
  6.  * Для работы необходимо, чтобы у вашего хостига были открыты исходящие коннекты
  7.  * и доступна функция fsockopen.
  8.  * @package  iregs.ru
  9.  * @subpackage whois
  10.  * @author  Луценко Андрей,
  11.  * @copyright Copyright (c) 2010, Луценко Андрей
  12.  * @license  GNU/GPL
  13.  * @link  http://www.iregs.ru
  14.  * @since  Version 1.0
  15.  * @filesource
  16.  */
  17.  
  18.  // ————————————————————————
  19.  
  20.  /**
  21. * Класс работы с whois сервисами
  22. *
  23. * Класс для работы с whois сервисами, работает по протоколу whois. Обращаясь напрямую к
  24. * whois серверам. Помимо получения whois информации, класс определяет занято или совобдно
  25. * доменное имя.
  26. * Пример использования:
  27. * <code>
  28. * $whois=new iregsWhois();
  29. * if ($whois->whoisDomain('iregs.ru')){
  30. * if ($whois->result==iregsWhois::IREGS_WHOIS_NOT_FOUND){
  31. *  echo "Домен свободен.";
  32. * }else{
  33. *  echo "Домен занят.";
  34. * }
  35. * }
  36. * </code>
  37. * @package  iregs.ru
  38. * @subpackage whois
  39. * @author  Луценко Андрей,
  40. * @link  http://blog.yousoft.ru/
  41. */
  42.  
  43. class iregsWhois{
  44.  /**
  45.  * Ошибка: Домен первого уровня не найден в списке.
  46.  */
  47.  const IREGS_WHOIS_ERROR_TOP=0;
  48.  /**
  49.  * Ошибка: Невозможно подключиться к whois серверу.
  50.  */
  51.  const IREGS_WHOIS_ERROR_CONNECT=1;
  52.  /**
  53.  * Ошибка: Превышен лимит обращений к серверу whois.
  54.  */
  55.  const IREGS_WHOIS_ERROR_LIMIT=2;
  56.  /**
  57.  * Whois описание домена найдено.
  58.  */
  59.  const IREGS_WHOIS_FOUND=10;
  60.  /**
  61.  * Whois описание домена не найдено.
  62.  */
  63.  const IREGS_WHOIS_NOT_FOUND=11;
  64.  
  65.  /**
  66.  * Ответ whois сервера.
  67.  *
  68.  * @var boolean
  69.  */
  70.  public $response=null;
  71.  /**
  72.  * Результат работы функции.
  73.  *
  74.  * В переменной $result сохраняется результат выполнения функции whoisDomain,
  75.  * может принимать следующие значения:
  76.  * Функция вернула true: IREGS_WHOIS_FOUND, IREGS_WHOIS_NOT_FOUND
  77.  * Функция вернула false: IREGS_WHOIS_ERROR_TOP, IREGS_WHOIS_ERROR_CONNECT, IREGS_WHOIS_ERROR_LIMIT
  78.  * @var integer
  79.  */
  80.  public $result=null;
  81.  
  82.  /**
  83.  * Массив доменов первого уровня
  84.  *
  85.  * В массиве хранятся соответствия между доменами первого уровня и серверами,
  86.  * которые поддерживают эту зону. А также предусмотренно хранение любой другой информации
  87.  * @var array
  88.  */
  89.  static $whois_top=array(
  90.   'ru' =>array('id'=>1,  'checked'=>true, ),
  91.   'su'  =>array('id'=>1,  'checked'=>true, ),
  92.  );
  93.  /**
  94.  * Описание серверов whois
  95.  *
  96.  * В массиве хранятся:
  97.  * server: URL whois сервера
  98.  * response_not_found: строка содержащаяся в ответе сервера, если домен не найден
  99.  * response_limit: строка содержащаяся в ответе сервера, превышен лмимт обращений к серверу
  100.  * @var array
  101.  */
  102.  static $whois=array(
  103.   1 =>array('server'=>'whois.ripn.net',
  104.    'response_not_found'=>'No entries found for the selected source',
  105.    'response_limit'=>'You have exceeded allowed connection rate'),
  106.   );
  107.  
  108.  /**
  109.  * Отправить запрос whois серверу
  110.  *
  111.  * Функция по переданым $domain и $topdomain пытается получить информацию с соответствующего whois сервера.
  112.  * В качестве результата возварщает логическое значение указывающее на успешность выполнения.
  113.  * Расшифровка результат доступна в переменой result. Ответ сервера содержиться в переменной response.
  114.  * В случае вызова функции с двумя параметрами, параметр $domain должен содержать доменное имя без зоны,
  115.  * а $topdomain — зону.
  116.  * <code>
  117.  * $whois=new iregsWhois();
  118.  * $whois->whoisDomain('iregs.ru');
  119.  * $whois->whoisDomain('iregs','ru');
  120.  * </code>
  121.  * @param string $domain доменое имя, если зона не указана, она должна быть передана в параметре $topdomain.
  122.  * @param string $topdomain используемая зона.
  123.  * @return boolean
  124.  */
  125.  function whoisDomain($domain,$topdomain=''){
  126.  
  127.   if (!isset(self::$whois_top[$topdomain])){
  128.    $topdomain=end(explode('.',$domain));
  129.   }else{
  130.    $domain.=".$topdomain";
  131.   }
  132.   if (!isset(self::$whois_top[$topdomain])){
  133.    $this->result=self::IREGS_WHOIS_ERROR_TOP;
  134.    return false;
  135.   }
  136.   $_whois=self::$whois[self::$whois_top[$topdomain]['id']];
  137.  
  138.   $con = fsockopen($_whois['server'], 43);
  139.   if (!$con){
  140.    $this->result=self::IREGS_WHOIS_ERROR_CONNECT;
  141.    return false;
  142.   }
  143.   fputs($con, $domain."\r\n");
  144.   $this->response = '';
  145.   while(!feof($con)) {
  146.    $this->response.= fgets($con,128);
  147.   }
  148.   fclose($con);
  149.  
  150.   if ($this->response){
  151.    if (strpos($this->response, $_whois['response_limit'])){
  152.     $this->result=self::IREGS_WHOIS_ERROR_LIMIT;
  153.     return false;
  154.    }elseif(strpos($this->response, $_whois['response_not_found'])!==false){
  155.     $this->result=self::IREGS_WHOIS_NOT_FOUND;
  156.     return true;
  157.    }else{
  158.     $this->result=self::IREGS_WHOIS_FOUND;
  159.     return true;
  160.    }
  161.   } else {
  162.    return false;
  163.   }
  164.  }
  165. }
  166. ?>

Похожие записи:

Tags:

Leave a Reply