ЖУРНАЛ ХАКЕР

CGI - Common Gateway Interface

Спецвыпуск хакер, номер #002, стр. 002-068-3


Итак, готовься! Держись крепче, не расплескай пиво. Собственно скрипты (бурные аплодисменты в зале, чей-то нервный кашель, характерная отрыжка и сигаретная вонь)! CGI-программа в виде *.cgi должна начинаться со строки, указывающей, на каком именно языке она написана. Для этого пишут примерно такую строчку:

#!/usr/local/bin/perl

Здесь /usr/local/bin - это каталог, в котором находится интерпретатор Perl`а. Обычно, что в каком каталоге находится, можно узнать из FAQ, который предоставляет место под твою хоумпагу. Дальше, чтобы что-то вывести - отдать браузеру, нужно сначала вывести специальный заголовок, по которому браузер или еще какой юзерский клиент определит, что именно ему отдают:

print "Content-type: text/html\n\n";

Это означает, что скрипт будет отдавать HTML-страничку. Например, вот так:

#!/usr/local/bin/perl

print "Content-type: text/html\n\n";

print "<html><body>\n";

print "<h1>Это скрипт!</h1>\n";

print "</body></html>";

Результат налицо - то есть на лице браузера. Можно отдавать просто текстовые файлы - для этого в "Content-type" нужно указать не "text/html", а "text/plain":

print "Content-type: text/plain\n\n";

Здесь же можно указать кодировку документа:

print "Content-type: text/plain; charset=ISO-8859-4\n\n";

Иногда очень удобно, в зависимости от какого-то события, либо выдавать страничку, либо перенаправлять пользователя на другой сайт (или другую страничку). Для этого можно воспользоваться заголовком Location:

print "Location: http://www.another site.com\n\n";

И сервер просто перекинет браузер на другой сервер. Можно указать также какой-то документ "поблизости". Тогда просто будет обработан он - без переброски:

print "Location: /../pages/index.htm\n\n";

Можно отдавать не только странички и текстовые файлы, но и бинарники - архивы, Mp3-шки и так далее. Для этого тоже нужно указать свой заголовок:

print "Accept-Ranges: bytes\n";

print "Content-Length: $size\n";

print "Content-Disposition: filename=$filename\n";

print "Content-type: bin/bin\n\n";

В этом примере в переменной $size находится размер файла, а в $filename - точное расположение файла, который нужно скормить браузеру. Что, тяжко идет? Ничего, пельмень, немного практики, и все будет круто.

Параметры

Приведу небольшой пример, как правильно обработать параметры в Perl`е. Если что непонятно - милости прошу читать Learning Perl, писать мне письма (расскажу ЕЩЕ подробней, что к чему) или посещать www.citforum.ru - там же, кстати, есть и подробное описание "спецификации клиент-сервер шлюзов CGI":

if ($ENV{"REQUEST_METHOD"} eq "GET") {

$data = $ENV{"QUERY_STRING"}

}

else {

Назад на стр. 002-068-2  Содержание  Вперед на стр. 002-068-4