div.main {margin-left: 20pt; margin-right: 20pt} Среда CGI, Web-сервер
Среда 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, требующие настройки.
|