мир интернетComputer Review#17(67)

Yurik_A, iyurik@hotmail.com, ICQ 47573945,
специально для "CR"


CGI программирование в WWW

 Всемирная компьютерная паутина прочно вошла в нашу жизнь. Для кого-то это стало образом жизни. Один что-то скачивает, другой ищет полезную информацию, большинство просто так бродят в сети, треплются в чатах, реже занимаются hack’ерством. Так или иначе, многие оставляли запись в гостевых книгах, участвовали в форумах, голосовали и т.д., не задумываясь, как это все работает. А работает это не так уж загадочно, как кажется.

 Какие-то умные дядьки в свое время придумали CGI - Common Gateway Interface, что является стандартом интерфейса внешней прикладной программы с информационным сервером типа HTTP - WWW в Интернете или Интранете (разница в том, что Интранет - это большая локальная сеть с поддержкой HTTP). Обычно гипертекстовые документы, написанные на языке HTML, представляемые на WWW-сервере, содержат статические данные. С помощью CGI можно создавать CGI-программы, называемые шлюзами или скриптами (CGI Script), которые во взаимодействии с такими прикладными системами, как система управления базой данных, электронная таблица, деловая графика и др., смогут выдать на экран пользователя динамическую информацию. Программа-шлюз запускается WWW-сервером в реальном масштабе времени. WWW-сервер обеспечивает передачу запроса пользователя шлюзу, а она в свою очередь, используя средства прикладной системы, возвращает результат обработки запроса на экран пользователя.

 Как все происходит. Когда вы набрали URL (веб-адрес) в адресной строке броузера, он соединяется с сервером по протоколу TCP/IP и просит у него, например, файл index.htm следующим образом: "GET /domain.ru/index.htm HTTP/1.0". Сервер отвечает: "HTTP/1.0 200 Okay Content-Type: text/html". Далее, после пустой строки, она нужна, чтобы отделить заголовок от тела, поступает информация из самого URL <HTML><BODY>. Если файл отсутствует на сервере, то он выдаст: "403 File not found". Также браузер посылает серверу свое имя и версию, например, "User-Agent: Mozilla/3.0", существует много других типов запросов, все значения запросов хранятся в переменных среды CGI, из которых считываются по надобности программами сервера.

 Программы могут быть двух типов: компилированные, т.е. переведенные в машинный язык, и в виде скриптов (сценариев). Обе используют набор инструкций для выполнения определенного задания, но программа скомпилирована в эффективный двоичный формат, что позволяет ей быстро выполняться на определенной платформе, в то время как скрипт хранится в оригинальном текстовом формате. За счет того, что скрипты значительно короче программ, они выполняются тоже достаточно быстро, скрипт не нужно компилировать перед запуском, что является замечательным свойством для быстрого создания и внесения исправлений в него.

 Скрипты чаще всего пишут на языке Perl (этот язык является интерпретируемым языком, созданным программистом Лари Уоллом для обработки больших текстов и файлов и расшифровывается, как Practical Extraction and Report Language - язык для практического извлечения данных и составления отчетов), они имеют префикс (расширение) .cgi и .pl, хранятся, как правило, в специальной директории /cgi-bin/ сервера. Активизируются чаще из форм на странице, есть и другие способы. Например, <form action="cgi-bin/guestbook.pl" method="post">, заполненные поля формы гостевой книги отправляются скрипту методом POST (есть еще метод GET, разница в том, что при GET данные из формы болтаются в адресной строке броузера), скрипт их проверяет и обрабатывает согласно инструкциям. Он может обрабатывать полученные данные так: добавить их в текстовый файл, ввести в базу данных, вставить в электронное письмо, добавить в существующую web-страницу, создать новую web-страницу, отобразить ее в окне броузера. Для исполнения скриптов на Perl требуется интерпретатор этого языка.

 Для наглядного примера разберем скрипт, который является текстовым (есть еще графический, который выводит цифры картинками) счетчиком посетителей сайта:

Листинг.counter.pl

