Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Информация о CGI

div.main {margin-left: 20pt; margin-right: 20pt}

Информация о CGI

CGI-скрипт представляет собой программу, запускаемую демоном httpd, выполняющую какие-то действия и возвращающую данные демону httpd для передачи их пользователю в броузер. CGI-скрипт является шлюзом ( как следует из названия Common Gateway Interface ), который во взаимодействии с такими прикладными системами, как СУБД, электронные таблицы, системы обработки графической информации и т.д. возвращает пользователю ответ на его запрос в виде HTML-страницы, GIF-картинки или другого средства представления информации.

CGI-скрипт ( в дальнейшем я буду просто писать "скрипт", лень постоянно на английский переключаться....:)), на каком бы языке он не был написан, получает от демона httpd информацию тремя способами:

Через переменные окружения.

Через командную строку.

Через стандартный ввод.

Возвращает скрипт эту информацию через стандартный вывод.

Переменные окружения

Вот список переменных окружения и их значения:

[an error occurred while processing this directive]

Переменные окружения , которые не зависят от типа запроса:

SERVER_SOFTWARE - показывает название и версию http-сервера в формате: название/версия.
SERVER_NAME - показывает доменное имя сервера.
SERVER_ADDR - показывает IP сервера.
SERVER_ADMIN - e-mail администратора web-сервера.
GATEWAY_INTERFACE - версия CGI на момент компиляции httpd демона в формате: CGI/версия
DATE_GMT - текущие дата и время во временой зоне GMT.
DATE_LOCAL - текщие дата и время во временной зоне сервера.
DOCUMENT_ROOT - путь к главному каталогу web-сервера.

Переменные окружения, которые зависят от типа запроса:

SERVER_PROTOCOL - протокол, по которому был получен запрос.
SERVER_PORT - порт, на который был получен запрос.
REQUEST_METHOD - тип запроса: POST,GET и т.д..
REQUEST_URI - страница, отправившая запрос.
SCRIPT_NAME - URL скрипта без имени сервера.
SCRIPT_FILENAME - полное имя файла скрипта на диске.
QUERY_STRING - информация, содержащаяся в командной строке вызова скрипта ( после ? в URL'е )
CONTENT_TYPE - MIME-тип данных, передаваемых скрипту.
CONTENT_LENGTH - длина передаваемых данных.

Переменные окружения, содержащие информацию о пользователе:

REMOTE_ADDR - IP пользователя.( На hosting.agava.ru, на котором находится моя страница, REMOTE_ADDR всегда равен IP hosting.agava.ru. Это не правильно, но это не мои проблемы...:) )
REMOTE_PORT - порт, открытый на машине пользователя броузером.

Переменные окружения, содержащие дополнительный параметры заголовка запроса:

Имя такой переменной формируется из "HTTP_"+имя заголовка. Причем все символы "-" (тире) в имени заголовка заменяются на символы "_" (подчеркивание). Примеры:

HTTP_ACCEPT - список MIME-типов, которые клиент может обработать.
HTTP_USER_AGENT - в частном случае - броузер, который использует пользователь.
HTTP_REFERER - URL страницы, с которой пришел на текущую страницу пользователь.

Запросы по методу GET

При запросе по методу GET тело запроса передается в командную строку скрипта. Т.е. если запрашиваемый URL http://www.somesite.com/cgi-bin/somescript.cgi, то вызываться от будет так http://www.somesite.com/cgi-bin/somescript.cgi?тело_запроса. Все тело запроса передается в переменную окружения QUERY_STRING, тип данных запроса в CONTENT_TYPE, длина в CONTENT_LENGTH.

Запросы по методу POST

При запросе по методу POST тело запроса передается в стандартный поток ввода скрипта, тип данных запроса в CONTENT_TYPE, длина в CONTENT_LENGTH.

Независимо от метода запроса данные передаются в виде шестнадцатиричных символов типа "%2F"("/"), кроме печатаемых символов. Поэтому предварительно надо позаботиться о перекодировке в нормальные символы последовательности типа "Thanx%20for%20your%20help%21". А также заменить "+" на " ".

Ответ на запрос

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

Content-type - представляет собой MIME-тип возвращаемых данных.

Location - это поле используется в случае, если возвращаются не сами данные а ссылка на них. Представляет собой URL.

Status - используется для задания серверу http строки-статуса. Представляет собой 3-х цифровой код статуса, затем через пробел строку причины. Например - 404 Not Found.

Затем, через пустую строку, состоящую только из символа переноса строки, следует тело ответа.

Вызов скрипта

Скрипт можно вызвать разными способами. Самые распространенные из них:

