Автор не будет себя утруждать вводным курсом PERL. Для этого в Сети огромное количество материала. Здесь делается акцент на особенности программирования скриптов на PERL.
На данный момент PERL является одним из самых лучших языков CGI-программирования для Web-серверов на базе Unix. Для других платформ этот язык тоже годится.
Любой CGI-скрипт должен формировать заголовок ответа. Как это делается на PERL? Очень просто
print "Content-Type: text/html ";
Такой заголовок мы формируем, если наш скрипт будет выводить данные в формате HTML. Если наш скрипт при своем выполнении будет совершать какиелибо действия, но требуется не вывод а переадресацию на какую-нибудь страницу или сайт, то пишем
print "Location: http://kuda_nibud.tuda ";
Скрипт сделает свое дело и перенаправит пользователя на адрес указанный после Location.
Теперь несколько замечаний по размещению скриптов на сервере. Обычно скрипты размещаются в директории cgi-bin. Хотя это не всегда так. Ваш скрипт должен иметь права на запуск в системе (это о Unix). Делается это командой chmod +x script.cgi.
А теперь можно и начинать писать скрипт, и начать следует с приветствия миру.
Первая строка указывает путь к интерпертатору PERL в системе (здесь указан путь, где обычно находится PERL в системе Unix. Вторая строка выводит заголовок. А вот третья строка передает браузеру данные, которые браузер обрабатывает соответственно типу, переданному в заголовке.
- ХА!!!! - скажет многоуважаемый посетитель - А не проще ли просто набрать HTML файл без всяких там скриптов?
Проще! Но если Вам необходимо чтобы страница была динамической, зависимой от действий пользователя то увы :)))) скрипт писать придется. Для этого необходимо обработать параметры приходящие от пользователя.
Параметры в CGI-скрипт передаются с помощью переменных окружения.
Для исследования переменных окружения напишем небольшой скрипт
При запуске этот скрипт выдаст Вам значения переменных окружения. Можете набрать этот скрипт и поэкспериментировать с запросами, поглядите что получится, можете поглядеть здесь.
Наверное самым главным в CGI скрипте является обработка полученного запроса и выполнение действий в соответствии с этим запросом. Конечно, если Вы используете простенькие запросы типа http://kudato.tuda/cgi-bin/script.cgi?zapros то особого анализа не требуется, здесь просто нужно считать переменную QUERY_STRING и уже потом в зависимости от содержания строки совершать какието действия.
Но если зпрос будет выглядить так http://kudato.tuda/cgi-bin/script.cgi?par1=1&par2=val&par3=6 или Вы собираетесь обрабатывать данные из форм методом POST, то просто необходимо анализировать данные и преобразовывать их в удобоваримый формат. Предлагаемый автором способ преназначен исключительно для демонстрации работы с переменными окружения. В реальной жизни следует использовать более удобный и надёжный модуль CGI.pm, входящий в стандартную поставку любого дистрибутива Perl, который к тому же обладает многими другими полезными в CGI-программировании функциями. И уж ни в коем случае не следует изобретать велосипед, пытаясь написать свой обработчик запроса, т.к. (раз вы читаете эту статью) написать лучше, чем написан CGI.pm у вас пока вряд-ли получится.
if($ENV{REQUEST_METHOD} eq GET)# Проверяем, если метод запроса GET {$query=$ENV{QUERY_STRING};} # то в $query записываем строку запроса # (ту, что находится после знака "?" в запросе) elsif($ENV{REQUEST_METHOD} eq POST)# если метод запроса POST {sysread(STDIN,$query,$ENV{CONTENT_LENGTH});}# то записываем в $query # данные из заголовка запроса
@pairs = split(/&/, $query);# разбиваем запрос на пары ключ=значение foreach $pair (@pairs) {# пробегаемся по всем парам ($name, $value) = split(/=/, $pair); # ключ в переменной $name, значение # в переменной $value $value =~ tr/+/ /; # заменяем плюсы на пробелы $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex())/eg; # заменяем нестандартные # символы на кодированные значения типа C00 $value =~ s/<!--(. )*-->//g; # ликвидируем комментарии $input{$name} = $value; # организуем хэш }
После включения этого кода в Ваши скрипты Вам остается только использовать хэш $input указывая в фигурных скобках имя параметра. Например значение $input{par1} будет равно 1,$input{par2} будет равно val итд.
Использование модуля CGI, как уже ранее говорилось предпочтительнее, удобнее и безопаснее.
Доступ к параметрам запроса обеспечивает функция param. Без параметров эта функция возвращает массив значений, содержащих имена ключей параметра. Для получения значения по ключу, в param нужно передать имя ключа в качестве аргумента.
Следующий пример выводит полученный запрос в формате Ключ: Значение
#!/usr/bin/perl use CGI qw/:standard/; # подключаем стандартный набор модуля CGI print header;# Выводим заголовок #(вместо print "Content-Type: text/html ";) print start_html(Пример); # выводим заголовок html-документа foreach $key (param) { # пробегаемся по всем параметрам запроса # помещая ключи значений в переменную $key print "<b>$key</b>: "; # выводим имя ключа $value = param($key); # считываем значение ключа print $value,"<BR>" # и выводим его на экран } print end_html;
Теперь, если вы запустите этот небольшой скрипт (предварительно назвав его params.cgi) таким образом http://some-server.com/cgi-bin/params.cgi?a=1&b=2, то получите следующее
a: 1 b: 2
Получается, что вы передали в скрипт строку запроса a=1&b=2, скрипт ее обработал и выдал выше показанный результат.