#!/usr/local/bin/perl # строка нахождения интерпретатора Перл
# на сервере
# - это комментарий
# Текстовой счетчик посетителей сайта

   $count_file = "data/count.txt"; # файл для записи результата
   open(COUNT,"$count_file") || die "$!\n"; # открывает файл и
   $count = ; # смотрим цифру
   close(COUNT);
   if ($count =~ /\n$/) {
   chop($count);
   }

   $count++; # прибавляем

   open(COUNT,">$count_file") || die "$!\n"; # добавляем итог в файл
   print COUNT "$count";
   close(COUNT);

   print "Content-Type: text/html\n\n"; # печатаем в HTML документ
   print "$count"; # полученную цифру

 Данный скрипт при активизации прибавляет "1" к цифре в файле count.txt, а потом заменяет в нем число на итог, также при этом вписывая его в HTML страницу. В странице этот скрипт можно вызвать с помощью технологии SSI (подробнее о ней я расскажу ниже). В том месте, где задумано показать, каким по счету является посетитель, вставляется строчка <!--#exec cgi="CGI-BIN/counter.pl" -->, которая при исполнении скрипта сменяется на цифры.

 С помощью Перл можно создавать всевозможные скрипты, которые могут делать очень много разных действий: от чата до виртуального банка, все зависит от фантазии. Так как скрипты работают на сервере, вы видите только результат их работы. Многие задаются вопросом, как вычислили их IP и domain, да еще и написали на просматриваемой странице?! Да очень просто, среди переменных среды CGI есть такие переменные, как "{REMOTE_ADDR}" и "{'SERVER_NAME'}", они-то и делают это секретное дело - скриптам доступны переменные CGI. Сразу скажу, что переменные CGI доступны для Java и Vbasic-скриптов, но о них я рассказывать на буду, они исполняются на компьютере клиента, а не на сервере, что никак нельзя отнести к CGI-программированию. CGI-скрипты - очень полезная, как вы сами видите, штука. С их помощью можно легко решать задачи программного характера на сайте.

 Было бы глупо думать, что только один язык используется для программирования в WWW. Нет, их много, наверное, столько же, сколько для создания программ общего характера. Так, многим известный C/C++ тоже применяется для программирования в Интернете, его программы тоже могут быть в виде скриптов, к тому же он - родной язык операционных систем типа Unix, однако, чаще его программы компилируют, и они тогда имеют префикс .exe. На этом с Си покончим и перейдем к технологии SSI.

 Технология SSI (Server Side Includes) создания активных документов была предложена фирмой Questar Microsystems. Эту технологию поддерживают такие WWW сервера, как Apache, Netscape, Spry Web и Microsoft Internet Information Server. Поддержка этой технологии связанна с специальной конфигурацией WWW-сервера и протокола HTTP. Технология SSI позволяет использовать в HTML-документах такие возможности, как: опрос текущего времени и даты, условного выполнения форматирования в зависимости от логических сравнений, формировать запросы или модифицировать базы данных, посылать электронную почту, вызывать программы или CGI-scripts. Возможности технологии SSI+ задают механизм совместного использования языка HTML и программ CGI scripts.

 Формат команды SSI+: <!--#'<tag><variable set>'--> где:

 <!--# начало обращения к SSI команде (tag),

 <tag>
одна из следующих команд: 'echo', 'include', 'fsize', 'flastmod', 'exec', 'config', 'odbc', 'email', 'if', 'goto', 'label', 'break', <variable set>, значения которых зависят от команды <tag>.

 Формат задания переменных такой, как и формат задания атрибутов для команд языка HTML: <variable name> '=' '"' variable data '"' <variable name2> '=' '"' variable data2 '"' <variable name n> '=' '"' variable datan '"'

 -->
