Переменные окружения (environment variables) - переменные, определенные для системы и сервера, на которой будет выполняться CGI. Основные переменные, определяемые для этого сервера можете посмотреть здесь, а с кратким описанием назначения переменных можно ознакомиться в Приложении 1 .
Стандартный поток вывода (stdout) - сюда программа (скрипт) выводит результаты своей работы. Обычно это экран, но его можно переназначит на файл, сокет, входной поток другой программы, принтер и т.д.
Большинство примеров в этом руководстве написано на shell только для того, чтобы упростить изложение материала.
Согласно последним веяниям по соблюдению безопасности не рекомендуется использование shell для написания CGI скриптов.
Если вам захочется научиться писать на shell, то можете почитать это руководсто.
1.1 Вызов CGI без параметров
Простейший скрипт, выводящий текущую дату:
#!/bin/sh
echo Content-type: text/html
echo
echo "<h2>Today is "
date
echo "</h2>"
В HTML документе ссылка на него описывется вот таким образом
<a href="/cgi-bin/examples/today.cgi">
а работает он вот так.
ВАЖНОЕ ЗАМЕЧАНИЕ. Основной ошибкой,
которую совершают почти все, кто начинает писать CGI программы или
скрипты, заключается в том, что они забывают вставить указатель на тип
выводимого результата - заголовок выводимого документа.
Это вторая и третья строчки в примере.
echo Content-type: text/html
echo
где Content-type: - тип выводимого документа (text/html,
image/gif, image/jpeg и т.д.).
Пустая строка в выводе говорит о том, что заголовок кончился и далее следует
собственно сам документ.
1.2 Передача параметров CGI
скрипту или программе
Передача параметров осуществляется двумя основными методами: GET и POST. У каждого из них свои достоинства и недостатки.
При использовании GET параметры добавляются к запрашиваемому
URL и его можно вызывать таким образом:
http://какой-то_хост/cgi-bin/какой-то_скрипт?параметры
что позволяет делать на такой скрипт ссылки в HTML документах.
А на сервере переданные параметры присваиваются переменной
QUERY_STRING.
Текст самого скрипта:
#!/bin/sh
echo Content-type: text/html
echo
echo "<h2>Вы посылали вот это:</h2>"
echo "<b>"
set | grep QUERY_STRING
echo "</b><br><hr>"
echo "<b>Environment</b><br><pre>"
set
echo "</pre>"
и как он вызывался из этого документа:
<a href="/cgi-bin/examples/link.cgi?some_parameters">
Пример работы (ткните тут)
</a>
Но применение метода GET для передачи параметров, содержащих конфиденциальную информацию недопустимо, т.к. в данном случае вся эта информация передается открыто. За дополнительной информацией по обеспечению безопасности в Web можете обратиться к WWW Security FAQ.
Метод POST позволяет обеспечить конфиденциальность при
передаче параметров скрипту. Но он передает параметры на стандартный
поток ввода и для этого приходится использовать формы. Сервер
не посылает скрипту EOF в конце передачи. Вместо этого вам придется
использовать пременную окружения CONTENT_LENGTH, чтобы определить какой
объем данных вам надо считать из stdin. Подробнее о HTML FORM вы можете
почитать например здесь.
1.3 Примеры
Метод GET
А в документе эта форма была описана так:<FORM ACTION="/cgi-bin/examples/forms.cgi" METHOD="GET"> <INPUT TYPE="checkbox" NAME="button" VALUE="on"> Press me. <INPUT TYPE="submit" VALUE="Submit"> </FORM>
Метод POST
А в документе эта форма была описана так:<FORM ACTION="/cgi-bin/examples/forms.cgi" METHOD="POST"> <INPUT TYPE="checkbox" NAME="button" VALUE="on"> Press me. <INPUT TYPE="submit" VALUE="Submit"> </FORM>А скрипт, который запускался был один и тот же и выглядел вот так:
#!/bin/sh echo Content-type: text/html echo echo "<b>Вы посылали вот это (только для метода POST):</b><br>" echo "<h2>" cat echo "<br>" set | grep CONTENT_LENGTH echo "</h2><hr>" echo "<b>Environment</b><br><pre>" set echo "</pre>"
Copyright © 1998-99 Vladimir Schuckovsky
Вопросы, предложения и здоровая критика
приветствуются по адресу:
vovcha@pvrr.ru