PHP содержит набор функций "контроля", предназначенных для проверки информации об именах хостов, IP-адресах и почтовых обменах. Например, если создается справочный сайт, перед добавлением новых URL-адресов можно автоматически проверить правильность информации о хосте и контактной информации. Поступая таким образом, можно сэкономить пользователям немало усилий, чтобы в дальнейшем не оказалось, что сайт не существует или почтовый адрес некорректен.
directory_submit.html — HTML-код для формы ввода информации
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Отправте свой сайт</title>
</head>
<body>
<h1>Отправте сайт</h1>
<form action="directory_submit.php" method="post">
<table width="30%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>URL</td>
<td><input name="url" type="text" value="http://" size="30"></td>
</tr>
<tr>
<td>Адрес электронной почты</td>
<td><input name="email" type="text" size="30"></td>
</tr>
<tr>
<td> </td>
<td><input name="" type="submit" value="Отправить"></td>
</tr>
</table>
</form>
</body>
</html>
В окне веб-браузера это будет выглядеть так.
После щелчка на кнопке Отправить в первую очередь необходимо убедиться, что URL-адрес размещен на реальной машине, и что хост почтового адреса тоже реален.
Сценарий, предназначенный для выполнения этих проверок, использует две функции из набора сетевых PHP-функций: gethostbyname() и dns_get_mx().
directory_submit.php —сценарий для проверки URL и почтового адреса
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Результаты передачи сайта</title>
</head>
<body>
<h1>Результаты передачи сайта</h1>
<?php
//Извлечение информации из полей формы
$url = $_REQUEST['url'];
$host = $_REQUEST['email'];
//Проверка URL
$url = parse_url($url);
$host = $url['host'];
if (!($ip = gethostbyname($host)))
{
echo 'Хост для данного URL не существует';
exit;
}
echo "IP-адрес хоста: $ip <br>";
//Проверка почтового адреса
$email = explode('@', $email);
$emailhost = $email[1];
//Внимание! Функция dns_get_mx() *не реализована* в Windows-версиях PHP
if(!dns_get_mx($emailhost, $mxhostsarr))
{
echo 'Хост почтового сервера не существует';
exit();
}
echo 'Почтовый сервер: ';
foreach ($mxhostsarr as $mx)
echo "$mx ";
//Если сценарий дошол до этой точки, значит все в порядке
echo '<br>Переданные данные корректны .<br>';
echo 'Спасибо за информацию о вашем сайте .<br>';
?>
</body>
</html>
После выполнения сценария в окно веб-браузера будет выведена информация о проверки имени хоста в URL и почтовом адресе.
Рассмотрим наиболее интересные части сценария.
Вначале к заданному URL-адресу применяется функция parse_url(). Эта функция возвращает ассоциированный массив различных частей имени URL. Доступные порции информации включают в себя протокол в себя протокол (scheme), пользователя (user), пароль (pass), хост (host), порт (port), путь (path), запрос (query), и фрагмент (fragment). Обычно требуются не все эти элементы, но мы сейчас рассмотрим, как из них формируется URL.
Если задан следующий URL-адрес:
http://nobody:[email protected]:80/script.php?varaible=value#anchor
то значения каждой части массива будут следующими:
- Протокол: http://
- Пользователь: nobody
- Пароль: secret
- Хост: example.com
- Порт: 80
- Путь:script.php
- Запрос: variable=value
- Фрагмент: anchor
В сценарии directory_submit.php требуется только информация о хосте, поэтому она извлекается из массива следующим образом:
$url = parse_url($url);
$host = $url['host'];
После этого с помощью функции gethostbyname() можно получить IP-адрес хоста, если он известен службе имен доменов (domain name service — DNS). Функция возвращает IP-адрес, если он существует, или false в противном случае:
$ip = gethostbyname($host)
Можно и наоборот: функция gethostbyaddr() по IP-адресу хоста возвращает его символьное имя. Если применять две эти функции одну за другой, то может получиться имя хоста, отличное от исходного. В этом случае сайт, видимо, использует службу виртуального хостинга, когда одна физическая машина и один IP-адрес обслуживает несколько доменов.
Если искомый URL является допустимым, мы переходим к проверке почтового адреса. Вначале он с помощью функции explode() разбивается на имя пользователя и имя хоста:
$email = explode('@', $email);
$emailhost = $email[1];
Имея имя хоста, несложно проверить, можно ли на него отправить почту. Это делается с помощью функции dns_get_mx():
dns_get_mx($emailhost, $mxhostsarr);
Эта функция возвращаеет для заданного адреса набор MX-записей (Mail Exchange —почтовый обмен) в массиве, заданном переменной $mxhostsarr.
MX-запись хранится на DNS-серверах, и ее проверка выполняется так же, как проверка имени хоста. Машина, указанная в MX-записи, не обязательно является той же, куда поступит почта. Однако она знает, куда необходимо перенаправлять почту. Машин может быть несколько, поэтому функция возвращает массив, а не одну строку с именем хоста. Если в DNS нет записи для данного хоста, значит, почту туда отправить невозможно.
Обратите внимание, что функция dns_get_mx() не реализована в Windows-версиях PHP. Если вы работаете под управлением Windows, то должны пользоваться пакетом PEAR::Net_DNS, который обеспечит аналогичную функциональность.
Если все проверки завершаются успешно, данные можно разместить в база данных для последующего просмотра кем-либо из сотрудников, обслуживающих справочный сайт.
В дополнение к упомянутым функциям можно использовать общую функцию checkdnsrr(), которая для имени хоста возвращает значение true, если это имя присутствует в DNS.
Комментарии(0)
Для добавления комментариев надо войти в систему и авторизоватьсяКомментирование статей доступно только для зарегистрированных пользователей:Зарегистрироваться