355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Дэвид Тейнсли » Linux и UNIX: программирование в shell. Руководство разработчика » Текст книги (страница 23)
Linux и UNIX: программирование в shell. Руководство разработчика
  • Текст добавлен: 15 октября 2016, 00:39

Текст книги "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 "

    THIS IS MY FIRST CGI PAGE
    "

    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:


    THE MAY DAY OPERATIONS CENTER

    Stand‑by to Stand‑to


    This page has been visited times


    Последняя изменяемая переменная, также как и другие переменные, экспортируются с помощью 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. Тег

     применяется для сохранения форматирования (вывода табуляции и пробелов).

    $ 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 "

    "

    echo "

    CGI FORM

    "

    #текстовое поле, результаты ввода присвоены переменной с именем 'contact' echo "Your Name:

    "

    #раскрытие выбранного пункта меню, присвоенного переменной 'film'

    echo ""

    # раскрытие выбранного пункта меню, присвоенного переменной 'actor'

    echo ""

    echo "

    "

    # имена переменных флажков 'view_cine' и 'view_vid'

    echo "Do you watch films at the..
    "

    echo " Cinema"

    echo " On video"

    echo "

    "

    # результаты ввода, присвоенного переменной 'textarea'

    echo "Tell what ls your best film, or just enter some comments
    "

    echo ""

    echo "
    "

    echo ""

    echo "

    " echo "" echo ""

    Действие form action выбирается, как только пользователь щелкнет на кнопке 'Send it', в результате чего вызывается сценарий books_result.cgi. В этом случае будет использоваться метод get.

    В форме, код которой приведен выше, отображаются два текстовых поля, два раскрывающихся поля и два флажка.

    Текстовое поле, предназначенное для ввода пользовательского имени, имеет длину 30 символов; результаты ввода присваиваются переменной contact.

    Первое раскрывающееся меню обеспечивает выбор любимого пользовательского фильма; выбранная опция присваивается переменной film.

    Второе раскрывающееся меню обеспечивает выбор любимого актера; выбранная опция присваивается переменной actor.

    Можно установить один или оба флажка, выполнив щелчок мышью на требуемом варианте. Выбранные значения хранятся в переменных view_cine и view_vid. Если пользователь указывает один из флажков, переменные должны иметь значение "on".

    Область текстового поля обеспечивает ввод большего количества строк текста, чем стандартное текстовое поле (текст, разбитый на 30 столбцов и 4 строки, в нашем случае(, а вся введенная информация присваивается переменной textarea.


      Ваша оценка произведения:

    Популярные книги за неделю