Литмир - Электронная Библиотека

На рис. 29.2 демонстрируется внешний вид Web–страницы.

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

Рис. 29.2. Результат выполнения сценария firstpage.cgi

29.4.2. Отображение вывода команды интерпретатора shell

Теперь поместим команду интерпретатора shell в сценарий, при этом вывод команды будет отображен в документе HTML.

Вы можете увидеть, сколько пользователей зарегистрировано на данный момент времени. Выполните команду who и отфильтруйте ее выводе помощью команды wc.

В результате отобразится количество зарегистрированных пользователей. Также выводится значение даты. Соответствующий сценарий имеет вид:

$ pg pagetwo.cgi

#!/bin/sh

#pagetwo.cgi

#отображение страницы с помощью вывода команды Unix

MYDATE=`date + %А" "%d" "%B" "%Y`

USERS=`who |wc -l`

echo "Content‑type: text/html"

echo ""

echo "<HTML>"

echo "<H1><CENTER> THIS ls MY SECOND CGI PAGE</CENTER></H1>"

echo "<HR>"

echo "<H2><CENTER>$MYDATE</CENTER></H2>"

echo " Total amount of users on to‑day ls :$USERS"

echo "<PRE>"

if [ "$USERS" — lt 10 ]; then

echo " It must be early or it ls dinner time"

echo " because there ain't many users logged on"

fi

echo "</PRE>"

echo "</HTML>"

В начале сценария считывается информация о дате и текущих пользователях. Дата отображается в центральной части страницы. Также отображается значение переменной' users. Конструкция if используется для определения, является ли число зарегистрированных пользователей меньшим десяти; если это условие выполняется, отображается сообщение "It must be early or it's dinner time".

Тег <PRE> применяется для сохранения опций форматирования, состоящих из служебных символов и символов табуляции. Обычно тег <pre> используется для отображения вывода системных команд, таких как df, либо списка файлов, либо нескольких конструкций echo.

В данном случае вовсе не обязательно применять тег <pre>, однако автор специально упомянул этот тег на ранней стадии для того, чтобы пользователь уже сейчас сознательно использовал его для разработки собственных Web–страниц. Для отображения документа введите следующий адрес:

http://ваш_cepвep/cgi‑bin/pagetwo.cgi

Здесь вместо параметра ваш сервер подставляется фактическое имя сервера. На рис. 29.3 показан внешний вид этой Web–страницы.

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

Рис. 29.3. Результат выполнения сценария pagetwo.cgi

29.4.3. Использование SSI

Использование сценариев cgi, открывающих Web–страницы с целью отображения небольшого количества сведений, не всегда является оправданным. Например, была отображена дата, но также был создан сценарий cgi, который тоже отображает дату. Не лучше ли было бы внедрить сценарий cgi в документ HTML таким образом, чтобы вывод сценария отображался на обычной странице? Это вполне возможно, и именно такую методику мы рассмотрим в дальнейшем.

Для внедрения сценариев cgi в документы можно воспользоваться технологией SSI (Server Side Includes — Включения со стороны сервера). При отображении документа происходит замена команды SSI результатом выполнения данной команды или сценария. При этом также экспортируются дополнительные переменные среды, содержащие сведения об установленном сервере и командах.

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

Addhandler server‑passed.shtml

Addtype text/html shtml

Для перезапуска сервера введите команду kill -1, в результате чего сервер повторно считает конфигурационные файлы. Документы, для которых применяется SSI, используют расширение файла shtml вместо расширения html.

29.4.4. Счетчик количества посещений

Создадим документ, в котором отображается счетчик количества посещений. Счетчик будет выдавать сообщение типа "you are the nth visitor to this site" ("вы являетесь n–м посетителем этого сайта"). Можно также отображать дату последнего изменения страницы.

Не забудьте поместить сценарий в каталог cgi‑bin; вызовите его путем ввода hitcount.cgi.

$ pg hitcount.cgi

#!/bin/sh

#hitcount.cgi

#счетчик попыток доступа к страницам для html <cgi>

#файл счетчика должен иметь атрибуты

counter=../cgi‑bin/counter

chmod 666 $counter

echo "Content‑Type: text/html"

echo ""

read access < $counter

access=`expr $access + 1`

echo $access

echo $access >$counter

Как видно из приведенного кода, сценарий считывает файл ../cgi‑bin/counter, присваивает его переменной access, добавляет к нему единицу, затем записывает результат обратно в файл /cgi‑bin/counter.

Теперь создадим файл counter. Все, что требуется в данном случае, — поместить в этот файл начальный номер; в качестве начального номера будет использована единица. Итак, создайте файл counter, введите в него 1, затем сохраните файл и выйдите из него.

Поскольку этот файл будет использоваться любым пользователем, необходимо присвоить ему права владельца, группы и других пользователей.

$ chmod 666 counter

Теперь осталось создать файл с расширением .shtml и поместить его в корневой каталог Web, где обычно находятся другие документы HTML. Файл также может находиться в каталоге htdocs или html. Ниже приводится образец этого файла; не забывайте присваивать ему расширение .shtml.

$ pg main.shtml

<! main.shtml>

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

<HTML>

<H4> Last modified: <!—-#echo var="LAST_MODIFIED" -->

</H4>

<HR>

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

<H2>Stand‑by to Stand‑to

<HR>

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

</CENTER>

</Н2>

<HR>

</HTML>

Последняя изменяемая переменная, также как и другие переменные, экспортируются с помощью SSI. Обратитесь к Web–узлу apache (www.apache.org) для получения полного описания всех дополнительных переменных, которые были экспортированы с помощью SSI.

Посмотрите на команду SSI:

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

Общий формат команды:

<!—-# команда аргумент= "значение" -->

В нашем случае для запуска cgi–сценария hitcount применяются следующие значения параметров:

   • команда — exec,

   • аргумент -cgi,

   • "значение" — имя вызываемого сценария.

В рассматриваемом случае файл конфигурации был изменен таким образом, что данная страница будет отображаться по умолчанию вместо страницы index.html. Но остается также возможность вызова файла с помощью указания полного пути.

Если требуется изменить страницу, заданную по умолчанию, отредактируйте файл srm.conf. При этом обеспечивается доступ к следующей записи:

DirectorуIndex

В данной строке находится имя файла index.html. Измените это имя для новой страницы, заданной по умолчанию. Не забудьте закрыть и перезапустить Web–сервер, чтобы изменения возымели эффект.

Для вызова сценария введите URL:

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

104
{"b":"273485","o":1}