По URL'у - с помощью тэга A HREF, с помощью атрибута ACTION тэга FORM , напрямую задать url в броузере.
В этом случае если скрипт возвращает HTML-документ, он должен вывести http-заголовок ( "Content-type=text/html" ), затем сам HTML-документ начинающийся с тэга HTML и содержащий тэг BODY.

С помощью exec cgi - в тело вызвающего скрипт HTML документа помещается коментарий такого вида:
<!--#exec cgi="http://www.somesite.com/cgi-bin/somescript.cgi"-->
или
<!--#include virtual="http://www.somesite.com/cgi-bin/somescript.cgi"-->
Полный URL не обязательно указывать. Можно и относительный - "cgi-bin/somescript.cgi", если cgi-bin расположена в том же каталоге, что и html-страница, из которой вызывается скрипт.
В этом случае скрипт обязательно должен возвращать HTML-документ, вывод начинается с http-заголовка, затем следует HTML-документ, не содержащий тэгов HTML и BODY.

С помощью тэга IMG SRC - в данном случае скрипт должен возвращать какую-нибудь картинку. Т.е. сначала http-заголовок, содержащий "Content-type: image/gif", "Content-type: image/jpg" и т.д., а затем содержание картинки в выбранном формате. Такой способ используется в графических счетчиках посетителей, системах обмена баннерами и т.д.

Обработка форм

Тэг FORM имеет следующий синтаксис:

<FORM ACTION="url" METHOD="POST | GET" ENCTYPE="application/x-www-form-urlencoded">
<INPUT | SELECT | TEXTAREA.....>
....................
</FORM>

где url может быть URL'ом скрипта, командой "mailto:" и т.д. METHOD - тип запроса, ENCTYPE применяется только для METHOD="POST" и имеет только одно значение - application/x-www-form-urlencoded.

Тэг INPUT создает на форме поля ввода информации различного типа. Тэг имеет следующий синтаксис:

<INPUT TYPE="type" NAME="name" VALUE="value".....>

Тэг INPUT имеет следующие атрибуты:

TYPE - тип элемента:
hidden - пользователь не видит этого элемента, но его значение передается скрипту.
image - картинка, на которую можно кликнуть.:)
text - однострочное поле ввода текста.
password - поле ввода пароля, вводимые символы изображаются в виде звездочек.
checkbox - кнопка-переключатель, при нажатии на которую меняется ее значение на "on" или "off".
radio - кнопка-переключатель, которая как и предыдущая может иметь значения "on" или "off", отличие от предыдущей в том, что если одна из таких кнопок на форме имеет значение "on", все остальные кнопки такого же типа и с тем же параметром NAME, должны иметь значение "off".( Не слишком навороченное определение? ;) Как понимаю - так и описываю...:))
submit - кнопка, при нажатии на которую данные формы передаются скрипту.
reset - кнопка устанавливающая во всех полях формы значения по умолчанию.

NAME - имя поля.

VALUE - начальное значение поля. Для кнопок типа radio и checkbox - "on" или "off". Для кнопок типа "submit" и "reset" - это надпись на кнопке.

Остальные атрибуты INPUT я рассматривать не буду. Они не столь важны для работы скрипта.

Тэг SELECT создает на форме выпадающее меню. Тэг имеет следующий синтаксис:

<SELECT NAME="name">
<OPTION> Option1
<OPTION> Option2
............
</SELECT>

Тэг SELECT имеет следующие атрибуты:

NAME - имя поля.

MULTIPLE - задает возможность множественного выбора.

Тэг OPTION имеет следующие атрибуты:

SELECTED - задает выбранную опцию по умолчанию.

Тэг TEXTAREA создает на форме поле ввода многострочного текста. Тэг имеет следующий синтаксис:

<TEXTAREA NAME="name" ROWS=количество_строк COLS=количество_столбцов>
Тест, который будет содержать поле по умолчанию
</TEXTAREA>

Тэг TEXTAREA имеет следующие атрибуты:

NAME - имя поля.

ROWS - высота.

COLS - ширина.

Отправка содержания формы происходит при нажатии кнопки "submit". При отправке формы по методу GET, скрипт, указанный в атрибуте ACTION тэга FORM содержимое формы передается в командную строку скрипта после символа "?" в виде:

name1=value1&name2=value2&.......&nameN=valueN

где nameX - имя поля формы, а valueX - его значение. Для полей ввода текста или пароля значением будет их содержание, введенное пользователем или установленное по умолчанию, а для chekbox и radio значение, определенное в атрибуте VALUE, будет передано только для отмеченных кнопок. При METHOD="POST" строка формируется также, но передается в стандартный поток ввода.

(c)Ерижоков А.А., 2000.
Использование данного документа разрешено только с согласия автора и с указанием первоисточника: DH's Linux Site


  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте