Простая CGI-программа

назад

Рассмотрим пример программы, содержащей все три части, перечисленные на странице "Структура CGI-программы", а именно прием входных данных, выполнение инструкций, составляющих собственно алгоритм программы, и генерирование выходных данных. Пусть наша программа должна принять возраст пользователя и ответить ему, имеет ли он право голосовать. Код этой программы приведен ниже:

Посмотрите на те места этой программы, которые отмечены комментариями для облегчения чтения. В самой первой строке указан путь к интерпретатору Perl. При запуске программы Web-сервер ищет интерпретатор Perl по этому пути и, если не находит его, выдает сообщения об ошибке.

Поиск пути к интерпритатору в первой строке программы - это подход характерный для операционной системы UNIX. Большинство Web-серверов работающих под управлением Windows, находят интерпритатор на основании расширения имени файла. Но сервер Apache, независимо от того, работает ли он под UNIX или под Windows, использует подход системы UNIX.

Перед тем как выполнять алгоритм программы, нужно получить и обработать данные, введенные пользователем. В случае использования языка Perl этот шаг очень прост. Я просто импортирую CGI-модуль (библиотеку) с помощью команды use CGI. Импортировав модуль и создав объект запроса (его значение записано в переменной $query), я автоматически преобразую данные формы в структуру данных языка Perl.

После того как данные пользователя приняты начинается их обработка. В нашем случае она выглядит очень просто. Оператор if состоит из единственного условия:

$query->param('age') >= 18

Я проверяю значение параметра age. Если пользователь ввел значение большее или равное 18, то программа возвращает сообщение: "Вы имеете право голосовать!", а если значение меньше 18, то возвращается сообщение: "Вы еще не имеете право голосовать!". Вот и весь алгоритм программы. Конечно, настоящая программа может иметь более сложную логику.

После этого я вывожу текст страницы, которая будет передана пользователю. Сначала с помощью метода header объекта query я печатаю заголовок типа возвращаемых данных (CGI-программа должна генерировать такой заголовок, смотрите страницу "Как работает CGI-программа"), а затем открывающие тэги и заголовок (<TITLE>) страницы. Для того чтобы напечатать тело страницы, я проверяю с помощью оперетора if, является ли пользователь законным избирателем, и печатаю соответствующие сообщение.

У вас может возникнуть вопрос, почему я использую переменную voter, вместо того чтобы непосредственно печатать значение возраста пользователя. В этом случае код выглядел бы вот так:

Действительно, в таком случае я бы сэкономил несколько строк кода программы. Но дело в том, что так бы смешалась логика программы и ее вывод. В нашем случае логика программы весьма проста, но она могла бы быть намного сложнее, например можно было бы добавить еще несколько проверок других параметров. При использовании существующего подхода мне не нужно менять опереторы печати, даже если придется добавлять некоторые новые условия проверки. Всегда есть смысл разделять логику программы и выод ее результатов.

Давайте рассмотрим форму, которая может вызывать эту программу. В этой форме есть поле с именем age:

Посмотреть как работает эта форма вы можете кликнув тут. Введите в поле "Возраст" любое значение и нажмите кнопку "Проверить" и вы увидите как работает CGI-программа рассмотренная на этой странице!

Подробно о HTML-формах рассказывается в следующей части сайта "Ввод данных".