Главная страница статей --> Хитрости при программировании php, заметки по базам данных

CGI на Perl. Первые шаги.

Источник: realcoding.net

Автор не будет себя утруждать вводным курсом 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.

А теперь можно и начинать писать скрипт, и начать следует с приветствия миру.

Итак, простейший скрипт:

#!/usr/bin/perl
print "Content-Type: text/html ";
print "<h1>Hello World</h1>";

Первая строка указывает путь к интерпертатору PERL в системе (здесь указан путь, где обычно находится PERL в системе Unix.
Вторая строка выводит заголовок.
А вот третья строка передает браузеру данные, которые браузер обрабатывает соответственно типу, переданному в заголовке.

- ХА!!!! - скажет многоуважаемый посетитель - А не проще ли просто набрать HTML файл без всяких там скриптов?

Проще! Но если Вам необходимо чтобы страница была динамической, зависимой от действий пользователя то увы :)))) скрипт писать придется.
Для этого необходимо обработать параметры приходящие от пользователя.

Параметры в CGI-скрипт передаются с помощью переменных окружения.

Для исследования переменных окружения напишем небольшой скрипт

#!/usr/bin/perl
print "Content-Type: text/html ";
print "<HTML><HEAD><TITLE>Environment</TITLE></HEAD> ";
print "<BODY> ";
print "Your request is:$ENV{REQUEST_STRING}<BR><br> ";
print "Variables:<BR> ";
print "<I><B>REQUEST_METHOD</B></I>=$ENV{REQUEST_METHOD}<BR> ";
print "<I><B>QUERY_STRING</B></I>=$ENV{QUERY_STRING}<BR> ";
print "<I><B>CONTENT_LENGTH</B></I>=$ENV{CONTENT_LENGTH}<BR> ";
print "<I><B>CONTENT_TYPE</B></I>=$ENV{CONTENT_TYPE}<BR> ";
print "<I><B>GATEWAY_INTERFACE</B></I>=$ENV{GATEWAY_INTERFACE}<BR> ";
print "<I><B>REMOTE_ADDR</B></I>=$ENV{REMOTE_ADDR}<BR> ";
print "<I><B>REMOTE_HOST</B></I>=$ENV{REMOTE_HOST}<BR> ";
print "<I><B>SCRIPT_NAME</B></I>=$ENV{SCRIPT_NAME}<BR> ";
print "<I><B>SCRIPT_FILENAME</B></I>=$ENV{SCRIPT_FILENAME}<BR> ";
print "<I><B>SERVER_NAME</B></I>=$ENV{SERVER_NAME}<BR> ";
print "<I><B>SERVER_PORT</B></I>=$ENV{SERVER_PORT}<BR> ";
print "<I><B>SERVER_PROTOCOL</B></I>=$ENV{SERVER_PROTOCOL}<BR> ";
print "<I><B>SERVER_SOFTWARE</B></I>=$ENV{SERVER_SOFTWARE}<BR> ";
print "<I><B>HTTP_ACCEPT</B></I>=$ENV{HTTP_ACCEPT}<BR> ";
print "<I><B>HTTP_USER_AGENT</B></I>=$ENV{HTTP_USER_AGENT}<BR> ";
print "</BODY></HTML> ";

При запуске этот скрипт выдаст Вам значения переменных окружения.
Можете набрать этот скрипт и поэкспериментировать с запросами, поглядите что получится, можете поглядеть здесь.

Наверное самым главным в 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, скрипт ее обработал и выдал выше показанный результат.



Похожие статьи:
- PHP и mySQL (кратко)
- Время, затраченное на генерацию PHP скрипта
- Грубая сила – силища страшная!
- Бабочка MCMG
- Скролинг в броузере отличный от серого цвета
- SSI проверка IP
- Основы технологии Server Side Includes или SSI.
- Ускоряем JavaScript
- Введение в Cookies
- Оптимизация сайта для поисковых систем
- Золотые правила плохого HTML
- Базовые директивы директивы SSI
- Ещё о защите e-mail адресов на веб-страницах


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.001]