Текст книги "Linux и UNIX: программирование в shell. Руководство разработчика"
Автор книги: Дэвид Тейнсли
сообщить о нарушении
Текущая страница: 23 (всего у книги 25 страниц)
restart)
$0 stop
$0 start
;;
*)
echo "To call properly..Usage: $0 {start | stop | restart}"
exit 1
;;
esac
exit 0
В Limix…
В некоторых вариантах Linux предполагается, что файл блокировки создается при запуске службы. Если файл блокировки отсутствует, при уничтожении сценариев могут возникнуть трудности.
Опция start вызывает контрольный процесс, который запускает действительную систему контроля, а опция stop вызывает сценарий, останавливающий систему контроля. Конечно, перед помещением сценария в каталог init.d его следует проверить.
$ rc.audit
То call properly..Usage:./rc.audit {start|stop|restart}
$ rc.audit start
Starting the audit system….
Предположим, что сценарий проверен. Запуск и прекращение функционирования службы контроля реализуется без затруднений. Установим связь сценария с нужными каталогами выполнения.
В данной системе каталоги rcN.d помешены в файл /etc/rc.d, а сценарии rc.scripts помещены в файл /etc/rc.d/init.d. Измените пути, если это необходимо.
Внимательно приступайте к первоначальному запуску сценария; не забывайте, что запуск сценариев начинается с указания опции s.
$ pwd
/etc/rc.d/rc3.d
$ ln -s ../init.d/rc.audit S35rc.audit
$ ls -1
lrwxrwxrwx 1 root root 27 May 8 14:37 S35rc.audit -> ../init.d/rc.audit
Теперь создается ссылка. Поток вывода команды ls -l, который показывает ссылку, направляется в файл /etc/init.d/rc.audit. Как часть команды ссылки, поддерживается путь ко всему каталогу, но это не обязательно. Теперь необходимо применить команду cd для последовательного перехода во все каталоги, где нужно запустить службу (в данном случае rc4.d и rc5.d), и выполнить в них аналогичные действия. Для уничтожения сценариев примените следующие команды:
$ pwd
/etc/rc.d/rc6.d
$ ln -s ../init.d/rc.audit K35rc.audit
$ ls -l
lrwxrwxrwx 1 root root 27 May 8 14:43 K35rc.audit -> ../init.d/rc.audit
Аналогичную процедуру можно реализовать для других каталогов, где нужно остановить выполнение службы контроля. Теперь при перезагрузке системы служба контроля прекращает выполняться. Это происходит и в том случае, когда значения уровней выполнения изменяются на 2 или 1. Служба контроля запускается, если значение уровня выполнения изменяется на 4 или 5.
28.5. Использование файла inittab для запуска приложений
Существуют другие возможности для запуска приложений; например, можно запустить приложение путем размещения записи в файле inittab. Это является удобным вовсе не потому, что такие системы не имеют каталогов уровней выполнения. Использование записей в файле inittab связано с тем, что существует несколько сценариев системной проверки, которые необходимо выполнять, когда система завершает загрузку. Файл inittab является идеальным местом для помещения этих сценариев.
В приведенном примере применяется один из сценариев проверки зеркального образа диска, который выполняется, когда номер уровня выполнения равен 3. Вначале следует удостовериться, что сценарий выполняется надлежащим образом, затем осуществляется резервное копирование файла inittab.
$ cp /etc/inittab /etc/inittab.bak
Отредактируем файл inittab. В конец файла добавим следующую запись.
#сценарий проверки диска, рассмотрим, не повреждены ли какие–либо зеркальные образы.
rc.diskchecker:3:once:/usr/local/etc/rc.diskchecker > /dev/console 2>&1
Теперь следует сохранить файл и выйти из редактора.
Вышеприведенная запись означает следующее: Rc.diskchecker является уникальным ID на уровне выполнения 3. Выполните этот процесс один раз. Сценарий находится в файле /usr/hcal/etc/rc.diskchecker, весь поток вывода направляется на консоль.
28.6. Другие методы, применяемые для запуска и останова служб
Если вы не желаете применять файл /etc/inittab, существует другая возможность запустить службу. Большая часть систем включает файл rc.local, который помещается в каталоге /etc либо рядом с ним. Этот файл сценария закрывается после запуска файла inittab и сценария rc.scripts. В файл rc.local можно ввести все необходимые команды или добавить запись для вызова удобного вам сценария запуска.
Некоторые системы также поддерживают сценарный файл под названием shutdown, который находится в каталоге /bin (хотя довольно часто этот файл может располагаться в каталоге /usr/sbin). Воспользуйтесь этим файлом для завершения выполнения служб, используя команду завершения работы системы.
28.7. Заключение
Уровни выполнения на самом деле относятся к области системного администрирования. Задача данной главы состоит в том, чтобы продемонстрировать наилучшие способы контроля и гибкого использования различных сценариев и служб, которые запускаются при загрузке системы.
Также нужно учесть, что при перезагрузке системы не следует беспокоиться о запуске или прекращении выполнения службы в ручном режиме.
ГЛАВА 29
Сценарии cgi
В настоящее время, когда практически на каждом ПК установлен Web–сервер, глава, посвященная сценариям cgi, органически вписывается в книгу по shell–программированию.
В главе будут рассмотрены следующие темы:
• базовые сценарии cgi;
• использование SSI;
• метод get;
• метод post;
• создание интерактивного сценария;
• сценарий cgi, автоматически обновляющий Web–страницу.
Для установки Web–сервера вовсе необязательно организовывать сеть; этот сервер может быть запущен на локальном компьютере. Изначально предполагается, что у вас установлен Web–сервер (Apache, Cem и т. п.) и броузер, используемый для просмотра Web–страниц (Netscape, Internet Explorer и т. п.). Помимо этого, сервер должен поддерживать cgi. По умолчанию поддержка cgi отключена путем добавления знаков комментариев в определенные строки сценария. Дополнительные сведения по этому вопросу можно найти в последующих разделах этой главы.
Вопросы установки и настройки Web–сервера выходят за рамки данной книги, хотя установка и запуск Web–сервера занимают не более 20 минут. Примеры, приведенные в этой главе, были выполнены с помощью Web–сервера Apache. В качестве Web–броузера использовался броузер Internet Explorer.
В главе не рассматриваются подробно особенности HTML или Web, поскольку в настоящее время существует множество книг, посвященных этим вопросам. Обсуждение HTML потребовало бы написания нескольких дополнительных глав.
29.1. Определение Web–страницы
Web–страница (или Web–документ) состоит из тегов HTML. Когда броузер загружает Web–страницу, тега определяют способ отображения этой страницы на экране. Web–страница может состоять из многих элементов, включая ссылки (которые позволяют связывать между собой различные страницы), цвета, выделения, шрифты разных размеров, линии и таблицы. В состав Web–страницы могут также включаться картинки и звуковые фрагменты.
Существует два типа Web–страниц: динамические и статические. Статические страницы могут применяться только для отображения информации либо, возможно, для выполнения загрузки файлов. Динамические страницы являются интерактивными: они
могут создавать отчеты на основе предоставляемых пользователем сведений. Помимо этого, динамические страницы применяются для отображения изменяющейся информации в режиме реального времени, например цен на акции, либо осуществляют задачи мониторинга. Для отображения подобных динамических процессов также необходимы сценарии.
Для поддержки информационного обмена между сервером и сценариями требуется протокол Common Gateway Interface (Интерфейс общего шлюза), который обычно именуется cgi.
29.2. Протокол cgi
Аббревиатура cgi обозначает спецификацию, которая задает для получающих информацию сценариев способ обмена данными с сервером. Подобные сценарии (или сценарии cgi) могут быть созданы с помощью любого языка написания сценариев. Наиболее популярным является язык Perl, хотя с этой целью могут применяться и обычные shell–сценарии, как вы убедитесь далее.
Рис. 29.1. Броузер и сервер, использующие интерфейс cgi для обмена информацией
29.3. Подключение к Web–серверу
Для подключения к Web–серверу используется URL (Uniform Resource Locator – унифицированный указатель ресурсов). Указатель URL содержит два типа информации:
протокол адрес и данные
Протоколом может быть протокол http, ftp, mailto, file, telnet и news. В этой главе будет рассматриваться только http, протокол передачи гипертекста (hypertext transfer protocol).
В качестве адреса обычно выступает имя DNS или хост–имя сервера, хотя может применяться IP–адрес. Можно использовать и другую информацию, например фактическое имя пути к файлу, к которому осуществляется доступ.
Все подключения реализуются с помощью протокола TCP. При этом по умолчанию используется порт 80.
Если на локальном компьютере установлен Web–сервер, а основная HTML–страница называется index.html, можно воспользоваться следующим URL:
http://localhost/index.html
Вообще говоря, файл index.html – это файл, загружаемый по умолчанию. (Имя файла, загружаемого по умолчанию, можно изменить с помощью файлов конфигурации сервера.) Следовательно, в этом случае можно ввести такой URL:
http://localhost/
29.4. Сценарии cgi и HTM
Когда броузер генерирует запрос на загрузку страницы, Web–сервер задается в виде входящего URL. Если в качестве части URL–пути указывается cgi‑bin, сервер открывает соединение, которое обычно реализует перенаправление к запрашиваемому cgi–сценарию. Входной и выходной поток сценария cgi отсылаются с помощью этого перенаправления. Если сценарий cgi используется для отображения форматированной Web–страницы, он должен включать теги HTML. Благодаря этому отображаемая страница может распознаваться Web–сервером, хотя при этом от пользователя потребуются некоторые познания в области HTML. Этот документ может отсылаться Web–сервером броузеру с целью отображения для пользователя. В табл. 29.1 представлены некоторые полезные теги HTML.
Таблица 29.1. Основные теги HTML, применяемые для создания страниц
Теги открытия и закрытия документа
Открытие и закрытие информационной области
Открытие и закрытие заголовка
Открытие и закрытие отображаемой страницы
Заголовочный шрифт, увеличение размера шрифта Начало и конец абзаца
Разбиение строки
Горизонтальная линия
Открытие и закрытие предварительно отформатированного текста, всех символов табуляции, всех сохраненных строк
Полужирный стиль символов
!>
Курсив
Сортированные списки
link
Гипертекстовая или горячая ссылка на страницу или URL
Определение формы
METHOD
Метод post или get
ACTION
Адрес
Запись данных
NAME
Имя переменной
SIZE
Ширина текстового поля, заданная в символах
TYPE
Флажок, переключатель, кнопка восстановления или фиксации
Разворачивающееся меню
NAME
Имя переменной
SIZE
Количество отображаемых элементов списка
Возврат выбранной опции переменной NAME
Закрытие выбранного списка
29.4.1. Базовый сценарий cgi
Все сценарии обычно находятся в каталоге cgi‑bin Web–сервера, хотя подобное размещение может быть изменено. Для изменения размещения сценариев и подключения сервера cgi следует обратиться к файлам конфигурации srm.conf и разделу ScriptAlias. Все сценарии должны иметь расширение .cgi. Все документы обычно размещаются в каталоге html либо htdocs и имеют расширение .html. Для всех сценариев требуется установить следующие права доступа:
chmod 755 script.cgi
По умолчанию любые подключения к Web–странице обычно осуществляются от имени пользователя nobody, хотя это можно изменить с помощью файла конфигурации httpd.conf. Несмотря на то, что в этой главе не рассматриваются вопросы настройки Web, некоторые моменты все же стоит отметить. В частности, неплохо было бы проверить, отключено ли поле пароля "nobody". Если это так, запрещается подключение для произвольных пользователей, в то время как пользователь nobody физически подключен к терминалу. Для отключения пароля пользователя nobody в соответствующее поле пароля просто вставьте звездочку (файл пароля /etc/passwd).
Если какой‑либо из сценариев не функционирует, первым делом нужно просмотреть журнальные файлы ошибок. В этих файлах содержатся четкие описания всех возникших ошибок. Если применяется сервер apache, журнальные файлы обычно находятся в каталоге /etc/httpd/logs либо /usr/local/apache/logs, в зависимости от того, в каком месте системы устанавливается Web–сервер. Сценарии могут быть также протестированы путем выполнения их запуска из командной строки. Конечно, в этом случае вы получите только текстовый вывод, но он окажет вам помощь при дальнейшей отладке.
А теперь приступим к созданию сценария cgi. Введите указанный ниже текст в файл, назовите его test.cgi и сохраните в каталоге cgi‑bin. He забудьте установить для сценария права доступа 755.
$ pg firstpage.cgi
#!/bin/sh
#firstpage.cgi
#отображение текстовой страницы
echo "Content‑type: text/html"
echo ""
echo ""
echo "
echo "
"
echo "
STAND‑BY TO STAHD‑TO!
"
echo ""
В первой строке (как вы уже, наверное, знаете) указывается местоположение интерпретатора shell. Первая строка, содержащая команду echo, сообщает серверу о том, что это заголовок MIME; вторая команда echo сообщает о новой строке. Вывод сценариев cgi не будет осуществляться, если не указана новая строка после заголовка MIME.
На этом этапе отображается начальный тег , информирующий броузер о том, что весь документ представлен в формате HTML. При этом могут отображаться различные символьные шрифты, размеры которых варьируются от наибольшего, <Н1>, до наименьшего – <Нn>. Обычно шрифт наименьшего размера, который хорошо различим, задается тегом . Для придания красивого внешнего вида
выполняется центрирование текста на странице. Затем отображается горизонтальная линия. В дальнейшем снова используется тег
для определения размера шрифта, и тег – для центрирования текста "Stand‑By To Stand‑To". Последняя строка завершается тегом .
Если вы забудете указать какие‑либо закрывающие теги, не беспокойтесь – вы их вскоре обнаружите, поскольку при попытке загрузки в окно броузера подобного документа открывающие теги, для которых отсутствуют закрывающие, будут отображены на экране.
Теперь для отображения документа введите URL:
http://ваш_cepвep/cgi‑bin/firstpage.cgi
Вместо параметра ваш_сервер подставляется фактическое имя сервера.
Если вы работаете в сети, и при этом на экране отображается сообщение "DNS lookup failure" ("Сбой при поиске DNS"), это означает, что броузер, возможно, пытается подключиться к Internet для осуществления поиска заданной страницы. Измените параметры настройки броузера, позволяющие обойти proxy–сервер при обращении к локальным компьютерам и перезагрузите броузер.
На рис. 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 ""
echo " THIS ls MY SECOND CGI PAGE "
echo "
"
echo "
$MYDATE
"
echo " Total amount of users on to‑day ls :$USERS"
echo "
"
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 "
"
echo ""
В начале сценария считывается информация о дате и текущих пользователях. Дата отображается в центральной части страницы. Также отображается значение переменной' users. Конструкция if используется для определения, является ли число зарегистрированных пользователей меньшим десяти; если это условие выполняется, отображается сообщение "It must be early or it's dinner time".
Тег
применяется для сохранения опций форматирования, состоящих из служебных символов и символов табуляции. Обычно тег используется для отображения вывода системных команд, таких как df, либо списка файлов, либо нескольких конструкций echo.
В данном случае вовсе не обязательно применять тег
, однако автор специально упомянул этот тег на ранней стадии для того, чтобы пользователь уже сейчас сознательно использовал его для разработки собственных 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
#файл счетчика должен иметь атрибуты
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
Last modified:
Если вы забудете указать какие‑либо закрывающие теги, не беспокойтесь – вы их вскоре обнаружите, поскольку при попытке загрузки в окно броузера подобного документа открывающие теги, для которых отсутствуют закрывающие, будут отображены на экране.
Теперь для отображения документа введите URL:
http://ваш_cepвep/cgi‑bin/firstpage.cgi
Вместо параметра ваш_сервер подставляется фактическое имя сервера.
Если вы работаете в сети, и при этом на экране отображается сообщение "DNS lookup failure" ("Сбой при поиске DNS"), это означает, что броузер, возможно, пытается подключиться к Internet для осуществления поиска заданной страницы. Измените параметры настройки броузера, позволяющие обойти proxy–сервер при обращении к локальным компьютерам и перезагрузите броузер.
На рис. 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 ""
echo "
echo "
"
echo "
$MYDATE
"
echo " Total amount of users on to‑day ls :$USERS"
echo "
""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 "
echo ""
В начале сценария считывается информация о дате и текущих пользователях. Дата отображается в центральной части страницы. Также отображается значение переменной' users. Конструкция if используется для определения, является ли число зарегистрированных пользователей меньшим десяти; если это условие выполняется, отображается сообщение "It must be early or it's dinner time".
Тег
применяется для сохранения опций форматирования, состоящих из служебных символов и символов табуляции. Обычно тегиспользуется для отображения вывода системных команд, таких как df, либо списка файлов, либо нескольких конструкций echo.В данном случае вовсе не обязательно применять тег
, однако автор специально упомянул этот тег на ранней стадии для того, чтобы пользователь уже сейчас сознательно использовал его для разработки собственных 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
#файл счетчика должен иметь атрибуты
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
Last modified:
Stand‑by to Stand‑to
This page has been visited times
Н2>
Последняя изменяемая переменная, также как и другие переменные, экспортируются с помощью SSI. Обратитесь к Web–узлу apache (www.apache.org) для получения полного описания всех дополнительных переменных, которые были экспортированы с помощью SSI.
Посмотрите на команду SSI:
This page has been visited times
Общий формат команды:
В нашем случае для запуска cgi–сценария hitcount применяются следующие значения параметров:
• команда – exec,
• аргумент -cgi,
• "значение" – имя вызываемого сценария.
В рассматриваемом случае файл конфигурации был изменен таким образом, что данная страница будет отображаться по умолчанию вместо страницы index.html. Но остается также возможность вызова файла с помощью указания полного пути.
Если требуется изменить страницу, заданную по умолчанию, отредактируйте файл srm.conf. При этом обеспечивается доступ к следующей записи:
DirectorуIndex
В данной строке находится имя файла index.html. Измените это имя для новой страницы, заданной по умолчанию. Не забудьте закрыть и перезапустить Web–сервер, чтобы изменения возымели эффект.
Для вызова сценария введите URL:
http: //<имя_сервера>/main.shtml
или
http://<имя_сервера>
если это страница, заданная по умолчанию.
На рис. 29.4 показан пример страницы, содержащей счетчик посещений; для просмотра приращения счетчика достаточно просто обновить страницу. Обратите внимание, каким образом отображается значение переменной last_modified.
Конечно, можно каждый день сбрасывать значение счетчика. Для этого нужно воспользоваться записью одиночной команды cron, которая отправляет в файл число 1.
Рис. 29.4. Страница HTML с простым счетчиком посещений
29.4.5. Вывод на печать текущих настроек Web–среды с помощью ссылки
При выполнении сценария cgi какое‑то количество переменных среды становится незадействованным. Для просмотра значений большинства переменных используется команда env или set. Давайте создадим ссылку на основе файла main.shtml для вызова сценария, отображающего значения этих переменных. Ниже приведен тег, HTML, задающий такую ссылку:
<А HREF = "/cgi‑bin/printenv.cgi">Environment
Набор символов A href обозначает начало тега ссылки. За этим набором символов следует адрес (или назначение), заключенный в двойные кавычки. Слово Environment отображается на экране; этим определяется область, в результате щелчка на которой выполняется сценарий printenv.cgi. Тег А> обозначает конец описания ссылки.
Пример файла main.shtml:
$ pg main.shtml
Last modified:
THE MAY DAY OPERATIONS CENTER
Stand‑by to stand‑to
This page has been visited times
To see your environment settings just click
here
Ниже приведен сценарий printenv.cgi, выводящий на печать значения параметров среды. В сценарии используется команда env. Тег
применяется для сохранения форматирования (вывода табуляции и пробелов)." echo "" echo ""$ pg printenv.cgi
#!/bin/sh
# printenv.cgi
# вывод на печать настроек Web–сервера с помощью команды env
echo "Content‑type: text/html"
echo ""
echo "
""env
echo "
Рис. 29.5. Страница, включающая ссылку для просмотра переменных среды
На рис. 29.5 показано, как выглядит страница с добавленной ссылкой.
После щелчка на ссылке отображаются настройки среды (рис. 29.6). Эти настройки могут слегка отличаться в каждом конкретном случае. При выполнении различных сценариев возможно изменение настроек с целью адаптации к новой среде.
Рис. 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 "
""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 "
29.5. Введение в методы get и post
До сих пор мы рассматривали только вывод данных на экран. Для получения информации, введенной пользователем, следует использовать формы, при создании которых применяются сценарии cgi. В любом случае требуется средство, реализующее обработку результатов пользовательского ввода. Благодаря формам можно отображать текстовые поля, раскрывающиеся меню и переключатели.
После того как пользователь выполнил ввод или выбрал некоторые данные в форме, он может щелкнуть на кнопке send для передачи введенной информации сценарию, в данном случае -cценарию cgi. Как только информация будет введена, "в игру вступают" методы get и post.
29.5.1. Метод get
Для любой формы по умолчанию используется метод get. Это один из методов применяемых для выборки файлов из статических HTML–страниц.
Как только пользователь щелкнет на кнопке submit, информация, которая была выбрана или выбирается пользователем, добавляется к URL сервера в виде закодированной строки. Затем эта закодированная строка присваивается переменной среды сервера, query_string. Переменная request_method также используется для хранения метода формы.
Создание простой формы
Создадим простую форму,_ реализующую ссылку из документа main.shtml на сценарий books.cgi.
Вставьте следующие две строки после последней записи ссылки, которая была создана в файле main.shtml:
Basic form using GET method Form1Теперь введите следующий код и сохраните его в файле books.cgi; не забудьте поместить этот файл в каталог cgi‑bin.
$ pg books.cgi
#!/bin/sh
# сценарий books.cgi
echo "Content‑type: text/html"
echo ""
echo ""
echo "
"# вызов books_result.cgi, затем пользователь щелкает на кнопке отправки
echo "
Действие form action выбирается, как только пользователь щелкнет на кнопке 'Send it', в результате чего вызывается сценарий books_result.cgi. В этом случае будет использоваться метод get.
В форме, код которой приведен выше, отображаются два текстовых поля, два раскрывающихся поля и два флажка.
Текстовое поле, предназначенное для ввода пользовательского имени, имеет длину 30 символов; результаты ввода присваиваются переменной contact.
Первое раскрывающееся меню обеспечивает выбор любимого пользовательского фильма; выбранная опция присваивается переменной film.
Второе раскрывающееся меню обеспечивает выбор любимого актера; выбранная опция присваивается переменной actor.
Можно установить один или оба флажка, выполнив щелчок мышью на требуемом варианте. Выбранные значения хранятся в переменных view_cine и view_vid. Если пользователь указывает один из флажков, переменные должны иметь значение "on".
Область текстового поля обеспечивает ввод большего количества строк текста, чем стандартное текстовое поле (текст, разбитый на 30 столбцов и 4 строки, в нашем случае(, а вся введенная информация присваивается переменной textarea.