Для того чтобы создать свою страничку в глобальной сети сейчас достаточно приложить совсем немного собственных усилий, но чтобы «родной уголок» не выглядел набором «мертвых» статических HTML-документов, приходится использовать различные «динамические» технологии. Часть из них позволяет «оживить» HTML-документ в окне браузера пользователя (Gif89a, DHTML, JavaScript, VBScript, Flash, Java). Другая группа позволяет разработать «думающий» сайт, используя возможности сервера (CGI-приложения, SSI, PHP, ASP, Perl). Рассмотрим на небольшом примере возможности динамической генерации HTML-документов на стороне сервера с помощью сценариев PHP и ASP.
Существует много способов для создания динамических HTML-страниц, но страницы, формируемые с помощью серверных сценариев, имеют несколько неоспоримых преимуществ. По сравнению, например, со сценариями JavaScript или VBScript, которые не могут сохранять свое состояние (кроме как в «ключиках» клиентского браузера), серверные сценарии могут использовать ресурсы самого сервера для сохранения своего состояния или других данных. Кроме того, так как сценарии выполняются на стороне сервера, их не надо передавать по сети, и скорость выполнения таких сценариев не зависит от возможностей клиентской машины.
Типичным примером взаимодействия личного сетевого HTTP-узла является функционирование так называемой гостевой книги. Попробуем на этом примере рассмотреть и сравнить два вида сценариев PHP и ASP, применяемых на популярных web-серверах Apache и IIS соответственно.
Первая задача, которую необходимо решить, как передать и сохранить на сервере текст сообщения, посылаемый посетителем сетевого узла.
В таких случаях вполне подходит CGI (Common Gateway Interface) механизм передачи параметров от пользователя к серверу.
По спецификации CGI чтобы передать параметры приложению на сервере, надо либо разместить их в строке адреса URL (метод get), либо в самом HTTP-заголовке в виде переменных окружения (метод post).
То есть, если в HTML-документе имеется форма с текстовыми полями ввода, то после нажатия на кнопку отправки запроса имеем:
Метод get | Метод post |
---|---|
HTML-документ | |
<form action="myscript" method="get"> <input type="text" name="Var1" value="Alex"> <input type="text" name="Var2" value="Hello"> ... </form>
|
<form action="myscript" method="post"> <input type="text" name="Var1" value="Alex"> <input type="text" name="Var2" value="Hello"> ... </form>
|
приложение на стороне сервера | |
Сформированная строка адреса запроса:myscript?Var1=Alex&Var2=Hello Командная строка вызова CGI-приложения: myscript Var1=Alex Var2=Hello Таким образом, приложение myscript получит при вызове два параметра в командной строке Var1=Alex и Var2=Hello , из которых и сможет получить необходимые значения полей ввода Var1 и Var2 .
|
Сформированная строка адреса запроса:myscript Переменные окружения в HTTP-заголовке Var1=Alex Таким образом, для доступа к значениям полей ввода приложению myscript необходимо выбрать значения у переменных окружения Var1 и Var2 .
|
Отсюда сразу видно, что для передачи длинных строк более удобен метод post, так как ограничения на длину строки адреса запроса не актуальны. Зато метод get прост для передачи параметров при простом переходе по ссылке в HTML-документе и не требует наличия в документе формы с кнопкой отправки запроса.
Итак, в гостевой книге сообщение может иметь достаточно большую длину, поэтому будем использовать метод post. Допустим, у нас имеется следующая форма:
Допустим, PHP сценарий добавления новой записи называется addsign.php
, а ASP addsign.asp
.
Чтобы сообщения сохранялись на сервере, можно воспользоваться возможностью управления файлами на сервере.
Так, для каждого сообщения можно создавать отдельный текстовый файл, содержащий его тело.
Для удобства перечисления можно использовать числовое имя файла, а общее количество сообщений хранить в отдельном файле.
Перечислим необходимые функции и методы соответственно:
|
Теперь код сценариев добавления новой записи. Будем считать, что через 1000 обращений новые сообщения начнут перезаписываться поверх старых, чтобы не переполнять дисковое пространство:
|
А теперь код сценариев просмотра записей гостевой книги:
|
Очевидно, что при большом количестве сообщений пользователю придется долго ждать окончания загрузки страницы, поэтому имеет смысл гостевую книгу «разбить на страницы».
Для этого хорошо подходит передача параметров методом get, так как можно с помощью обычной гиперссылки передавать номер сообщения, с которого надо начать показ.
Например, до показа сообщений вывести строчку вида <a href=«guestbook.php?start=10»>Следующие сообщения...</a>
, а в самом начале анализировать строку запроса на присутствие параметра start
, и если он задан выдать соответствующую «порцию» сообщений.
Остальные модернизации «гостевой книги» ограничиваются только вашей фантазией. Удачи!