Шрифт:
На рис. 29.2 демонстрируется внешний вид Web–страницы.
Рис. 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–страницы.
Рис. 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