Обзор сетевых протоколов
Протоколы — это правила общения в конкретных ситуациях. Например, хорошо известен протокол встречи со знакомым: вы здороваетесь, пожимаете руку, разговариваете и затем прощаетесь. Различные ситуации требуют соблюдения различных протоколов. Человек другой культуры может ожидать другой манеры общения, что зачастую весьма затрудняет взаимодействие. Аналогично устроены и сетевые протоколы.
Как и ритуалы общения между людьми, различные компьютерные протоколы применяются в различных ситуациях и приложениях. Для передачи и приема веб-страниц используется протокол HTTP, или протокол передачи гипертекста (Hypertext Transfer Protocol). Возможно, вы также знакомы с протоколом FTP —протоколом передачи файлов, применяемым для пересылки файлов по сети между компьютерами. Существует множество других протоколов.
Протоколы и другие стандарты Интернет описаны в документах, называемых RFC (Requests For Comments —Запросы на комментарии). Эти стандарты составляются организацией Internet Engineering Task Force (IETF). Документы RFC широко распространены в Интернет. Основным их источником является веб-сайт редактора RFC: http://www.rfc-editor.org/.
Если при работе с каким-либо протоколом возникают трудности, документы RFC могут послужить надежным источником информации, полезным при отладке кода. Однако эти документы очень подробны и часто содержат сотни страниц.
Наиболее известными документами являются, например, RFC2616, содержащий описание протокола HTTP/1.1 и RFC822, в котором описан формат почтовых отправлений Интернет.
В данной главе рассматриваются аспекты PHP, использующие некоторые из этих протоколов. Мы обсудим отправку почтовых сообщений с применением протокола SMTP, получение почты с помощью POP и IMAP, соединение с веб-серверами по HTTP и HTTPS, а также пересылку файлов по FTP.
Отправка и получение почты
Основной способ отправки и получения почтовых сообщений в PHP заключается в простом вызове функции mail(). Ее применение обсуждалось ранее, поэтому здесь мы не будем к ней возвращаться. Эта функция использует для отправки почты протокол SMTP (Simple Mail Transfer Protocol — Простой протокол пересылки почты).
Для повышения функциональности mail() можно воспользоваться одним из множества свободно распространяемых классов. Протокол SMTP предназначен только для отправки почты. А для получения почты с почтового сервера используются протоколы IMAP (Internet Message Access Protocol —Протокол для доступа к сообщениям Интернет, описанный в RFC2060) и POP (Post Office Protocol —Почтовый протокол, описанный в RFC1939 и STD0053). Эти протоколы не предназначены для отправки сообщений.
IMAP применяется для получения и управления почтовыми сообщениями, хранимыми на сервере, и является более сложным, чем POP, основное применение которого заключается в простой загрузке сообщений на клиентскую машину и удалении их с сервера.
PHP содержит библиотеку IMAP. Ею можно воспользоваться для установки не только IMAP-соединений, но соединений POP и NNTP (Network News Transfer Protocol —Протокол передачи сетевых новостей).
Использование других веб-сайтов
Одно из лучших применений веб заключается в возможности использовать, изменять или встраивать существующие службы и информацию в собственные страницы. PHP существенно облегчает эти действия.
Предположим, что компания, в которой вы работаете, требуется отображать на своей домашней странице котировки собственных акций. Эта информация доступна в веб на сайте некоторой фондовой биржи, но как ее получить?
Прежде всего необходимо определить URL-адрес, по которому размещена нужная информация. После этого всякий раз, когда кто-либо заходит на домашнюю страницу вашей компании, можно открыть соединение с этим URL, получить страницу и извлечь из нее соответствующую информацию.
В качестве примера напишем сценарий, который получает и форматирует биржевую информацию NASDAQ (Система автоматической котировки Национальной ассоциации биржевых диллеров), публикуемую на сайте AMEX. Берется пример котировки акций Интернет-магазина Amazon.com. (Информация, необходимая для вашей страницы, может отличаться, однако принцип тот же).
Эта технология известна под названием "вырезания из экрана", поскольку вы берете информацию, изначально предназначенную для отображения на экране, и изымаете из нее те части, которые нужны для представления с помощью интерфейса.
lookup.php —сценарий, запрашивающий информацию NASDAQ о котировке акций компании, обозначение которой передается в переменной $symbol
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Котировки акций от NASDAQ</title>
</head>
<body>
<?php
//Выбор обозначения компании
$symbol = 'AMZN';
echo "<h1>Котировка акций $symbol</h1>";
$theurl = "http://www.amex.com/equities/listCmp"
."/EQLCDetQuote.jsp?Product_Symbol=$symbol";
if (!($contents = file_get_contents($theurl)))
{
echo 'Невозможно открыть URL';
exit;
}
//Найти нужную часть страницы и отобразить ее
$pattern = "(\\$[0-9]+\\.[0-9] +)";
if (eregi($pattern, $contents, $quote))
{
echo "<p> Последняя цена продажи $symbol: ";
echo $quote[1];
echo '</p>';
}
else
{
echo 'Котировка недоступна';
}
//Указать источник информации
echo '<br>'
.'Информация получена с сайта <br>'
."<a href =\"$theurl\">$theurl</a><br>"
.(date('l jS F Y g:i a T'));
?>
</body>
</html>
Сам сценарий достаточно прост — фактически все функции, используемые в нем, уже рассмотрены нами ранее, хотя здесь они применяются по другому.
При обсуждении чтения из файлов, упоминалось, что функции можно использовать для чтения из URL-адреса. Именно так и происходит в данном примере. Следующий вызов функции file_get_contents():
$contents = file_get_contents($theurl)
возвращает полный текст страницы по заданному URL-адресу, который затем сохраняется в переменной $contents.
C помощью файловых функций PHP можно сделать очень многое. Представленный пример кода просто загружает веб-страницу по HTTP, тем не менее, совершенно аналогично можно еще и взаимодействовать с внешними серверами через HTTPS, FTP и другие протоколы. Для решения некоторых задач может потребоваться более специализированные подходы. Часть функциональности FTP доступна только в специфических функциях FTP, и не доступна через fopen() и другие файловые функции. Позже мы рассмотрим пример использования FTP. При решении определенных задач, связанных с HTTP и HTTPS, может потребоваться библиотека с URL. C помощью этой библиотеки выполняется вход на веб-сайт и имитация прохода пользователем по нескольким страницам.
Получив в использование функции file_get_contents() в переменной $contents полный текст веб-страницы, можно выполнить поиск требуемой части страницы черех регулярное выражение и функцию eregi() :
$pattern = "(\\$[0-9]+\\.[0-9] +)";
if (eregi($pattern, $contents, $quote))
{
echo "<p> Последняя цена продажи $symbol: ";
echo $quote[1];
echo '</p>';
}
Представленный подход можно применять для достижения многих целей. Другим примером может послужить извлечение информации о погоде в каком-нибудь месте и вставка ее на свою страницу.
Комментарии(0)
Для добавления комментариев надо войти в систему и авторизоватьсяКомментирование статей доступно только для зарегистрированных пользователей:Зарегистрироваться