• Options +ExecCGI
. Разрешить выполнение CGI-сценариев можно, указав значение +ExecCGI
директивы Options. Данная опция не должна указываться для всей системы, ее имеет смысл применять только к отдельным каталогам (т.е. она должна присутствовать только в составе директивы >).
• .htaccess
. Контролировать доступ к отдельному каталогу можно, размещая в нем файл .htaccess
. Если в файле .htaccess
содержится запись Options +ExecCGI
, Apache будет запускать CGI-сценарии, находящиеся в этом каталоге. Чтобы это произошло, в файле httpd.con
f должна находиться запись AllowOverride Options
; эта запись должна воздействовать как минимум на каталог, содержащий файл .htaccess
.
Внимание
Наличие записей Options +ExecCGI
и AllowOverride Options
представляет угрозу для системы. При неправильном использовании этих средств пользователи получают возможность создавать сценарии, предоставляющие полный доступ к системе. По этой причине в большинстве дистрибутивных пакетов использование файла .htaccess
запрещено.
Часто при настройке Apache в конфигурационный файл включается директива ScriptAlias
, отображающая каталог /home/httpd/cgi-bin
файловой системы в каталог /cgi-bin
в составе URL. Такая настройка удобна для администратора. Чтобы установить CGI-сценарий и сделать его доступным для пользователя, достаточно разместить соответствующий файл в каталоге /home/httpd/cgi-bin
. При этом необходимо обратить внимание на права доступа к файлу. Поскольку сценарий предназначен для выполнения, для файла, содержащего код этого сценария, должен быть установлен соответствующий признак. Если вы написали сценарий самостоятельно или скопировали его с Web- или FTP-узла, то после размещения его в каталоге /home/httpd/cgi-bin
надо выполнить команду chmod a+x имя_сценария
.
Подобно другим сценариям, CGI-сценарии представляют собой программный код, предназначенный для выполнения. Данная глава не является руководством по написанию CGI-сценариев; в этом разделе приведены лишь некоторые общие рекомендации по работе с ними. Если вам потребуется дополнительная информация о создании CGI-сценариев, обратитесь к Web-странице по адресу http://httpd.apache.org/docs/howto/cgi.html
либо к одной из книг, посвященных этой теме.
CGI-сценарии принимают входные данные через стандартный ввод и выводят сгенерированную Web-страницу через стандартный вывод. Вывод текста, который должен быть передан клиенту, ничем не отличается от обычного вывода на консоль. Необходимо лишь помнить, что клиент просматривает информацию посредством Web-броузера, поэтому ваш CGI-сценарий должен генерировать информацию в формате HTML либо в другом формате, поддерживаемом Web-клиентом. (Например, вы можете сформировать ответ в виде графического файла.)
Помимо HTML-кода, CGI-сценарий должен создать поле заголовка Content-Type
и в качестве его значения указать MIME-тип данных, передаваемых клиенту. Это поле имеет следующий вид:
Content-type: text/html\r\n\r\n
В данном примере указан MIME-тип text/html
, означающий, что в ответ на запрос клиента CGI-сценарий сгенерировал HTML-документ. Символы \r\n\r\n
соответствуют двум переводам строки, в результате поле заголовка будет отделено от остальных данных пустой строкой. Код сценария зависит от используемого вами языка программирования. Простейший пример CGI-сценария, написанного на языке Perl, приведен в листинге 20.1. Как видно из листинга, в процессе выполнения сценарий выводит строку текста. Записав файл с этим кодом в каталог, предназначенный для размещения CGI-сценариев, установите права доступа. Если после этого вы зададите URL сценария в поле адреса броузера, то увидите строку "Hello, Web".
Листинг 20.1. Простой CGI-сценарий, написанный на языке Perl
#!/usr/bin/perl
print "Content-type: text/html\r\n\r\n";
print "Hello, Web";
С обработкой входных данных дело обстоит несколько сложнее. Ваш сценарий получит данные только в том случае, если они были введены пользователем посредством интерактивных элементов, содержащихся в форме. Данные поступают на вход сценария в виде набора пар имя-значение. Имя отделяется от значения символом =
, а пары имя-значение разделяются символами &
. Пример строки параметров, передаваемой CGI-сценарию, приведен ниже.
city=Oberlin&state=OH&zip=44074
Перед тем как использовать полученные данные, надо произвести разбор строки параметров. В языке Perl предусмотрены мощные средства работы со строками. Этот факт стал одной из причин популярности Perl среди разработчиков CGI-сценариев.
Читать дальше