CGI-сценарии
Часть сценария, предшествующая условному оператору, предназначена для создания формы из примера 15.1. Заключительная часть, состоящая из условного оператора, обрабатывает заполненную и отправленную Web-серверу форму. Это происходит потому, что по умолчанию приложением, обрабатывающим форму, является данный сценарий (см. описание start__form). Таким образом, в одном сценарии содержится код, и создающий форму, и ее обрабатывающий.
Сохраним код, приведенный в примере 15.8, в файле welcome.cgi. Этот файл можно поместить на Web-сервере в стандартный каталог cgi-bin, предназначенный для хранения CGI-сценариев. Предположим, что Web-сервер имеет Internet-адрес www.klf.ru. Если из удаленного браузера послать запрос по адресу http://www.klf.ru/cgi-bin/welcome.cgi, то Web-сервер, получив запрос, выполнит сценарий welcome, cgi. Сценарий "на лету" создаст HTML-документ, содержащий форму, и передаст его Web-серверу, который отправит документ браузеру. Браузер, получив документ, отобразит его.
После заполнения формы и нажатия кнопки ОК данные формы будут вновь отправлены Web-серверу, который передаст их для обработки все тому же сценарию welcome.cgi. Сценарий "на лету" создаст новый HTML-документ с учетом полученных данных и через сервер направит его браузеру. Браузер отобразит новый документ.
Сценарий welcome.cgi можно передать для выполнения интерпретатору peri, а результат вывести в файл, чтобы посмотреть, как вызовы функций модуля CGI преобразуются в тэги HTML-документа. Документ HTML, созданный сценарием welcome.cgi, имеет следующий вид.
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <HTMLXHEADXTITLE>npMMep <J>opMbi</TITLE> </HEADXBODY> <Н2>Регистрационная страница Клуба любителей фантастики</Н2> Заполнив анкету, вы сможете пользоваться нашей электронной библиотекой, <BR> <FORM METHOD="POST" ENCTYPE="application/x-www-form-urlencoded"> Введите регистрационное имя:<1ЫРит TYPE="text" NAME="regname" ><P> Введите пароль: <INPUT TYPE="password" NAME="passwordl" MAXLENGTH=8><P> Подтвердите пароль: <INPUT TYPE="password" NAME="password2" MAXLENGTH=8> <Р>Ваш возраст<Р> <INPUT TYPE="radio" NAME="age" VALUE="lt20" СНЕСКЕО>до 20 <INPUT TYPE="radio" NAME="age" VALUE="20_30">20-30 <INPUT TYPE="radio" NAME="age" VALUE="30_50">30-50 <INPUT TYPE="radio" NAME="age" VALUE="gt50">CTapnie 50 <BRXBR>Ha каких язьпсах читаете: <INPUT TYPE="checkbox" NAME="language" УАШЕ="русский" СНЕСКЕП>русский <INPUT TYPE="checkbox" NAME="language" УАШЕ="английский">английский <INPUT TYPE="checkbox" NAME="language" УАьиЕ="французский">французский <INPUT TYPE="checkbox" NAME="language" VALDE="немецкий"Жемецкий <BRXBR> Какой формат данных является для Вас предпочтительным <BRXSELECT NAME="type"> <OPTION VALUE="Plain text">Plain text <OPTION VALUE="PostScript">PostScript <OPTION VALUE="PDF">PDF </SELECT> <BRXBR> Ваши любимые авторы: <BRXTEXTAREA NAME="wish" ROWS=3 COLS=40X/TEXTAREA> <BR> <INPUT TYPE="sxobmit" NAME="OK" VALUE="OK"> <INPUT TYPE="reset" VALUE="Отменить"> <INPUT TYPE="hidden" NAME=".cgifields" VALUE="language"> <INPUT TYPE="hidden" NAME=".cgifields" VALUE="age"> </FORM> <HRX/BODYX/HTML>
В действительности документ, созданный сценарием welcome .cgi, состоит из небольшого количества длинных строк, что связано с тем, как они формируются методами модуля CGI. Поэтому реально сформированный текст для удобства представлен в более структурированном виде. Но это единственное изменение, не влияющее на смысл автоматически созданного документа.