Jump to content
  • 0

Помогите по php, для доработки модуля


Rudiarius
 Share

Question

Нашёл какой то авторский модуль по проверке доменов, на одном единственном сайте, больше ни где инфы про него не нашёл.  Кое-что удалось доработать самому, но никак не получается сделать проверку доменов .рф,  основной код модуля - 

<?phpclass domain_to_check	{	var $name;	var $whois_server;	var $whois_server_answer;	var $break_checkbox;	var $show;	// конструктор		function domain_to_check($name_c,$whois_server_c,$whois_server_answer_c,$break_c,$show_c)		{		$this->name = $name_c;		$this->whois_server = $whois_server_c;		$this->whois_server_answer = $whois_server_answer_c;		$this->break_checkbox = $break_c;		$this->show = $show_c;		}	//показываем чекбокс		function showcheckbox()		{		if ($this->show == true) 			{ 		         echo "<div><input type=\"checkbox\" name=\"".$this->name."\" id=\"".$this->name."\"><label for=\"".$this->name."\"><span>".$this->name."</span></label></div>";			 if ($this->break_checkbox == true) echo "";							} 			}	  //проверяем домен	  function checkDomain($domain)    		{    	        // Состоит ли строка только из латинских букв, цифр и "-", длиной от 2 до 30 символов	       	$domain = strip_tags($domain);		if (ereg("^[а-яА-Яa-zA-Z0-9-]{2,30}$",$domain)) 			{			$domain = $domain.".".$this->name;					    	$availstr = "<a href=\"/\" target=\"_blank\"><b>Можно зарегистрировать</b></a>";		        $con = fsockopen($this->whois_server, 43);		        if (!$con) return false;		        fputs($con, $domain."\r\n");		        $response = ' :';		        while(!feof($con)) 		        	{		                $response .= fgets($con,128); 			        }		        fclose($con);					        		        if (strpos($response, $this->whois_server_answer))			        {				            echo "<div style=\"margin-bottom:4px\">$domain $availstr</div>";        			}			        else 			        {			            echo "<div style=\"margin-bottom:4px\">$domain <b>ЗАНЯТ</b></div>";   			        }		        }    		}    			}$newdomain = array();$newdomain[0] = new domain_to_check("com","whois.crsnic.net","No match for",false,true);	$newdomain[1] = new domain_to_check("ru","whois.ripn.net","No entries found",false,true);$newdomain[2] = new domain_to_check("su","whois.ripn.net","No entries found",false,true);$newdomain[3] = new domain_to_check("pro","whois.registrypro.pro","NOT FOUND",false,true);$newdomain[4] = new domain_to_check("net","whois.crsnic.net","No match for",false,true);$newdomain[5] = new domain_to_check("info","whois.afilias.net","NOT FOUND",false,true);$newdomain[6] = new domain_to_check("org","whois.publicinterestregistry.net","NOT FOUND",false,true);$newdomain[7] = new domain_to_check("biz","whois.neulevel.biz","Not found:",true,true);$newdomain[8] = new domain_to_check("asia","whois.nic.asia","NOT FOUND",false,true);$newdomain[10] = new domain_to_check("cc","whois.nic.cc","No match",false,true);$newdomain[11] = new domain_to_check("us","whois.nic.us","Not found:",false,true);$newdomain[12] = new domain_to_check("tv","whois.nic.tv","No match for",true,true);$newdomain[13] = new domain_to_check("eu","whois.eu","AVAILABLE",false,true);$newdomain[14] = new domain_to_check("in","whois.inregistry.net","NOT FOUND",false,true);$newdomain[15] = new domain_to_check("mobi","whois.dotmobiregistry.net","NOT FOUND",false,true);$newdomain[16] = new domain_to_check("nl","whois.domain-registry.nl","free",false,true);$newdomain[17] = new domain_to_check("ca","whois.cira.ca","AVAIL",true,true);$newdomain[18] = new domain_to_check("bz","whois2.afilias-grs.net","NOT FOUND",false,true);$newdomain[19] = new domain_to_check("mn","whois.nic.mn","Domain not found",false,true);$newdomain[20] = new domain_to_check("ws","whois.worldsite.ws","No match for",true,true);$newdomain[21] = new domain_to_check("me","whois.nic.me","NOT FOUND",false,true);$newdomain[22] = new domain_to_check("tel","whois.nic.tel","Not found",false,true);$newdomain[23] = new domain_to_check("travel","whois.nic.travel","Not found",false,true);$newdomain[24] = new domain_to_check("pw","whois.nic.pw","DOMAIN NOT FOUND",false,true);$newdomain[25] = new domain_to_check("рф","whois.ripn.net","No entries found",false,true);$label			= "Доменное имя";$buttontext		= "Проверить";$resulttext		= "Результат";$checkall		= "Проверить все домены";?>      <form action=" " method="post" name="domain" id="domain">					<div class="domeni"><input class="poledomena" name="domainname" type="text" placeholder="domen"/>		<?php//		выводим чекбоксы		foreach ($newdomain as $value)			{			$value->showcheckbox();						}		?>		</div>		<input style="margin:7px;" type="submit" name="submitBtn" value="<?php echo $buttontext ?>"/>      </form>  <?php        if (isset($_POST['submitBtn']))    {        $domainbase = (isset($_POST['domainname'])) ? $_POST['domainname'] : '';        if (strlen($domainbase)>0)        { ?>      	<div id="caption" style="margin-top:8px; margin-bottom:8px; font-weight:bold"><?php echo $resulttext ?> :</div>      	<?php      	foreach ($newdomain as $value)			{			// если была отмечена галочка, то проверяем домен			if (isset($_POST[$value->name])) $value->checkDomain($domainbase);									}	}     }?>   
Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0

Возможно проблема в кодировке передаваемой строки запроса

Можно вообще переводить название домена в punycode  тогда точно не должно быть проблем (как вариант https://github.com/true/php-punycode )

Link to comment
Share on other sites

  • 0

Возможно проблема в кодировке передаваемой строки запроса

Можно вообще переводить название домена в punycode  тогда точно не должно быть проблем (как вариант https://github.com/true/php-punycode )

 

Думаю, идея хорошая - рабочая, но я верстальщик и абсолютно не знаю php, можете пример показать - как подключить эту библиотеку к моему коду? Могу оплатить помощь (к примеру на вмр)! Кстати, выяснилась ещё одна проблема с этим модулем, вывожу его шорткодом в тексте (в середине статьи), а он выводится в самом верху - под тегом H1 (пытался в дивы обернуть, ничего не получается).

Edited by Rudiarius
Link to comment
Share on other sites

  • 0

 

Возможно проблема в кодировке передаваемой строки запроса

Можно вообще переводить название домена в punycode  тогда точно не должно быть проблем (как вариант https://github.com/true/php-punycode )

 

Думаю, идея хорошая - рабочая, но я верстальщик и абсолютно не знаю php, можете пример показать - как подключить эту библиотеку к моему коду? Могу оплатить помощь (к примеру на вмр)! Кстати, выяснилась ещё одна проблема с этим модулем, вывожу его шорткодом в тексте (в середине статьи), а он выводится в самом верху - под тегом H1 (пытался в дивы обернуть, ничего не получается).

 

 

Сохраняете себе сам класс Punycode.php куданибудь

 

Подключаете в начале файла (путь должен быть ваш):

<?phpinclude_once ('Punycode.php');

И используете, добавить 4 строчки в метод checkDomain в начало:

function checkDomain($domain)  if(preg_match('#[а-яё]#i',$domain)){    $punycode = new TrueBV\Punycode;    $domain = $punycode->encode($domain);  }

 

 

Кстати, выяснилась ещё одна проблема с этим модулем, вывожу его шорткодом в тексте (в середине статьи), а он выводится в самом верху - под тегом H1

 

Это скорее всего из-за того что в классе модуля html выводиться напрямую и через echo .  Поэтому html у вас вылазит в том месте где был подключен файл с классом.

 

Но это предположение, я не знаком так близко с вордпресс.

Link to comment
Share on other sites

  • 0

Сохраняете себе сам класс Punycode.php куданибудь

 

Подключаете в начале файла (путь должен быть ваш):

<?phpinclude_once ('Punycode.php');

И используете, добавить 4 строчки в метод checkDomain в начало:

function checkDomain($domain)  if(preg_match('#[а-яё]#i',$domain)){    $punycode = new TrueBV\Punycode;    $domain = $punycode->encode($domain);  }

 

Шикарно, спасибо большое, теперь всё работает. С меня уже магар! Ещё бы решить неприятную побочку: результат проверки выводится пуникодом xn--d1acufc.xn--p1ai  и в чекбоксе вместо .рф  - тоже пуникод В общем то ерунда, работает да работает, но посетитель сайта может вообще подумать - что ошибка какая то вылезла.

 

Вот тут нашёл какую то приблуду - http://dayte2.com/domains-rf но не знаю как её прикрутить к  этому коду, тоже на php всё...

 

На скришоте - результат позорно выводится потому что я его ещё не стилизовал.

Edited by Rudiarius
Link to comment
Share on other sites

  • 0
С меня уже магар! Ещё бы решить неприятную побочку: результат проверки выводится пуникодом xn--d1acufc.xn--p1ai и в чекбоксе вместо .рф - тоже пуникод

 

Исправьте на вот так

function checkDomain($domain){    	        // Состоит ли строка только из латинских букв, цифр и "-", длиной от 2 до 30 символов	       	$domain = strip_tags($domain);		if (ereg("^[а-яА-ЯёЁa-zA-Z0-9-]{2,30}$",$domain)) 			{			$domain = $domain.".".$this->name;					    	$availstr = "<a href=\"/\" target=\"_blank\"><b>Можно зарегистрировать</b></a>";		        $con = fsockopen($this->whois_server, 43);		        if (!$con) return false;if(preg_match('#[а-яё]#i',$domain)){  $punycode = new TrueBV\Punycode;  fputs($con, $punycode->encode($domain)."\r\n");}else{  fputs($con, $domain."\r\n");}		        
Link to comment
Share on other sites

  • 0

Не получается, вообще ничего не выводит, может я неправильно вставляю? Другие домены, на латинице - выводит исправно, с достоверным результатом (свободен/занят).

 

<?php
include_once ('Punycode.php');
class domain_to_check
{
var $name;
var $whois_server;
var $whois_server_answer;
var $break_checkbox;
var $show;
// конструктор
function domain_to_check($name_c,$whois_server_c,$whois_server_answer_c,$break_c,$show_c)
{
$this->name = $name_c;
$this->whois_server = $whois_server_c;
$this->whois_server_answer = $whois_server_answer_c;
$this->break_checkbox = $break_c;
$this->show = $show_c;
}
//показываем чекбокс
function showcheckbox()
{
if ($this->show == true) 
        echo "<div><input type=\"checkbox\" name=\"".$this->name."\" id=\"".$this->name."\"><label for=\"".$this->name."\"><span>".$this->name."</span></label></div>";
if ($this->break_checkbox == true) echo "";
}
}
 //проверяем домен
function checkDomain($domain){
           // Состоит ли строка только из латинских букв, цифр и "-", длиной от 2 до 30 символов
      $domain = strip_tags($domain);
if (ereg("^[а-яА-ЯёЁa-zA-Z0-9-]{2,30}$",$domain)) 
{
$domain = $domain.".".$this->name;
 
    $availstr = "<a href=\"/\" target=\"_blank\"><b>Можно зарегистрировать</b></a>";
       $con = fsockopen($this->whois_server, 43);
       if (!$con) return false;
 
if(preg_match('#[а-яё]#i',$domain)){
  $punycode = new TrueBV\Punycode;
  fputs($con, $punycode->encode($domain)."\r\n");
}else{
  fputs($con, $domain."\r\n");
}
$response = ' :';
while(!feof($con)) 
        {
       
               $response .= fgets($con,128); 
       }
     
       fclose($con);
       
       if (strpos($response, $this->whois_server_answer))
       {
           echo "<div style=\"margin-bottom:4px\">$domain $availstr</div>";
        }
       else 
       {
           echo "<div style=\"margin-bottom:4px\">$domain <b>ЗАНЯТ</b></div>";   
       }
       }
    }
    
 
}
 
$newdomain = array();
 
$newdomain[0] = new domain_to_check("com","whois.crsnic.net","No match for",false,true);
$newdomain[1] = new domain_to_check("ru","whois.ripn.net","No entries found",false,true);
$newdomain[2] = new domain_to_check("su","whois.ripn.net","No entries found",false,true);
$newdomain[3] = new domain_to_check("pro","whois.registrypro.pro","NOT FOUND",false,true);
$newdomain[4] = new domain_to_check("net","whois.crsnic.net","No match for",false,true);
$newdomain[5] = new domain_to_check("info","whois.afilias.net","NOT FOUND",false,true);
$newdomain[6] = new domain_to_check("org","whois.publicinterestregistry.net","NOT FOUND",false,true);
$newdomain[7] = new domain_to_check("biz","whois.neulevel.biz","Not found:",true,true);
$newdomain[8] = new domain_to_check("asia","whois.nic.asia","NOT FOUND",false,true);
$newdomain[10] = new domain_to_check("cc","whois.nic.cc","No match",false,true);
$newdomain[11] = new domain_to_check("us","whois.nic.us","Not found:",false,true);
$newdomain[12] = new domain_to_check("tv","whois.nic.tv","No match for",true,true);
$newdomain[13] = new domain_to_check("eu","whois.eu","AVAILABLE",false,true);
$newdomain[14] = new domain_to_check("in","whois.inregistry.net","NOT FOUND",false,true);
$newdomain[15] = new domain_to_check("mobi","whois.dotmobiregistry.net","NOT FOUND",false,true);
$newdomain[16] = new domain_to_check("nl","whois.domain-registry.nl","free",false,true);
$newdomain[17] = new domain_to_check("ca","whois.cira.ca","AVAIL",true,true);
$newdomain[18] = new domain_to_check("bz","whois2.afilias-grs.net","NOT FOUND",false,true);
$newdomain[19] = new domain_to_check("mn","whois.nic.mn","Domain not found",false,true);
$newdomain[20] = new domain_to_check("ws","whois.worldsite.ws","No match for",true,true);
$newdomain[21] = new domain_to_check("me","whois.nic.me","NOT FOUND",false,true);
$newdomain[22] = new domain_to_check("tel","whois.nic.tel","Not found",false,true);
$newdomain[23] = new domain_to_check("travel","whois.nic.travel","Not found",false,true);
$newdomain[24] = new domain_to_check("pw","whois.nic.pw","DOMAIN NOT FOUND",false,true);
$newdomain[25] = new domain_to_check("xn--p1ai","whois.ripn.net","No entries found",false,true);
 
$label = "Доменное имя";
$buttontext = "Проверить";
$resulttext = "Результат";
$checkall = "Проверить все домены";
 
?><div id="proverka-domenov">
      <form action=" " method="post" name="domain" id="domain">
 
 
<div class="domeni"><input class="poledomena" name="domainname" type="text" placeholder="domen"/>
<?php
// выводим чекбоксы
foreach ($newdomain as $value)
{
$value->showcheckbox();
}
?><input class="proverka-domena" type="submit" name="submitBtn" value="<?php echo $buttontext ?>"/>
</div>
 
      </form></div>
  
<?php    
 
    if (isset($_POST['submitBtn']))
    {
        $domainbase = (isset($_POST['domainname'])) ? $_POST['domainname'] : '';
        if (strlen($domainbase)>0)
        { ?>
      <div id="caption" style="margin-top:8px; margin-bottom:8px; font-weight:bold"><?php echo $resulttext ?> :</div>
      <?php
      foreach ($newdomain as $value)
{
// если была отмечена галочка, то проверяем домен
if (isset($_POST[$value->name])) $value->checkDomain($domainbase);
}
 
}
     }
?>
Link to comment
Share on other sites

  • 0

У меня работает и с кодированием домена в punycode и без =)

 

Чтобы работало с именем в обычном режиме нужно чтобы строка была в кодировке UTF-8? убедитесь в этом.

 

А с переводом в punycode, вот код который работает у меня:

<?phpinclude_once ('Punycode.php');class domain_to_check	{	var $name;	var $whois_server;	var $whois_server_answer;	var $break_checkbox;	var $show;	// конструктор		function domain_to_check($name_c,$whois_server_c,$whois_server_answer_c,$break_c,$show_c)		{		$this->name = $name_c;		$this->whois_server = $whois_server_c;		$this->whois_server_answer = $whois_server_answer_c;		$this->break_checkbox = $break_c;		$this->show = $show_c;		}	//показываем чекбокс		function showcheckbox()		{		if ($this->show == true) 			{ 		         echo "<div><input type=\"checkbox\" name=\"".$this->name."\" id=\"".$this->name."\"><label for=\"".$this->name."\"><span>".$this->name."</span></label></div>";			 if ($this->break_checkbox == true) echo "";							} 			}	  //проверяем домен	  function checkDomain($domain)    		{    		        	        // Состоит ли строка только из латинских букв, цифр и "-", длиной от 2 до 30 символов	       	$domain = strip_tags($domain);		if (preg_match("#^[а-яА-ЯёЁa-zA-Z0-9-]{2,30}$#iu",$domain)) 			{			$domain = $domain.".".$this->name;					    	$availstr = "<a href=\"/\" target=\"_blank\"><b>Можно зарегистрировать</b></a>";		        $con = fsockopen($this->whois_server, 43);		        if (!$con) return false;		        		        if(preg_match('#[а-яё]#iu',$domain)){                    $punycode = new Punycode;                    fputs($con, $punycode->encode($domain)."\r\n");                }else{                    fputs($con, $domain."\r\n");                }		        $response = ' :';		        while(!feof($con)) 		        	{		                $response .= fgets($con,128); 			        }		        fclose($con);					        		        if (strpos($response, $this->whois_server_answer))			        {				            echo "<div style=\"margin-bottom:4px\">$domain $availstr</div>";        			}			        else 			        {			            echo "<div style=\"margin-bottom:4px\">$domain <b>ЗАНЯТ</b></div>";   			        }		        }    		}    			}$newdomain = array();$newdomain[0] = new domain_to_check("com","whois.crsnic.net","No match for",false,true);	$newdomain[1] = new domain_to_check("ru","whois.ripn.net","No entries found",false,true);$newdomain[2] = new domain_to_check("su","whois.ripn.net","No entries found",false,true);$newdomain[3] = new domain_to_check("pro","whois.registrypro.pro","NOT FOUND",false,true);$newdomain[4] = new domain_to_check("net","whois.crsnic.net","No match for",false,true);$newdomain[5] = new domain_to_check("info","whois.afilias.net","NOT FOUND",false,true);$newdomain[6] = new domain_to_check("org","whois.publicinterestregistry.net","NOT FOUND",false,true);$newdomain[7] = new domain_to_check("biz","whois.neulevel.biz","Not found:",true,true);$newdomain[8] = new domain_to_check("asia","whois.nic.asia","NOT FOUND",false,true);$newdomain[10] = new domain_to_check("cc","whois.nic.cc","No match",false,true);$newdomain[11] = new domain_to_check("us","whois.nic.us","Not found:",false,true);$newdomain[12] = new domain_to_check("tv","whois.nic.tv","No match for",true,true);$newdomain[13] = new domain_to_check("eu","whois.eu","AVAILABLE",false,true);$newdomain[14] = new domain_to_check("in","whois.inregistry.net","NOT FOUND",false,true);$newdomain[15] = new domain_to_check("mobi","whois.dotmobiregistry.net","NOT FOUND",false,true);$newdomain[16] = new domain_to_check("nl","whois.domain-registry.nl","free",false,true);$newdomain[17] = new domain_to_check("ca","whois.cira.ca","AVAIL",true,true);$newdomain[18] = new domain_to_check("bz","whois2.afilias-grs.net","NOT FOUND",false,true);$newdomain[19] = new domain_to_check("mn","whois.nic.mn","Domain not found",false,true);$newdomain[20] = new domain_to_check("ws","whois.worldsite.ws","No match for",true,true);$newdomain[21] = new domain_to_check("me","whois.nic.me","NOT FOUND",false,true);$newdomain[22] = new domain_to_check("tel","whois.nic.tel","Not found",false,true);$newdomain[23] = new domain_to_check("travel","whois.nic.travel","Not found",false,true);$newdomain[24] = new domain_to_check("pw","whois.nic.pw","DOMAIN NOT FOUND",false,true);$newdomain[25] = new domain_to_check("рф","whois.ripn.net","No entries found",false,true);$label			= "Доменное имя";$buttontext		= "Проверить";$resulttext		= "Результат";$checkall		= "Проверить все домены";?>      <form action=" " method="post" name="domain" id="domain">					<div class="domeni"><input class="poledomena" name="domainname" type="text" placeholder="domen"/>		<?php//		выводим чекбоксы		foreach ($newdomain as $value)			{			$value->showcheckbox();						}		?>		</div>		<input style="margin:7px;" type="submit" name="submitBtn" value="<?php echo $buttontext ?>"/>      </form>  <?php        if (isset($_POST['submitBtn']))    {        $domainbase = (isset($_POST['domainname'])) ? $_POST['domainname'] : '';        if (strlen($domainbase)>0)        { ?>      	<div id="caption" style="margin-top:8px; margin-bottom:8px; font-weight:bold"><?php echo $resulttext ?> :</div>      	<?php      	foreach ($newdomain as $value)			{			// если была отмечена галочка, то проверяем домен			if (isset($_POST[$value->name])) $value->checkDomain($domainbase);									}	}     }

На всякий случай я убрал использование пространства имен, вам тоже в файле Punycode.php нужно убрать строчку (она в самом начале),

namespace TrueBV;

Ибо пространства имен работают только в php 5.3+

Link to comment
Share on other sites

  • 0

Всё получилось! Завтра ещё стилизую - будет вообще супер. Готов с удовольствием отблагодарить, пишите в личку номера ceb1f5c5b3efd970c882a1e91e021463.gif

 

 

Новички — Недавно зарегистрированные пользователи. Для них не работают личные сообщения, им нельзя изменять рейтинг тем и сообщений. Переход в группу «Пользователи» происходит автоматически при достижении 30 постов.

=)

Link to comment
Share on other sites

  • 0

Моя почта - [hide]creat-support@yandex.ru[/hide], скиньте туда.

 

Пожалуй, я тут зависну и набью 30 постов. Единственный форум, где просто помогли, молча. Везде помогают по принципу: "Как пожарить еишницу?" в ответ - "А вы сварите, так полезнее!" facepalm.

Edited by Rudiarius
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy