Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Документация, учебники по Perl.doc
Скачиваний:
3
Добавлен:
29.10.2018
Размер:
1.83 Mб
Скачать

Жемчужные формы

Жемчужные формы

... или как приобщиться к Perlовой каше быстрого приготовления

Я помню, как первый раз в жизни решил создать интерактивную страничку в Интернете. Запустил редактор, нарисовал форму, отослал на сайт, пошел тестировать. Вот дурилка картонная: кликаю мышкой на кнопке "Отправить", и ничего не отправляется. Товарищей программистов на зарплате прошу не издеваться: меня любой ламер поймет. Именно так все мы, ламеры, и воспринимаем реальность программирования: нечто вроде магического мира с волшебными палочками. Вот есть мертвая форма, и как ее ни тормоши, она не оживет. А вот подошел волшебник в колпаке, поковырялся, палочкой помахал, и все заработало.

Спустя еще какое-то время я узнал, как называлась волшебная палочка для оживления формы - cgi-script ("си-джи-ай-скрипт"). Еще я узнал, что скрипт пишут на языке, который называется Perl. Хотя можно писать на C, но предпочитают Перл. Потом, в 1995 году, я оказался в офисе компании "ИнфоАрт" и во время экскурсии, которую мне устроили, сразу заметил паренька-доходягу с толстыми линзами очков и тоненькими ручонками. На его столе лежало огроменное книжище под названием "Перл". "Вот он, - подумал я, - тот самый перловый программист. Не сегодня-завтра умрет от истощения". После посещения этого хосписа мое уважение к "скриптам" достигло мифических размеров.

Как всякий самоуверенный ламер, я решил познакомиться с Перлом поближе и принялся читать умные книжки. Но из всех программистских книжек, книжки о Перле оказались самыми наглыми. Весь их пафос сводился к одному: "Орлы, ну мы-то с вами понимаем, что на C++ здесь должна стоять скобка, но в нашем Перле - все проще". Эдакий междусобойно-элитарный клуб любителей упрощенных вариантов. Короче говоря, у ламера есть только два способа оживить свои формы: нанять перловщика или найти скатерть-самобранку.

Ну а теперь - хорошие новости. Такие "самобранки" существуют. Мне известно целых две. О них и поведаю.

Первая "си-джи-ай-писалка" - CGI Star Pro. Самое в ней веселое - это довесок "Professional" в названии. Звучит как подлинное издевательство, потому что у профессионала CGI Star Pro ничего кроме тошноты вызвать не может. Зато для ламера - это спасение. Справиться с ней сумеет даже конченый аутист. Все, что требуется, - это: А - Нарисовать форму. Б - Запустить CGI Star Pro и выбрать тип сервера - под Unix или NT. В - Открыть html-страницу, содержащую вашу форму. После этого CGI Stap Pro проверяет код, предупреждает об отсутствии обязательных полей (например, User_name, User_mail) и дает рекомендации по правильному написанию формы. Г - Пометить звездочкой (*) те поля формы, которые обязательны к заполнению. Д - Указать точный сетевой адрес, где будет размещаться скрипт, а также местоположение юниксовских программ mail и perl. Е - Написать простенький текст для сообщения, которое получит посетитель вашей страницы после того, как удачно заполнит форму, и...

Все! Нажимаете на кнопку "Write CGI", и программа сама генерирует код. Ради интереса откройте созданный файл и попробуйте сосчитать, сколько лет вам бы потребовалось для того, чтобы самому залудить такую абракадабру.

После создания скрипта самое главное - правильно перебросить его на сервер. В девяноста случаях из ста ламерский скрипт не работает именно потому, что его неправильно перебрасывают. Дело в том, что у протокола ftp бывает два метода передачи данных: АSCII (для текста) и binary (для программ). Скрипты с расширением cgi следует передавать не как программу, а как текст, то есть ASCII.

Конечно, сказать, что возможности CGI Star Pro очень узкие, значит ничего не сказать. На самом деле си-джи-ай-скрипты используются не только для интерактивных форм, но и для миллиона прочих полезных дел: ведения статистики посещений сайта, создания гостевой книги, опроса мнений, создания интерактивных тестов и квизов, проведения шлюзов к реляционным базам данных, осуществления поиска и индексирования сайтов и т. п.

И тут у ламера есть еще два варианта: во-первых, посетить сайт download.ru, где покоится неплохая коллекция самых разнообразных скриптов на все случаи жизни. Другой вариант - это программа PerlBuilder. Только сразу хочу предупредить: PerlBuilder - это не CGI Star Pro. Тут нажиманием двух кнопочек не отделаешься. Зато и возможности программы на несколько порядков выше.

PerlBuilder претендует на то, чтобы считаться не просто программой, но подлинной интегрированной средой разработчика (IDE - integrated development environment) для создания скриптов Перл на платформе Windows 95/NT. Кроме очень удобного графического интерфейса, PerlBuilder обладает возможностью отлаживать скрипт и проводить его дебаггинг, как говорится, "не отходя от кассы" (правда, для этого требуется дополнительно установить бесплатный Перл для Windows [1]). Помимо этого в PerlBuilder включен Мастер подсказок, который на порядок более гибок, чем CGI Star Pro, хотя по своей простоте не уступает австралийскому примитивисту.

Еще немного Перла

Есть и еще одна оболочка - DZ Perl Editor. Она не настолько "визуализирована", как PerlBuilder и предоставляет полную свободу для любителей во всем разобраться досконально и понять, как "это" работает. В программе имеется возможность автоматической вставки блока кода для обработки форм, отправляемых как методом GET, так и POST. Однако помощь (на английском) реализована в лучшем духе юниксовых/линуксовых конференций - когда надо узнать что-то конкретное, тебе вываливают горы малопонятной документации. Вобщем, довольно неплохой вариант для тех, кому стало интересно внутреннее устройство Perl-скриптов.

Ну и напоследок хочу добавить, что мало будет сделать или скачать скрипт - самое главное, чтобы администратор сервера, где лежит Ваш сайт, допускал размещение у себя Ваших неведомых зверушек. В лучшем случае, придется долго уговаривать его, что скрипт ну просто позарез необходим и вообще - расплата виртуальным пивом. А в худшем (для Вашей самодеятельности, но не для админа) случае придется довольствоваться подключением к всеразличным бесплатным CGI-скриптам и, скорее всего, абсолютно бесплатно учиться не обращать внимание на рекламу, которую Вам за это будут скармливать.

CGI+SSI, пример счетчика

Включения. Иногда является необходимым включить результат работы CGI-скрипта в Web-страницу, чтобы избежать динамического формирования всей страницы одной большой CGI-программой. К тому же не всегда есть возможность первую страницу сервера сделать не статическим html -документом, а неким index.cgi. Проблемы такого типа легко решаемы, как с помощью специальных средств включения на стороне сервера (SSI), так и по средствам различных ухищрений.

SSI - Server Side Includes (включения на стороне сервера). Одно из средств решения рассматриваемой проблемы уже реализовано в самом Web-сервере (рассм. Apache 1.3.x). Вам опять же требуется только правильно настроить его. В статье Среда CGI, Web-сервер был затронут момент описания директорий сервера.

<Directory "/home/httpd/html">

Options Indexes FollowSymLinks Includes

AllowOverride None

Order allow,deny

Allow from all

</Directory>

Следует обратить внимание на строку Options - опции директории. Так вот последняя директива в этой строке - Includes и сообщает Web-серверу, что в этой директории разрешено использовать включения в коде Web-страниц. Однако, этой директивы в строке опций не достаточно. Еще требуется указать типы файлов, в которых допускаются включения:

AddType text/html .html

AddHandler server-parsed .html

Такое определение означает, что включения будут допускаться в файлах с содержанием типа text/html и расширением .html. Дело в том, что Web-сервер имеет собственный SSI-препроцессор, который работает подобно его собратьям из языков программирования высокого уровня. Для того, чтобы он стал корректно работать: проверять коды Web-страниц на наличие своих директив, его надо соответствующим образом настроить. Для этих целей и служат приведенные выше строки-примеры. На этом настройка SSI заканчивается.

Директивы включения. Здесь нас интересует включение результатов работы CGI-скриптов в код статичной Web-страницы, но SSI располагает еще несколькими возможностями. Например, включение другого html-документа в данный или автоматическое включение даты последней модификации Web-страницы. Можно таким же образом вставлять локальную и GMT дату, но эти возможности зачастую выполняет JavaScript. И так, для того, чтобы включить что-либо по средствам SSI в ваш HTML-код нужно вставить строчку вида:

<!--#elementh parameter1=value1 parameter2=value2-->

где каждый элемент имеет свой набор параметров:

Элементы

Параметры, описания

config

errmsg

Посылается сообщение об ошибке

sizefmt

Формат вывода размера файла

timefmt

Формат вывода времени

echo

var

Печатает специальную переменную

exec

cgi

Запуск cgi-скрипта, с включением результата

cmd

Запуск комманды shell

fsize

file

Выдает размер файла (полный путь)

virtual

Путь от корня Web-сервера

include

file

Вставляет файл (полный путь)

virtual

Путь от корня Web-сервера

set

var

Имя переменной

value

Присваемое значение

Наиболее часто используемым элементом является exec, так как он один позволяет делать специфичные вещи. Остальные элементы не имеют такой популярности, за счет того, что большинство из них реализовано на языке JavaScript или попросту бесполезны.

Счетчик. Первая мысль, которая приходит после включения скриптов, выводящих отладочные бессмысленные надписи, это написать что-либо полезное. Типичным полезным CGI-скриптом требующим SSI является счетчик (образца 1995 года (-; ), формирующий на странице несколько картинок-цифр в соответствии с реальным (или накрученным) количеством посетителей. Алгоритм этой задачи можно обрисовать так: скрипт проверяет IP-адрес+текущую дату следующего посетителя, сравнивая с имеющимися в файле записями, и увеличивает значение счетчика, дополняя файл, если такой хост еще не заходил, или если текущая дата сменилась. CGI-скрипт счетчика включается в HTML-код строкой вида:

<!--#exec cgi="/cgi-bin/counter.cgi"-->

Начало формы

Код счетчика на языке Perl:

#!/usr/bin/perl use Time::localtime; print "Content-Type: text/html \n\n"; $ip=$ENV{'REMOTE_ADDR'}; #--------Beru datu $tm=localtime(); $y=$tm->year; $m=$tm->mon; $d=$tm->mday; $m++; $y+=1900; #----------------- $curr=$d.$m.$y.":".$ip; #print "Current status: $curr \n\n"; $yes=0; open(COUNT, "count.dat") || die "Cannot open count.dat!!!\n"; while($str=<COUNT>) { chomp($str); if ($curr eq $str) { $yes=1; last; } }  close(COUNT); open(CTR, "ctr.dat") || die "Cannot open ctr.dat file!!!\n\n"; $ctr=<CTR>; close(CTR); if (!$yes) { open(COUNT, ">> count.dat") || die "Cannot open count.dat for writing!\n\n"; print COUNT "$curr\n"; close(COUNT); $ctr++; open(CTR, "> ctr.dat") || die "Cannot open ctr.dat for writing!\n\n"; print CTR "$ctr"; close(CTR); #-------------risujem counter--------------- $zeros="0"x(6-length($ctr));  $ctr=$zeros.$ctr; @counter=($ctr=~m/(.)/gi); foreach(@counter) { $image="img/".$_."OCR.GIF"; print "<img src=\"$image\">"; } #--------------------------------------------  } else { $zeros="0"x(6-length($ctr));  $ctr=$zeros.$ctr; @counter=($ctr=~m/(.)/gi); foreach(@counter) { $image="img/".$_."OCR.GIF"; print "<img src=\"$image\">"; } }

Конец формы

Используются два файла: counter.dat, в котором хранятся записи вида IP+Date и ctr.dat, где хранится текущее число посетителей. Можно было обойтись одним первым файлом, но не стоит забывать, что файл текстовый, а значит, его размер будет непрерывно расти, и нам потребуется периодически стирать записи, сделанные ранее. Картинки для счетчика представляют собой просто цифры от 0 до 9, и берутся из директории img на сервере. Надо заметить, что последнее время многие Web-мастера отказываются от использования SSI, прибегая к другим методам включения. Ведь можно просто вставить такую динамическую картинку:

< img src="/cgi-bin/image.cgi" >

при этом в CGI-скрипте использовать тип данных image/gif (или png, jpg ...). Основная проблема заключается в генерации картинки CGI-программой. Здесь тоже есть решение - графическая библиотека. Подключив такую объектно-ориентированную графическую библиотеку можно не только создавать изображения основными средствами (геометрические фигуры, кисти, шрифты), но и редактировать уже готовые.