или

http://<имя_сервера>

если это страница, заданная по умолчанию.

На рис. 29.4 показан пример страницы, содержащей счетчик посещений; для просмотра приращения счетчика достаточно просто обновить страницу. Обратите внимание, каким образом отображается значение переменной last_modified.

Конечно, можно каждый день сбрасывать значение счетчика. Для этого нужно воспользоваться записью одиночной команды cron, которая отправляет в файл число 1.

Linux и UNIX: программирование в shell. Руководство разработчика _10.jpg

Рис. 29.4. Страница HTML с простым счетчиком посещений

29.4.5. Вывод на печать текущих настроек Web–среды с помощью ссылки

При выполнении сценария cgi какое‑то количество переменных среды становится незадействованным. Для просмотра значений большинства переменных используется команда env или set. Давайте создадим ссылку на основе файла main.shtml для вызова сценария, отображающего значения этих переменных. Ниже приведен тег, HTML, задающий такую ссылку:

<А HREF = "/cgi‑bin/printenv.cgi">Environment</A>

Набор символов A href обозначает начало тега ссылки. За этим набором символов следует адрес (или назначение), заключенный в двойные кавычки. Слово Environment отображается на экране; этим определяется область, в результате щелчка на которой выполняется сценарий printenv.cgi. Тег </А> обозначает конец описания ссылки.

Пример файла main.shtml:

$ pg main.shtml

<HTML>

<! строка комментария>

<! main.shtml>

</A> Last modified: <!—-#echo var="LAST_MQDIFIED" -—>

</H4>

<HR>

<CENTER>

<H1> THE MAY DAY OPERATIONS CENTER </H1>

<H2> Stand‑by to stand‑to

<HR>

This page has been visited <! —#exec cgi="/cgl‑bin/hitcount.cgi" —> times

<HR>

To see your environment settings just click

<A HREF="/cgi‑bin/printenv.cgi" >here</A>

</CENTER>

<H2>

<HR>

</HTML>

Ниже приведен сценарий printenv.cgi, выводящий на печать значения параметров среды. В сценарии используется команда env. Тег <PRE> применяется для сохранения форматирования (вывода табуляции и пробелов).

$ pg printenv.cgi

#!/bin/sh

# printenv.cgi

# вывод на печать настроек Web–сервера с помощью команды env

echo "Content‑type: text/html"

echo ""

echo "<HTML><PRE>"

env

echo "</PRE></HTML>"

Рис. 29.5. Страница, включающая ссылку для просмотра переменных среды

Linux и UNIX: программирование в shell. Руководство разработчика _11.jpg

На рис. 29.5 показано, как выглядит страница с добавленной ссылкой.

После щелчка на ссылке отображаются настройки среды (рис. 29.6). Эти настройки могут слегка отличаться в каждом конкретном случае. При выполнении различных сценариев возможно изменение настроек с целью адаптации к новой среде.

Linux и UNIX: программирование в shell. Руководство разработчика _12.jpg

Рис. 29.6. Страница, отображающая значения текущих переменных

29.4.6. Другие общие переменные среды

В табл. 29.2 представлены наиболее часто применяемые переменные среды cgi. Значения некоторых из этих переменных могут быть просмотрены с помощью команды env либо set.

Таблица 29.2. Общие переменные cgi Web–сервера

DOCUMENT ROOT

Основной каталог Web–сервера, куда загружаются документы

GATEWAY_INTERFACE

Редакция cgi

HTTP_ACCEPT

Другие подтвержденные типы MIME

HTTP_CONNECTION

Предпочитаемое подключение HTTP

HTTP_HOST

Имя локального хост–компьютера

HTTP USER AGENT

Клиентский броузер

REMOTE_HOST

Удаленный хост–компьютер

REMOTE_ADDR

[3]

IP–адрес удаленного хост–компьютера

REQUEST_METHOD

Метод, используемый для передачи информации

SCRIPT FILENAME

Абсолютное имя пути сценария cgi

SCRIPT_NAME

Относительное имя пути сценария cgi

SERVER_ADMIN

Адрес электронной почты Web–администратора

SERVER_NAME

Хост–имя, DNS либо IP–адрес сервера

SERVER_PROTOCOL

Протокол, используемый для реализации соединения

SERVER_SOFTWARE

Наименование программного обеспечения Web–сервера

QUERY_STRING

Передаваемые данные из метода GET

CONTENT_TYPE

Тип MIME

CONTENT_LENGTH

Количество байтов, передаваемых с помощью метода post

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

$ pg evncgi.cgi

#!/bin/sh

#envcgi.cgi

#вывод на печать настроек web–сервера с помощью команды env

echo "Content‑type: text/html"

echo ""

echo "<HTML><PRE>"

echo "CGI Test ENVIRONMENTS"

echo "SERVER_SOFTWARE=$SERVER_SOFTWARE"

echo "SERVER_NAME=$SERVER_NAME"

echo "GATEWAY_INTERFACE=$GATEWAY_INTERFACE"

echo "SERVER_PROTOCOL=$SERVER_PROTOCOL"

echo "SERVER_PORT=$SERVER_PORT"

echo "REQUEST_METHOD=$REQUEST_METHOD"

echo "HTTP_ACCEPT=$HTTP_ACCEPT"

echo "PATH_INFO=$PATH_INFO"

echo "PATH_TRANSLATED=$PATH_TRANSLATED"

echo "QUERY_STRING=$QUERY_STRING"

echo "SCRIPT_NAME=$SCRIPT_NAME"

echo "REMOTE_HOST=$REMOTE_HOST"

echo "REMOTE_ADDR=$REMOTE_ADDR"

echo "REMOTE_USER=$REMOTE_USER"

echo "AUTH_TYPE=$AUTH_TYPE"

echo "CONTENT_TYPE=$CONTENT_TYPE"

echo "CONTENT_LENGTH=$CONTENT_LENGTH"

echo "</PRE></HTML>"

29.5. Введение в методы get и post

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

После того как пользователь выполнил ввод или выбрал некоторые данные в форме, он может щелкнуть на кнопке send для передачи введенной информации сценарию, в данном случае -cценарию cgi. Как только информация будет введена, "в игру вступают" методы get и post.

29.5.1. Метод get

Для любой формы по умолчанию используется метод get. Это один из методов применяемых для выборки файлов из статических HTML–страниц.

Как только пользователь щелкнет на кнопке submit, информация, которая была выбрана или выбирается пользователем, добавляется к URL сервера в виде закодированной строки. Затем эта закодированная строка присваивается переменной среды сервера, query_string. Переменная request_method также используется для хранения метода формы.