Web дизайн\Учебник по HTML
Глава 16. CGI и сбор данных
В предыдущей главе мы занимались созданием и разработкой интерфейса электронных
бланков. Теперь мы зайдем за кулисы и посмотрим, что происходит по ту
сторону форм. Увидим, как обрабатываются данные и готовятся к отправке
обрат но, пользователю. Этим занимаются специальные небольшие программы,
называю' щиеся скриптами. Скрипты хранятся на сервере. Они получают данные
с пользовательских компьютеров, которые обращаются к ним с помощью значений
атрибута acti on элемента <form>. После этого происходит обработка:
считается все, что должно считаться, фильтруется все, что должно фильтроваться,
и т. д. Наконец, результаты в какой-то форме отправляются пользователю.
В этой главе мы обсудим ком поненты, составляющие прикладную систему,
вы узнаете кое-что о скриптах, с помощью которых она работает.
Итак, в данную главу вошли следующие разделы:
- основы интерфейса CGI; языки, используемые для написания скриптов;
- принцип работы скриптов; передача данных; возвращение результатов;
- поиск в Сети и использование готовых скриптов; создание собственных
скрип тов.
Что такое CGI?
Если вы просто заполните электронный бланк, нарисованный на веб-странице,
и будете плясать с бубном вокруг компьютера, вряд ли произойдет какая-то
обработка данных этого бланка. Кнопка Отправить на всех формах, написанных
нами в предыдущей главе, посылала данные в никуда. Дело в том, что на
том конце провода, то есть на сервере, нет скрипта (то есть сценария,
программы), способного обработать информацию, поступающую от пользователя.
Эта глава посвящена этим са мым обработчикам. В главах 17 и 18 вы узнаете
о том, что JavaScript — вполне под ходящая среда для осуществления операций
над некоторыми типами данных.
Итак, каким же образом информация передается с HTML-страницы на сервер?
CGI — это общий шлюзовой интерфейс, созданный для того, чтобы формы дей
ствительно стали интерактивными.
Форма — это всего лишь руль, педали и панель приборов интерактивности;
CGI-скрипты — это ее двигатель. Они отвечают на пользовательские запросы,
обрабатывают данные, ведут счетчик посетителей. Таким образом, именно
скрипты взаи модейапвуют с пользователями, а формы лишь отражают это взаимодействие.
На практике ссылка на CGI-скрипт работает точно так же, как самая обычная
ссылка на HTML-страницу. Но скрипт — это, конечно, нечто более сложное,
чем вебстраница. Когда запрашивается последняя, файл читается, интерпретируется
«выводится браузером. Когда запрос обращается к программе, та начинает
выполняться на сервере и осуществляет поиск по базам данных, сортирует,
обсчитывает или отправляет электронную почту. Именно скрипт предоставляет
все возможности для организации комплексной обработки информации. В случае
простейших HTML-форм программы CGI обычно получают значения переменных,
производят заданные вычисления и отсылают обратно результаты.
Интерфейс CGI довольно сильно изменил представления людей о возможностях
веб-сайтов. До его появления страницы были, как говорилось в одной рекламе,
«слабыми и безжизненными». С приходом CGI-скриптов страницы буквально
ожили, научились реагировать на действия и запросы пользователя, стали
динамичными.
Языки CGI
Вы не сможете написать скрипт на HTML. Вы никогда не напишете его на
CSS. Даже на JavaScript вам сделать этого не удастся. Запомните, что все
перечисленное - только лишь языки для написания веб-документов. Скрипты
пишутся на языках программирования. Среди них можно назвать язык написания
сценариев под Unix, Perl, С, AppleScript, а также Visual Basic. Чтобы
успешно заниматься веб-программированием, вам необходимо знать хотя бы
один из них. Следует помнить, что веб-дизайн и веб-программирование —
это не одно и то же! Сценарий можно (и нужно) сохранять в отдельном файле
на сервере. Приведем краткий обзор перечисленных языков:
- Язык написания сценариев для Unix-систем
(нечто подобное представляет собой командный файл DOS или Windows).
- Область применения. Это неплохой
выбор для написания маленьких или временных CGI-пррограмм.
- Сложность. Достаточно прост, результаты
можно увидеть сразу же, однако он не подойдет для больших многопользовательских
программ типа «Виртуальный супермаркет», размещаемых на коммерческих
веб-сайтах.
- Perl.
- Область применения. Программы средней
сложности. Применение этого языка выгодно тем, что его поддерживает
большинство платформ.
-Сложность. Язык осваивается довольно
быстро людьми, знакомыми с основами алгоритмизации и программирования.
Программы являются интерпретируемыми, то есть их не нужно компилировать
в некое стабильное, формализованное приложение типа того, что получается
при работе, например, с языком С. К тому же существуют специальные библиотеки
Perl, конвертирующие данные, поступающие в программу, в удобоваримый
формат. Информацию по этому языку можно найти в Сети, например на
http:// dir.yahoo.com/Computers_and_
Internet/Programming_and_Development/Languages/
Или на http://www.yahoo.com/Computers_and_
Internet/Internet/World_Wide_ Web/Programming/PerLScripts.
ПРИМЕЧАНИЕ
Интерпретируемым языком называется такой язык программирования,
который не требует для выполнения сценария или программы трансляции исходного
кода в машинный. До момента запуска скрипт выглядит точно таким образом,
как он был написан программистом. Только при запуске интерпретатор языка
быстро переводит программу в машинные коды, распознаваемые сервером. Этот
дополнительный шаг делает процесс работы сценария чуть более растянутым,
но зато интерпретируемые программы гораздо проще редактировать и по необходимости
обновлять.
- С.
- Область применения. Манипуляции над
данными любой сложности. Программы, написанные на этом полноценном транслируемом
языке программирования, позволяют получить ответ на сложный запрос с
самой высокой скоростью. Наиболее гибкий язык.
- Сложность. Нормальный язык программирования,
который знает большинство профессионалов. Существует огромное количество
специализированных библиотек для создания веб-приложений, что сильно
облегчает жизнь их разработчикам. Под некоторые платформы разработаны
популярные ва риации на тему С, такие как Объектный С и C++.
- Веб-серверы Macintosh.
- Область применения. Популярная альтернатива
аналогичным серверам под Windows и Unix/Linux.
- Сложность. Простой метод связывания
серверных приложений с языками написания скриптов под Мае (типа AppleScript).
Если заинтересовались, рекомендую ознакомиться с содержимым сайта http://www.scriptweb.com/,
посвященным AppleScript.
Простой CGI-скрипт
CGI-программы могут быть как чрезвычайно сложными, так и довольно просты
ми. Вот пример простого скрипта, написанного на языке сценариев Unix:
#!/bin/sh echo "Content-type: text/html"
echo " "
echo "<html><head><title>Cтраница, созданная CGI-программой</title>
</head>"
echo "<body>Я - CGI-сценарий. Я сделал для Вас эту страничку.
</body> </html>"
Даже если вы не знакомы с Unix, думаю, вы догадались, что здесь происходит.
В первой строке (# /bin/sh) описывается системная оболочка, под которую
написана программа. Если бы мы писали скрипт под Windows NT, эту строку
следовало бы исклю чить. (Если вам словосочетание «системная оболочка»
ни о чем не говорит, то на данном этапе вы можете опустить эту строку,
не задумываясь над ее содержимым.)
Во второй строке (echo "Content-type: text/html") используется
команда echo. Здесь говорится о том, данные какого типа (в MIME-формате)
сейчас последуют. (Команда echo — это общий прием командных файлов и сценариев
для эмуляции нажатия соответствующих клавиш пользователем на клавиатуре.)
Что касается MIME, то это метой доставки бинарных данных с использованием
исключительно набора символов таблицы ASCII. На сегодняшний день зарегистрированы
сотни форматов, но примени тельно к CGI-приложениям имеет смысл назвать
два наиболее популярных: text/html (для HTML- и XHTML-вывода) и text/plain
(вывод обычного текста).
Третья строка (echo " ") создает пустое пространство, сообщая
серверу о том, что далее следуют данные, описанные в предыдущей строке
с помощью Content-type.
Наконец, четвертая и пятая строки — это, собственно, код HTML. Через
сервер он передается па браузер и интерпретируется последним так, будто
просто считывается из файла.
Итак, что происходит в этом сценарии в целом. Начинается скрипт с того,
что вебсерверу сообщается о поступлении неких данных, написанных на HTML.
После этого данные действительно посылаются, они содержат несколько строк
какого-то текста и (шмотки обычной веб-страницы. После выполнения скрипта
сервер передает эти строк» на удаленный браузер, где они интерпретируются
и выводятся на экран.
Обращение к CGI
Несмотря на то что так и не было принято единого соглашения между серверами,
все-таки большинство CGI-npoграмм устанавливается в специально отведенные
для них каталоги. Обычно это подкаталог со стандартным названием cgi-bin.
Если вам не разрешают устанавливать свои программы в этот каталог, нужно
утрясти этот вопрос с системным администратором или представителем поставщика
услуг Интернета. У них же, видимо, придется узнавать, как инсталлировать
скрипт (впрочем, процесс обычно сводится к копированию его с вашего жесткого
диска на сервер в соответствующий каталог). Каталог cgi-bin не обязательно
будет называться именно так, более того, он вообще может располагаться
где-нибудь в довольно странном месте на сервере (например, на многих Mac-машинах,
имеющих юниксоидное ядро системы CGI-скрипты хранятся в папке/Library/WebServer/CGI-Executabtes/,
а обращение к ним происходит с помощью стандартного cgi-bin-ориентированного
URL).
Разместив свои скрипты в положенном месте, можно устанавливать ссылки
на них в своих веб-страницах. Выглядеть они будут так же, как обычные
ссылки на HTML-документы. Допустим, в каталоге cgi-bin хранится скрипт
myscriptsh. Его URL будет следующим: http://www.fakecorp.com/cgi -bi n/myscri
pt. Мало того что пишутся эти адреса так же, как любые другие, они и используются
так же: все те же якоря с атрибутом href, те же src в качестве URL для
графики.
ПРИМЕЧАНИЕ
Иногда провайдеры не требуют наличия специального каталога
cgi-bin. В этом случае скрипты можно хранить где угодно, лишь бы был правильно
указан путь к ним. Но при этом начинает играть роль еще и такой момент,
как корректное расширение: ,р! для программ на Perl, .sh для сценариев
и .ехе для откомпилированных исполняемых программ (например, написанных
на С). Скрипты, хранящиеся в cgi-bin, зачастую воспринимаются и без расширений.
Принцип работы скриптов
Мы не будем вникать во все тонкости процесса создания скриптов, а ограничимся
только базовой теорией, стоящей за ними. Вы уже знаете, что скрипты —
это специализированные программы, принимающие некоторые данные и/или создающие
в ответ какие-нибудь HTML-страницы. Все начинается с вызова скрипта. Для
этого может, например, использоваться кнопка подтверждения на форме (вспомните
предыдущую главу). Когда сервер обнаруживает вызов, он пытается найти
программу для его обработки в каталоге cgi-bin и сообщает ей о том, что
пришла пора немного поработать. Вначале скрипт проверит метод передачи
данных. Потом отыщет имена и значения тех переменных, которые он знает.
Если скрипт к тому же знает, что с этими переменными делать, он выполнит
все инструкции и создаст «благодарственное письмо» пользователю за то,
что тот окончил сен тяжкий труд по заполнению бланка, или же выведет на
экран что-то еще в этом духе.
Скрипты можно вызывать и «напрямую», даже не имея электронного бланка
на своей веб-странице. Они могут быть частью гиперссылкп или даже, к примеру,
содержать URL графического файла. Такой подход используется для запуска
либо очень простых скриптов, либо очень сложных. «Очень простой» скрипт
может выводить «цитату дня», произвольное число или счетчик страниц. «Очень
слож ный» может отвечать за большое веб-приложение, например заказ железподорож
ных билетов по системе «Экспресс-2».
В любом случае скрипт будет иметь смысл только тогда, когда есть корректные
пользовательские данные для передачи и корректные методы их обработки.
Взгля нем на процесс с точки зрения самой программы.
Как я получаю данные из формы
В главе 15 говорилось о том, что есть два метода передачи данных на
сервер: с по мощью либо get, либо post.
Имя метода, нужного скрипту, хранится на сервере в переменной окружения
под названием REQUEST_METHOD. (Любая переменная окружения должна быть
доступна любым программам, в этом ее смысл и состоит.) Метод get добавляет
данные в нец URL (сервер перехватывает их и сохраняет в другой переменной
окружения -QL)ERY_STRING.
Эта строка обычно ограничена одним килобайтом (1000 символов а то и еще
сильнее. Поэтому данный метод не очень популярен.
ПРИМЕЧАНИЕ
Термин «строка» в программировании означает некоторый набор
символов, доступ к которому осуществляется по имени переменной. В нашем
случае эта переменная называется QUERY_STRING. Вы уже, наверное, догадываетесь,
что нужно писать в скрипте? Правильно, нужно заставить его обработать
строку, написав ее имя: QUERY_STRING.
Метод post передает данные на stdin («standard in», стандартное устройство
вво да) с сохранением их в переменной CONTENT_LENGTH. Это производит тот
же эффект как если бы они набирались пользователем на сервере. Задача
скрипта — произве сти анализ и выделить нужные данные из всего набора.
ПРИМЕЧАНИЕ
Под анализом в данном случае подразумевается операция,
аналогичная грамматическому разбору слов. Из пришедших разнородных данных
нужно выбрать что-то, с чем может paбо тать компьютер. То есть выяснить
структуру переменных и уяснить их значения.
Можно выделить две стадии приема данных: декодирование и анализ. Во
избежание потери данных передаваемая информация кодируется на стороне
браузера: например, пробелы заменяются на «+>>, а символы, не являющиеся
текстовыми, заменяются знаком «%» и их шестнадцатеричным кодом. Например,
восклицательный знак передается так: «%21».
СОВЕТ
Есть программы, специально предназначенные для декодирования
данных, передаваемых по Сети. Для серверов Windows и Linux существует
написанная для этих целей на Perl библиотека cgi-bin.pl. Mac-серверы могут
использовать программу Parse для CGI-скриптов на AppleScript.
После декодирования получается входной текст следующего формата (амперсант
просто отделяет пары переменных-значений друг от друга):
NAME1=VALUE1&NAME2-VALUE2&...
Пример из реальной жизни:
Address=1234. ул. Уильяма Храброе Сердце&Сitу=Город Погибших кораблей&Statе=Гренада
Ну и т. д. Нетрудно догадаться, что эти записи совпадают с нолями, которые
заполнялись в форме. Допустим, имеется такой электронный бланк:
<р>
Фамилия: <input type="text" name="last_name" size="40"
maxlength="40" /><br />
Город: <input type="text" name="city" s1ze="40"
maxlength="40" /><br />
</p> Откуда вы узнали об этом сайте?<bг />
<input type="radio" name="where" value="web"
checked="checked" />Поисковая программа в Интернете или Интернет-ссылка. <input type="radio" name="where" value="advert" />
Реклама по радио или телевидению «input type="radio" name="where" value="press" />
Из газеты <input type="radio" name="where" value="other" />
Другое
</p>
Значения, извлеченные из потока данных, будут выглядеть как-то так:
Last name=гребеньков&city=петербург&where=advert
Ясно, что конкретные значения переменных будут зависеть от того, что
введет
пользователь.
Вот и все, что касается основ совместной работы форм и скриптов.
ПРИМЕЧАНИЕ
Если вы не хотите использовать специальные программы для
анализа потока данных, вам придется самому написать алгоритм распознавания
переменных, их значений, разделения пар амперсантами... Обсуждение этого
выходит за рамки данной книги. Советую обратиться к источникам, посвященным
написанию CGI-скриптов.
Свойство mailto:
В главе 15 мы уже упоминали об интересной возможности использования
mail to: в составе URL атрибута action. Это заменяет прямое обращение
к скрипту. Все, что происходит дальше, уже известно: данные кодируются
и посылаются на указанный адрес e-mail (предполагается, что браузер умеет
отправлять сообщения). Рассмотрим пример с использованием свойства mailto:
<form method="post" action="mailto: surveys@fakecorp.com">
Когда пользователь щелкает на кнопке подтверждения отправки формы, результаты
передаются не скрипту, а на указанный e-mail. Это очень полезная возможность,
особенно если у вас нет доступа к каталогу CGI сервера. Обратная сторона
медали, впрочем, весьма настораживает: да, мы приняли сообщение по электронной
почте. Что с ним делать дальше? Как обрабатывать? Похоже, просто читать.
Тоже довольно наивное заявление, потому что «просто» читать не удастся.
Сейчас поясню почему.
Первая проблема заключается в том, что никакого декодирования и анализа
не производится, поэтому сообщение будет выглядеть весьма специфично.
На рисунке 16.1 показан пример типичного сообщения, которое будет выведено
на экран, если применять данный подход.
Рис. 16.1. Вот какое сообщение
придет при отправке данных формы по электронной почте
ПРИМЕЧАНИЕ
Интересно, что некоторые версии IE все-таки умеют посылать
декодированные данные формы, поскольку что-то слышали про URL с mailto:.
К сожалению (или к счастью), нельзя заставить всех пользователей перейти
на IE, поэтому время от времени вам все-таки придется сталкиваться с таким
неприглядным видом сообщений.
Вторая проблема является следствием первой. Либо нужно вручную декодировать,
обрабатывать и анализировать данные, либо писать специальную программу
умеющую работать с редактором сообщений. И тот и другой подход, впрочем,
все равно применим только для небольших сайтов с малым числом потенциальных
посетителей. Основное преимущество заключается в отсутствии необходимости
написания CGI-скриптов и размещения их в каталоге на сервере. А можно
пред положить и более элегантное решение: написать на Visual Basic Scripting
небольшую программу для автоматической обработки поступающих по электронной
почте данных.
Можно отметить еще одну проблему данного подхода. Пользователь нажимает
на кнопку Отправить и видит, что ничего не происходит. А ничего и не произойдет,
поскольку на той стороне нет скрипта, способного хотя бы обновить страницу.
В результате на странице придется разместить обычную кнопку Назад, чтобы
пользователь мог уйти с вашей формы. Только, чтобы было понятно, как действовать,
в такой кнопке имеет смысл написать: Нажмите здесь после отправки формы.
Поскольку надпись получается довольно длинная, можно сделать просто гиперссылку.
Существует и другой вариант, более автоматизированный: использовать
JavaScript для обработки нажатий кнопок и загрузки веб-страниц. Детальное
описание этого метода приведено в главе 18.
ПРИМЕЧАНИЕ
Если у вас есть доступ к каталогу cgi-bin, но вы не можете
самостоятельно написать скрипт, воспользуйтесь готовым шлюзом между формой
и e-mail. Его можно найти, например, на сайте http://www.worldwidemart.com/
scripts/formmail.shtml. Такое решение я считаю более элегантным, поскольку
после отправки формы пользователь попадает на новую веб-страницу. Кроме
того, при этом вы получите данные формы в пригодном для чтения виде.
Выходная информация скрипта
Вывод данных из скрипта на внешнее устройство — дело нехитрое. Поскольку
потоке stdout («стандартное устройство вывода») направляется на браузер,
вам нужно написать pri nt (это касается языка Perl и некоторых других),
echo (командные файлы Unix и Windows), I print (язык С) или какие-то другие
команды, выводящие данные на экран, терминал или консоль. Эти команды
используются для вывода HTML-кода точно так же, как если бы вы набирали
их в текстовом редакторе.
Рассмотрим часть скрипта на Perl:
Print "Content-type: text\html\n\n": Print "<html>\n<head><title^aroflapHOCTb</title></head>\n" Print "<body>\n<hl>Bce в порядке</h1>\п<р>Спасибо
за внимание</р>\n" Print "<р>Щелкните, чтобы перейти обратно на <а href="index.html">Главную
страницу</а> </p>\n</body> </html>"
Помните о том, что все эти фиктивные stdin и stdout представляют собой
эмуляцию нажатий виртуальным пользователем сервера кнопок клавиатуры.
Что касается, в частности, вывода на stdout, то это действие заменяет
собой вывод документа на неб-браузер. На самом же деле данные отсылаются
на браузер удаленного компьютера, который интерпретирует их и выводит
на экран.
Рис. 16.2. Результат работы
программы с применением команды printenv. Здесь показано, как можно выводить
переменные окружения. Тот же самый принцип используется для вывода любых
других переменных
Во многих языках программирования встретившийся в приведенном примере
управляющий символ \п означает перевод каретки. В данном случае мы тем
самым добиваемся размещения на одной строке исходного кода скрипта сразу
нескольких строк кода на HTML. Если этот фактор учесть, то текст программы
становится понятным и привычным.
Как бы ни выглядела команда, выводящая данные на stdout, с ее помощью
появляется возможность автоматически генерировать веб-страницы. Тот же
самый подход можно применять, определяя в скрипте переменные, значения
которых должны выводиться. На рисунке 16.2 показан пример страницы, созданной
с помощью команд printenv CGI-скрипта. Эти команды предназначены специально
для вывода переменных окружения, которые сервер делает доступными для
нужд ваших программ.
Поиск и использование скриптов
Мы не ставим своей задачей с помощью этой книги научить вас писать скрипты.
Для начала можно научиться пользоваться уже готовыми. Есть множество Интер
нет-ресурсов, предоставляющих такую возможность. Если повезет, вам могут
по пасться скрипты, практически не требующие знания языков программирования.
В таком случае вы можете отредактировать их, подогнав под свои нужды:
вставить свои имена переменных, изменить дизайн автоматически создаваемых
страниц и т. д. Это особенно легко сделать, если есть хорошая документация
к программе.
В этом разделе вам встретятся адреса сайтов, на которых можно найти
скрипты для самых разнообразных целей. Если скрипт небольшой, иногда проще
написать его самому, если большой, то при наличии документации, в принципе,
можно сде лать что-то на основе чужих разработок. Краткое описание языка
JavaScript, при меры программ на котором также встретятся далее, можно
прочесть в главе 17.
Работа с готовыми скриптами
Как и в любом деле, в программировании есть люди, которые обожают писать
скрипты, и люди, которые, скажем так, могут обойтись без этого. Независимо
от того, к кому вы себя причисляете, я считаю, что очень полезно посетить
как можно больше разнообразных сайтов — хороших и плохих — и почерпнуть
для себя не только ту информацию, которая на них явным образом содержится,
но и ту, которая за ключена в элементах дизайна. Но некоторые сайты вообще
специализизуются именно на CGI-скриптах, те из них, что попроще, даже
можно скачать. Иногда дам бесплатно. Есть, впрочем, и коммерческие предложения,
касающиеся продажи больших проектов, построенных в том числе и на основе
скриптов. Заплатив свои деньги и скачав такой скрипт, вы уже безо всяких
зазрений совести можете использовать его в своих целях.
Мне кажется, что лучше всего начать со следующего сайта: http://cgi.resourceindex.com.
На этом сайте можно найти ссылки на сотни CGI-скриптов, как бесплатных,
так и коммерческих. Здесь представлен полный спектр программ, начиная
от маленьких счетчиков различных показателей и заканчивая полноценными
программам управления целыми сайтами. Можно найти программку, обрабатывающую
данные форм. Можно скачать скрипт, работающий с базами данных. В качестве
примера советую обработчик форм под названием Form Processor с сайта FreeScripts.com
(http://www. freescripts.com/scripts/).
Установка скриптов
После того как вы скачали скрипт, его неплохо бы установить в каталог
cgi-bin. (Большинстно скриптов, доступных в Сети, нормально работают па
Unix-серверах, однако, (тли постараться, можно найти скрипты и для Windows
или Мае.)
Устанавливая скрипт, нужно задать права доступа к нему со стороны веб-сервера.
В юниксоидных системах это делается с помощью команды chmod 755 scriptnam.pl
вокиетерминала или командной строке. (Если эта команда вам ни о чем не
говорит, проконсультируйтесь с системным администратором.) Впрочем, например,
РТР-приложение тоже позволяет изменять права доступа.
ПРИМЕЧАНИЕ
Не все веб-серверы обязуют помещать CGI-скрипты в каталог
cgi-bin. Некоторые позволяют хранить их в произвольном месте сервера.
Но это не означает, что отпадает необходимость в установке прав доступа.
Если вы работаете с Unix-сервером, наверное, вы будете задавать разные
права на чтение, запись и исполнение для владельца и остальных пользователей.
(Это означает, что в интересах защиты информации вы даете право изменять
код скрипта только самому себе и более никому.) Опять же, советую проконсультироваться
с поставщиком услуг Интернета, поскольку вопрос прав доступа следует решать,
исходя из требований и возможностей сервера.
Скрипт устанавливается, какое-то время, может быть, даже работает, но
рано или поздно может возникнуть необходимость в его редактировании. Обычно
это делается с помощью специальных текстовых конфигурационных файлов,
хранящихся где-то на сервере. В них могут определяться некоторые свойства
скриптов, рабочие каталоги и другие характеристики. Что касается программы
Form Processor, обсуждавшейся рапсе, она имеет несколько настроек. Одна
из них касается, например, сохранения данных в файле либо отправке их
по e-mail. Другая — поведения после заполнения пользователем формы.
Наряду с этими настройками в Form Processor используются скрытые поля.
В них также определяются некоторые параметры, необходимые для работы скрипта.
Например, электронный адрес, по которому нужно отправлять результаты:
<input type="hidden" name="admin" value="admin@fakecorp.com" /> <input type="hidden" name="subject" vаlие="3аказ" /> <input type="hidden" name="redirecr" value= "http://www.fakecorp.com/orders/confirm.html" />
Скрытым полям соответствует система значений атрибутов name внутри формы.
Сих помощью можно установить порядок полей, показываемых пользователю.
Также существуют и специальные записи (например, user_email), которые
дают скрипту возможность узнать e-mail для автоматического ответа.
Если и есть некоторое неудобство в использовании готовых скриптов, так
это то, что они могут оказаться несовместимыми с каким-нибудь другим ПО.
Если вы устанавливаете скрипты, написанные на Perl, нужно поинтересоваться
у систем ного администратора, какая версия Perl (например, Perl 5) имеется
на сервере. Возможно, вам придется попросить его установить какую-нибудь
библиотеку или реализовать какой-нибудь путь к нужному каталогу. Впрочем,
думаю, вы убеди тесь на собственном опыте, что обычно как инсталлирование,
так и работа с гото выми скриптами проходит безболезненно. Останется лишь
привыкнуть к конфи гурационным файлам и настройкам, а если вы еще и ознакомились
с документам ей, то это займет совсем немного времени.
Использование готовых скриптов, выполняющихся на чужом
сервере
Существует еще один подход к использованию чужих скриптов в своих целях.
Он отличается тем, что скрипты размещаются не на вашем сервере, а на своем
родном Там же они и выполняются.
Поскольку атрибут method формы или src (произвольного элемента) может
содер жать ссылку на удаленный URL, можно обрабатывать запросы с помощью
скрип тов, расположенных по любому адресу. Это особенно полезно, когда
у вас нет доступа к каталогу cgi-bin своего сервера и /или ограничены
по количеству или тип запускаемых с него скриптов. (Эти ограничения, впрочем,
совершенно не характерны, особенно для бесплатных или недорогих серверов.)
В таком случае единственное решение проблемы — это набор скриптов, хранящихся
на постороннем сервере.
Сайт CGI Resource включает в себя страницу, содержащую ссылки на скрипты
подобного рода (http://cgi.resourceindex.com/Remotely_Hosted/). Назначение
скриптов, которые там описываются, очень разнообразное: начиная от электронных
досок объявлений и заканчивая вполне полноценными онлайновыми чатами.
Оче видно, многие из них предназначены для обработки форм. Для простой
обработки подойдет такая программа, как Form Buddy (http://www.formbuddy.com/).
Можно создать форму и использовать URL этого скрипта в качестве ее метода
(method). При нажатии пользователем кнопки подтверждения данные будут
отправлены по e-mail либо сохранены на сервере с возможностью доступа
к ним в будущем. Скрипт может рассылать и специальные сообщения, подтверждающие
факт отправки данных (в случае, если пользователь не забудет правильно
указать свой e-mail). Конечно, это старый и странный метод обработки,
но во многих случаях это то, что надо, особенно если нет возможности разместить
скрипты на своем родном сервере.
Скрипты, запускаемые с удаленных серверов, могут быть довольно сложными.
Например, Formsite.com может быть использован для создания разных форм
на основе предлагаемых шаблонов. В зависимости от выбранного уровня услуг,
можно либо создавать формы самостоятельно и лишь подключать к ним CGI-скриптыс
этого сайта, либо разместить форму на нем. Примерно то же самое бесплатно
предлагает популярный сайт http://www.narod.ru. Шаблоны Formsite.com варьируются,
начиная от гостевых книг и парольной защиты некоторых объектов, заканчивая
страницами заказа товаров для электронной коммерции. Как видите, подход
весьма серьезный.
СОВЕТ
Вы еще не раз встретите в этой книге упоминания о готовых
скриптах, особенно в главе 2: и особенно о тех из них, которые позволяют
создавать приложения для общения сразу нескольких пользователей.
Создание собственных скриптов
Если вы собираетесь писать скрипты самостоятельно, для начала вам придется
познакомиться с каким-нибудь подходящим языком программирования. В этом
тане самым популярным является Perl. Правда, пользователи Мае, как всегда,
идут своим путем и предпочитают AppleScript. Простые CGI-скрипты обычно
пи-шутся на языке написания сценариев и командных файлов под Unix.
При создании скриптов можно пользоваться стандартными текстовыми редакторами.
Perl является интерпретируемым языком, поэтому программы не нуждаются
в компиляции перед запуском. Это означает, что для написания скриптов
не требуется программная оболочка компилятора, как, например, в случае
с языком С. Тем не менее нужно как-то тестировать свои программы. Проще
всего для этого осуществить их локальный запуск на Perl-совместимом сервере,
установив соответствующее программное обеспечение на свой компьютер (или
на один из терминалов локальной сети). Разместите скрипты в каталоге cgi
и начинайте тестирование.
ВНИМАНИЕ
Если вы проверяете работу своих скриптов на домашнем или
офисном компьютере, имеющем выход в Интернет, убедитесь, что этот выход
закрыт, иначе можно даже не заметить, как к вашей персональной информации
получит доступ любой желающий. Ничего страшного, может быть, и не произойдет,
однако не следует забывать перед началом работы со скриптом в локальном
варианте разорвать соединение с Интернетом.
Несмотря на то что изначально Perl ориентирован на работу с Unix-системами
с развито]'! концепцией командной строки (в эту группу ОС входят также
Linux, Free BSD и их дальние родственники типа Mac OS X), пользователи
других платформ прекрасно знают, что Perl неплохо существует и на них.
Классическая ОС машин Macintosh (Mac OS 9.x и более ранние версии) больше
всего дружит с MacPerl (http:// mvw.macperl.com/) — программой, позволяющей
писать скрипты на чуть измененном Perl. Для почитателей Windows можно
предложить Indigo Perl (http://www.perl.org/). Имеете с этой программой
поставляется встроенный сервер Apache, предназначенный для локального
тестирования скриптов. Другая популярная программа под Windows называется
ActivePerl (http://www.ActivePerl.com/Products/ActivePerl/).
Дополнительную информацию о программировании иа Perl можно получить
на Perl.com. Там вы найдете обзоры, статьи, советы и некоторые интересные
инструменты для работы. Среди других Интернет-ресурсов, посвященных этой
теме, стоит назвать сайты Perl Mongers (http://www.perl.org) и Perl Monks
(http://www.perlmonks.org/). Это две ранные группы программистов на Perl,
две своеобразные тусовки, на которых люди обмениваются опытом, исходными
кодами и другими ресурсами. Ознакомившись с указанными материалами, можно
зайти на странички Yahoo!, посвященные Perl: http://dir.yahoo.com/Computers_and_Internet/
Programming_and_Development/Languages/Perl/.
Для написания веб-программ следует выбирать тот язык программирования,
с которым хорошо ладит как ваш локальный сервер, на котором вы будете
их тестировать, так и сервер, на котором будет жить ваш сайт. Если это
Unix-сервер, то подойдут вышеупомянутые языки — Perl, С, языки написания
сценариев. Для Windows имеет смысл воспользоваться средой Visual Basic
или какой-то иной, поддерживаемой серверным ПО, — это может быть все тот
же язык Perl или С. При работе
с Macintosh ваш выбор, скорее всего, падет на AppleScript, MacPerl или
нечто подобное, например Frontier (http://www.userland.com/), есть и Windows-версия
этого языка.
Резюме
В этой главе мы продолжили обсуждение, начатое в главе 15, сконцентрировав
свое внимание на CGI — общем шлюзовом интерфейсе. CGI-скрипты и программы
важ ны и полезны. Они обрабатывают данные форм, осуществляют автоматическое
обновление страниц сайта, а в целом — делают сайты интерактивными. Вы
узнали, что такое скрипты и как они работают. Рассмотрели принцип передачи
данных из формы в скрипт, их анализа для формирования наборов переменных
и их значе ний, подлежащих обработке. Узнали, что информацию, взятую из
формы, можно, оказывается, передать по электронной почте.
Вторая часть главы была посвящена получению и установке готовых скриптов.
I Мы обсудили некоторые сетевые ресурсы, а также примеры скриптов для
обра ботки форм. Я предложил несколько адресов, где можно почерпнуть информацию
для написания собственных сетевых программ. Веб-дизайн и веб-программирова
ние — это несколько разные (хотя и смежные) прикладные области, но если
вы хотите освоить их, то все необходимое для этого существует и доступно
через Ин тернет.
Следующая глава — это небольшое введение в JavaScript, призванное запнтересо
вать вас и направить на дальнейшее изучение вопроса. В преддверии этой
главы следует отметить, что JavaScript позволяет внедрять команды скриптов
непосред ственно в HTML-документы, делая их более динамичными и интерактивными. |