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

загрузка...
Cпец Хакер #075Cпец Хакер #074Cпец Хакер #073Cпец Хакер #072Cпец Хакер #071Cпец Хакер #070Cпец Хакер #069Cпец Хакер #068Cпец Хакер #067Cпец Хакер #066Cпец Хакер #065Cпец Хакер #064Cпец Хакер #063Cпец Хакер #062Cпец Хакер #061Cпец Хакер #060Cпец Хакер #059Cпец Хакер #058Cпец Хакер #057Cпец Хакер #056Cпец Хакер #055Cпец Хакер #054Cпец Хакер #053Cпец Хакер #052Cпец Хакер #051Cпец Хакер #050Cпец Хакер #049Cпец Хакер #048Cпец Хакер #047Cпец Хакер #046Cпец Хакер #045Cпец Хакер #044Cпец Хакер #043Cпец Хакер #042Cпец Хакер #041Cпец Хакер #040Cпец Хакер #039Cпец Хакер #038Cпец Хакер #037Cпец Хакер #036Cпец Хакер #035Cпец Хакер #034Cпец Хакер #033Cпец Хакер #032Cпец Хакер #031Cпец Хакер #030Cпец Хакер #029Cпец Хакер #028Cпец Хакер #027Cпец Хакер #026Cпец Хакер #025Cпец Хакер #024Cпец Хакер #023Cпец Хакер #022Cпец Хакер #021Cпец Хакер #020Cпец Хакер #019Cпец Хакер #018Cпец Хакер #017Cпец Хакер #016Cпец Хакер #015Cпец Хакер #014Cпец Хакер #013Cпец Хакер #012Cпец Хакер #011Cпец Хакер #010Cпец Хакер #009Cпец Хакер #008Cпец Хакер #007Cпец Хакер #006Cпец Хакер #005Cпец Хакер #004Cпец Хакер #003Cпец Хакер #002Cпец Хакер #001