PHP скрипты, MySQL, Java, документация Unix, Linux, FreeBSD, Apache, Оптимизация сайта
Библиотека компании MNWhost.RU

Web-development
Shell
PHP
Perl
Java
ASP
VB Script
HTML
XML
WML
Cookies

Документация
FreeBSD
Linux
Apache
Язык UML
Поисковые системы
Модель OSI
CGI
Технология VPN
ADSL
SSI
DNS
Протоколы
Шифрование дисков
Обжим витой пары
Маски сети/подсети

Хостинг MNW.RU
Услуги
Хостинг
Регистрация доменов
Размещение серверов
Аренда серверов


Hosted by MNW

Яндекс цитирования

Среда CGI

Среда CGI

Давайте подойдем вплотную к рассмотрению вопроса о CGI-программировании. Прежде всего, для написания эффективно работающих CGI-скриптов необходимо правильно настроить Web-сервер. Потом, с полной уверенностью, можно смело начинать написание CGI-программ. Да, именно так - настроить Web-сервер. Ведь новичкам склонно считать, что стоит только поместить CGI-программу в их директорию (вместе с сайтом), скажем на том же narod.ru и их можно будет вызывать ;-)

Web-сервер

При слове сервер в голове невольно возникает образ мощного постоянно включенного компьютера величиной с книжный шкаф. Web-сервер это вовсе не просто кусок мощного железа! Прежде всего, это программа, которая принимает запросы от клиентов вроде GET index.html и выдает ответ. Либо в ответе будет действительно index.html, 404, еще какое-нибудь сообщение об ошибке, либо ..., да, в общем, что угодно! Эта программа может быть запущена как демон, т.е. работать постоянно, или просто, для экспериментов Web-мастера на локальной машине. Как видите, Web-серверу вовсе не обязательно быть подключенным к глобальной сети :-)) Он может работать через специальный IP-адрес 127.0.0.1, являющийся петлей, то есть отправленные пакеты приходят самому себе. При этом сервер корректно работает: выдает нужные файлы, запускает CGI-скрипты и т.п. Немного отступив от основной темы сайта, рассмотрим настройку Web-сервера Apache for Linux. Поставляется Apache в стандартном дистрибутиве любого Linux. Рекомендую Slackware Linux 7x. Все настройки Apache изменяются в файле /path/to/apache/conf/httpd.conf. Основное на данном этапе - описание директорий и корня сервера. Корень Web-сервера есть некий подкаталог файловой системы, от которого Web-сервер начинает отсчет доступных клиентам файлов. Если корнем сервера в файловой системе является /home/httpd/html/, следовательно, на запрос http://servername документ по умолчанию (index.html) будет взят из /home/httpd/html/index.html. Вот типичный пример секции описания корня Web-сервера в файле httpd.conf:

DocumentRoot "/home/httpd/html"
 

Дальше сразу следует описание директории-корня:

<Directory "/home/httpd/html">
Options Indexes FollowSymLinks Includes
AllowOverride None
Order allow,deny
Allow from all
</Directory>

где Options - дополнительные опции директории, Allow - позволяет блокировать доступ в эту директорию некоторым хостам, сразу всем или, как в примере - разрешить доступ со всех хостов. Такие же правила остаются и для описания других каталогов. Вообще в этом файле можно менять многие параметры работы сервера: нагрузку на сервер, описания виртуальных хостов, доступ в директории с авторизацией, страницы-сообщения об ошибках и еще уйму полезных вещей, которые будут обсуждаться позже.

cgi-bin

Обычно это название носит директория, из которой можно выполнять CGI-скрипты. Описывается по принципу описания обычной директории в файле httpd.conf. Небольшая особенность отличает ее от простой директории: в список опций добавляется директива ExecCGI, означающая разрешение на запуск программ из данной директории. Если директория cgi-bin находиться выше корня сервера в файловой системе, то используется ScriptAlias:

ScriptAlias /cgi-bin "/home/httpd/cgi-bin/"

<Directory "/home/httpd/cgi-bin/">
AllowOverride None
Options Indexes FollowSymLinks ExecCGI
Order allow,deny
Allow from all
</Directory>

После того, как вы правильно описали директорию cgi-bin можно попробовать написать простейший CGI-скрипт, если Вы этого еще не сделали, и положить его в директорию cgi-bin в файловой системе. Проверьте права доступа на директорию cgi-bin и на сам CGI-скрипт. Необходимо, чтобы и директория и скрипт имели включенным право на исполнение от имени пользователя Web-сервера (обычно это nobody): rwxr-xr-x. Запустите Web-сервер (httpd) и вызовите скрипт из броузера http://servername/cgi-bin/first.cgi.

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

Из выше написанного можно сделать вывод, что CGI-скрипт представляет собой самую обычную программу, в которой мы имеем совокупность кода, HTML-тегов и обязательное взаимодействие с Web-сервером. Оказывается, что CGI-скрипты имеют доступ к т.н. переменным окружения сервера (environment variables), из которых можно извлекать весьма полезную информацию о пользователе, сервере и о соединении. Почти сразу возникает вопрос о том, как принять данные, отправленные по методу GET. Ответ на этот вопрос как раз кроется в ENV. Вы обращаетесь к переменным окружения так: $ENV{'KEYWORD'} - из Perl, или getenv("KEYWORD") - из C/C++, где KEYWORD какое-либо из ключевых слов:

GATEWAY_INTERFACE Спецификация CGI
SERVER_NAME Имя сервера
SERVER_ADMIN Адрес e-mail администратора
SERVER_SOFTWARE Название и версия сервера
SERVER_PROTOCOL Версия протокола HTTP или HTTPS
SERVER_PORT Номер порта
REQUEST_METHOD Метод (GET или POST)
PATH_INFO Дополнительная информация скрипту (путь)
SCRIPT_NAME Имя скрипта
SCRIPT_FILENAME Полный путь к скрипту
QUERY_STRING Строка данных при методе GET
REMOTE_HOST Машина клиента
REMOTE_ADDR IP-адрес клиента
AUTH_TYPE Тип аутентификации
REMOTE_USER Имя пользователя
CONTENT_TYPE Кодировка данных из формы
CONTENT_LENGTH Размер присоединенных данных
PATH_TRANSLATED Конвертированная версия пути
HTTP_USER_AGENT Программа-броузер клиента
HTTP_REFERER ULR предыдущей страницы
HTTP_PROXY_CONNECTION Соединение через прокси
HTTP_IF_MODIFIED_SINCE Если документ был изменен
HTTP_HOST DNS имя хоста
HTTP_FROM Адрес электронной почты пользователя
HTTP_COOKIE Cookie броузера
HTTP_CONNECTION Тип установленной связи
HTTP_ACCEPT Перечень принимаемых mime-типов

Самыми часто используемыми переменными среды являются QUERY_STRING и REMOTE_ADDR. Часто необходимо запретить повторное голосование или накрутку счетчика. Кроме переменных окружения есть еще полезные, а порой необходимые возможности среды CGI, требующие настройки.

размещение сервера