конец обращения к SSI команде.

 Отмечу, что в отличие от обычных команд языка HTML, для команд SSI+ задание значений переменных-атрибутов должно обязательно заключаться в "двойные кавычки" (") (для языка HTML значения атрибутов заключаются в двойные кавычки только в случае, когда они содержат служебные символы или пробелы). Если сервер и броузер не поддерживают режим работы SSI, то команда SSI воспринимаются просто как комментарий и не выводятся на экран просмотрщика. Если на сервере разрешено выполнение исполняемых модулей (CGI Script программы), то в документе могут быть использованы и переменные окружения CGI. SSI+-документ по умолчанию имеет префикс .sht или .shtm для их отличия от обычных HTML-документов, которые имеют префикс .html или .htm. Хотя при конфигурации сервера можно объявить все документы как SSI, но это снижает его эффективность. К примеру, в том месте страницы, где хотят, чтобы остановилась ее загрузка, вставляют строчку: <!--#break -->, дальше этой строки страница не загрузится.

 ASP (Active Server Pages). Наверное, нет таких областей в компьютерном мире, где бы ни побывала фирма Microsoft. В ноябре 1996 года было объявлено об Active Platform, как о взгляде Microsoft на будущее развитие Интернет. В данной идеологии клиентская и серверная части выглядят совершенно одинаково. Они состоят из определенного набора блоков, включающих в себя HTML, скрипты, компоненты и служебные сервисы. Использование одинаковых подходов на клиентской и серверной части, а также компонентов и средств разработки, позволяет ускорить разработку приложения и дает возможность создавать сложные приложения, которые будут работать с максимальной эффективностью. Нагрузка распределяется между сервером и клиентом оптимальным образом. Приложения становятся логически централизованными и нецентрализованными физически.

 Смесь средств программирования с использованием HTML (гипертекст), чтение и запись в базу данных посредством ODBC (Открытое подключение к базе данных), масса других возможностей, не требующих применения, но похожих на такие средства программирования, как CGI, JavaScript, Perl, ActiveX и ISAPI.

 Активные страницы не требуют специфичных броузеров (browser). Все скрипты (программы) запускаются и выполняются на сервере, причем броузер получает только результирующие HTML-файлы и не требует от броузера чего-то особенного.

 Типичная ASP - страница состоит из разделов трех типов:

  • Статический HTML
  • Код, выполняемый на сервере
  • Код, выполняемый на клиенте

 Физически ASP является фильтром к IIS, который получает HTML страницу с подпрограммами, выполняет их, формирует зависящий от результатов их выполнения обычный HTML файл и передает его клиенту.

 Ситуация, когда код, находящийся в одном файле, выполняется частично на сервере, а частично на клиенте, может быть первое время сложным для понимания. Код, выполняемый на сервере и на клиенте, выглядит совершенно одинаково, может использовать одни и те же объекты, но несет совершенно разную смысловую нагрузку. Клиентские подпрограммы в основном проверяют правильность заполнения полей форм, обрабатывают события от управляющих элементов ActiveX. Серверные подпрограммы занимаются разбором данных, полученных из форм, и взаимодействуют с различными приложениями на сервере. Можно, например, по введенным данным сформировать SQL-запрос к базе данных, выдать клиенту HTML-файл с результатом запроса в виде таблицы, одновременно с этим вызвать Excel, записать результаты выборки в файл Excel и отослать его пользователю по почте. Такие и подобные задачи решаются с помощью ASP очень красиво и элегантно.

 По сути ASP-файл является шаблоном HTML-файла с подпрограммами. Еще один важный момент в ASP - это возможность взаимодействия из страниц с различными OLE-объектами. Это значительно расширяет возможности по созданию приложений, позволяет использовать уже имеющиеся приложения и общаться с ними по OLE. Простой пример - довольно часто в компании используется определенная система учета ресурсов, публикуемая в Интернете/Интранете, и технология OLE позволяет внутри страницы обратиться к готовому приложению, а не тратить время на создание дополнительных связующих программ.

 Существенным отличием ASP от других систем является возможность использования различных скриптовых языков для создания страниц. Если Netscape позволяет использовать Java при создании страниц, то ASP предоставляет возможность использовать для каждой задачи тот язык, который наиболее для неё подходит. При установке можно сразу использовать VBScript и JavaScript, а после установки дополнительных модулей Java, - Perl и другие языки. Кроме того, подпрограммы, написанные на разных языках, хорошо взаимодействуют между собой.

 Большим плюсом можно считать использование подмножества Visual Basic - Visual Basic Script, который довольно прост, широко распространен: это позволяет не изучать нечто новое для разработки приложения, а использовать уже имеющиеся навыки.

 Файлы ASP имеют расширение .asp, бывает, что на сервер полностью состоит из таких файлов, например, сайт фирмы Microsoft. Можно сразу сделать вывод, что такой сервер, есть нечто подобное MS Windows NT Server или Internet Information Server.

 Серьезную конкуренцию ASP заслуженно составляет PHP/FI. PHP начал жизнь как простая небольшая cgi-оболочка, написанная на Perl. Это система разработки скриптов, включающая в себя CGI-интерфейс, интерпретатор языка и набор функций для доступа к базам данных и различным объектам WWW. Многие считают, что на данный момент PHP является наиболее удобным и мощным средством разработки приложений WWW и интерфейсов к БД (базам данных) в сети Интернет. Система PHP устанавливается на Web-сервер в качестве обработчика определенного mime - типа, аналогично системе SSI (Server Side Include), то есть PHP-скрипт представляет собой обычный HTML-документ с вставками тэгов PHP-команд. Благодаря этому создание и отладка скриптов PHP значительно проще, чем отладка и создание скриптов на других языках. Вместе с тем, PHP обеспечивает разработчику очень большие возможности при разработке приложений Web или активных страниц, так как обладает значительным набором функций и относительно большой гибкостью. По своему синтаксису язык PHP наиболее походит на классический С/C++, хотя видны и некоторые заимствования из Java и Perl.

 Используют PHP при создании часто обновляемых, либо громоздких в написании программ, скорость выполнения для которых не является критическим параметром (имеется в виду, что, если разница между временем выполнения скрипта на С и скрипта на PHP составляет 10-20%, то вполне можно предпочесть скорость разработки скорости выполнения) и необходимо быстрое создание полнофункционального приложения. PHP используется в основном при работе с базами данных, но возможно применение в различных областях программирования в Инете. Файлы PHP имеют префикс .phtml, .pht, .phpN (где N - версия этого языка). Классический пример сайта на PHP - это всем известный http://pik.irk.ru/chat.

 Само собой разумеется, что существуют другие средства и спецификации для создания программ, ориентированных для WWW. Нет смысла рассказывать о всех, да это и трудно сделать, так как постоянно возникают новые технологии. Просто скажу, что так или иначе они схожи с теми, которые освещены в данной статье. Желающие освоить и использовать то или иное средство, смогут найти руководство в Интернете, либо в литературе, посвященной этим вопросам. Полные спецификации языков доступны на официальной странице W3C.

 Может возникнуть проблема: как и где проверить свое творчество… Выход есть. Вам придется установить на компьютер виртуальный сервер. Я бы порекомендовал Apache (http://www.apache.org, http://www.apache.ru), существуют версии под Windows'95/98/NT. Далее следует установить интерпретаторы Perl (http://www.perl.com) и PHP (http://www.php.net), если вы хотите их использовать. Для работы SSI не требуется специальной программы, Apache поддерживает эту технологию. Для ASP (http://www.activeserverpages.ru) требуется Microsoft Internet Information Server.

 В последнее время появилась еще технология MHTML (Meta-HTML), правда, я о ней толком еще не знаю, это что-то похожее на PHP и ASP.

 Теперь, если вы, находясь в Интернет, встретите, например, файл "index.asp" и поймете, с чем имеете дело - это значит, что данная статья пошла на пользу, и вы немного знаете о программировании для WWW.


мир интернетComputer Review#17(67)

Copyright © 1998 "Компьютерное обозрение"
Дизайн - leidenwebdesign - http://leiden.irkutsk.ru