PDA

Просмотр полной версии : Whois. Ответ сервера


dimash
24.03.2009, 21:53
Добрый день,
Урывок рабочего кода:
$fp = fsockopen($whois, 43);

fputs($fp, "$domain\r\n");

$str = "";

while(!feof($fp))

{

$str .= fgets($fp,128);
$buffer = fgets($fp, 1024);
echo "{$buffer}";

}

fclose($fp);

Вопрос №1.
Почему, если я снимаю строку кода echo "{$buffer}"; с предыдущего кода и встравляю ее в продолжение далее: // если в ответе имеется фраза-отказ, домен не

// зарегистрирован, если такой фразы нет -

// следовательно домен зарегистрирован

if(!preg_match("/".$not_found_string."/is", $str)) {
echo "Домен зайнятий";
[B}print $buffer;[/B]
}
else {
echo "Домен вільний <br/>";
}[/SIZE]
то ответ на выводится?

Вопрос №2.
Я получаю ответ сервера в виде строки % Rights restricted by copyright. % It has been obtained by querying a remote server: % domain: site.net.ua tech-c: TROL-UANIC nserver: ns1.spam.net.ua changed: hostmaster@megapol.net.ua 20081030
Как ее сделать более читабильной. Хотя бы пока речь не идет о полной информации, а только о ентерах, например посмотрите "http://imena.ua/whois.php?domain=domenforum.com.ua".

Whois, проверка доменов. (http://webdeveloper.net.ua/whois/)

neval
24.03.2009, 22:10
Для начала осмотреть каким образом отдает результат команда whois
Затем немного подумав добавить < /br>
А только после этого понять ,что в первом случае в цикле выводит построчно результат чтения, а во втором он что должен вывести?

Sharky
24.03.2009, 22:10
подозреваю по поводу первого, что....$fp = fsockopen($whois, 43);

fputs($fp, "$domain\r\n");

$str = "";

while(!feof($fp))

{

$str .= fgets($fp,128);
$buffer = fgets($fp, 1024);
$buffer = str_replace("\r\n", "<br>", $buffer);
echo "{$buffer}";

}

fclose($fp);

dimash
24.03.2009, 23:36
Да, я нашел. Спасибо. Это правильно.
Остается вопрос номер II.
Я повторю смысл.
Whois, проверка домена (http://www.webdeveloper.net.ua/whois/)
Добрый день,
Урывок чернового варианта: $fp = fsockopen($whois, 43);

fputs($fp, "$domain\r\n");

$str = "";

while(!feof($fp))

{

$str .= fgets($fp,128);
$buffer = fgets($fp, 1024);
echo "{$buffer}";

}

fclose($fp);

Вопрос. Почему, если я снимаю строку echo "{$buffer}"; и встравляю в продолжение, за циклом:
if(!preg_match("/".$not_found_string."/is", $str)) {
echo "Домен зайнятий";
[B}print $buffer;[/B]
}
else {
echo "Домен вільний <br/>";
}
ответ сервера на выводится?

dimash
24.03.2009, 23:37
А только после этого понять ,что в первом случае в цикле выводит построчно результат чтения, а во втором он что должен вывести?
Как же? Я записал в буфер строку ответа.

neval
25.03.2009, 00:43
Как же? Я записал в буфер строку ответа.

У тебя в цикле в переменную $buffer заносятся строки, полученые fgets
Соответственно, по завершению цикла в переменной $buffer будет последнее полученое значение. В твоем случае это пустая строка.

Исправь

while(!feof($fp))

{

$str .= fgets($fp,128);
$buffer = fgets($fp, 1024);
echo "{$buffer}";

}

на

while(!feof($fp))

{

$str .= fgets($fp,128);
$buffer[] = fgets($fp, 1024);
print_r($buffer);

}
и ты увидишь в чем твоя ошибка

dimash
25.03.2009, 01:08
решил строкой,спасибо.

neval
25.03.2009, 01:12
Наверное лучше было бы через массив и foreach