Программирование cgi скриптов на перле


Содержание

Программирование cgi скриптов на перле

Форумы в Интернете можно встретить сплошь и рядом.Ни один уважающий себя сайт не обходится без них. Форум дает возможность узнать мнение посетителей о сайте и о том,что они думают об авторе и о его творениях :). Форум,пример которого я здесь приведу не очень сложный,но он обеспечивает все необходимые функции.Для лучшего понимания имеет смысл разбить его на несколько частей,объяснить каждую в отдельности,а затем объединить все вместе.

Начнем не с главной страницы,потому что она обобщает всю информацию,а с середины-добавления нового топика.

Добавление нового топика.

Сначала в директории cgi-bin веб-сервера создадим каталог html ,куда будут записываться все сообщения. Сразу оговорюсь,что все сообщения пишутся в html-файл:сначала топик и сообщение,затем к нему дописываются ответы. По ходу дела все будет понятно.
Сгенерируем форму для добавления новой темы и сообщения.

Если данные введены в форму получаем их и декодируем.

#Открываем каталог и читаем его содержимое.Файлы в каталог записываются в виде #001.html,002.html и т.д.То есть,каждый вновь записываемый файл,увеличивается #на единицу.Это делается следующим образом.

opendir (DIR,»$dir»); while (@mes=readdir (DIR))

# ($count-2)-это для того,чтобы не считать подкаталоги типа «.» и «..». # Проверяем,не являются ли поля формы пустыми.Если нет-открываем файл на запись # и пишем информацию.

if ($nick ne «» && $theme ne «» && $message ne «») < open (FILE,">$dir/$page.html»); print FILE » $theme n»; print FILE » n»; print FILE » n»; print FILE «

n»; print FILE »

n»; print FILE »

n»; print FILE »

n»; print FILE »

n»; print FILE »

Author n»; print FILE » Topic: n»; print FILE » $theme
$nick Posted:»,scalar localtime,»
$message

n»; close (FILE); > else <

#Если одно из полей формы осталось пустым-выдаем ошибку.Это делается для того,чтобы # не создавать пустые файлы,не содержащие информации.Perl’у все равно,что писать :)

print «Content-type:text/htmlnn»; print

Sorry,you didn’t enter your nick or message!

Please,go back and try again

Back HTML exit; > > closedir (DIR); >

# Если все прошло нормально,выносим пользователю благодарность.Новый топик создан.

print «Content-type:text/htmlnn»; print

Thank you, $nick!

Your message is added.

Добавление ответа на топик.

Добавление ответа почти ничем не отличается от добавления топика,единственное отличие- нужно передать адрес страницы,чтобы скрипт знал,куда писать ответ.А он содержится в файле топика.Если посмотреть чуть выше,можно увидеть ссылку Post reply В ней и передается адрес страницы.
Генерируем форму:

# Сначала читаем файл в массив.Это делается для того,чтобы поместить его во фрейм ниже формы # на тот случай,если кто-то захочет вставить цитату из предыдущих сообщений.

$page=$input <'file'>; open (FILE,»$dir/$page»); @data= ; close (FILE); print «Content-type:text/htmlnn»; print

Post reply

HTML splice (@reply); > > > print «

Your nick: vinput type=»text» name=»nick» size=20>
Message:

HTML #Reply to topic.

# Снова проверяем,чтобы поля формы не были пустыми.Если все в порядке,открываем файл, # содержащий топик на добавление и дописываем ответ.

if ($nick ne «» && $message ne «» ) < open (FILE,">>$dir/$page»); print FILE »

n»; print FILE »

n»; print FILE »

n»; print FILE »

$nick Posted:»,scalar localtime,»
$message

n»; close (FILE); close (FILE); > else <

# Если одно из полей осталось пустым-выдаем ошибку.

print «Content-type:text/htmlnn»; print

Sorry,you didn’t enter your nick or message!

Please,go back and try again

# Снова выносим благодарность посетителю.Ответ добавлен.

print «Content-type:text/htmlnn»; print

Thank you, $nick!

Your message is added.

Главная страница.

Ну вот мы,наконец,добрались и до главной страницы.Она выводит список топиков,дату последнего ответа на каждый топик,количество ответов,имя создателя топика.Она заслуживает отдельного описания.

Данные на экран выводятся в виде html-таблицы.

# С этим,думаю,все понятно.А теперь более подробно о том,как получить всю эту информацию. # Открываем каталог и читаем сообщения в массив.

# Каждый файл в каталоге открываем и читаем в массив.

# Теперь в каждом файле с помощью регулярных выражений ищем тему топика,имя автора топика # и количество ответов.

# Количество ответов помещаем в массив reply,отнимая единицу,так как первое сообщение-это # сообщение автора топика.

# Печатаем данные в таблицу,после каждой итерации очищая массив reply,чтобы ответы на # каждый топик не складывались после каждой итерации.

print $title

$name $char $mtime

n»; closedir (DIR);

Ну вот,вроде бы и все.

Полный листинг форума вы можете посмотреть здесь,а пример работы- здесь,на страницах этого сайта.

Конечно,я не реализовал все возможности.Можно добавить регистрацию пользователя,возможность редактирования сообщений и т.д.В дальнейшем я планирую доработать этот форум и сделать его более продвинутым. В данный момент моей целью было объяснить,как это работает.Если я достиг ее-буду рад.

Если вам понравился этот материал-оставьте свой комментарий.

Кстати,более крутой форум написанный на PHP с использованием базы данных MySQL,вы можете посмотреть и скачать в Каталоге скриптов.В нем я реализовал все возможности,не реализованные здесь.Скоро я опишу процесс создания такого форума.

Perl и CGI программы

Perl и CGI программы — особенности использования

Создание CGI скрипта для примера на Perl

В программе Notepad++ создайте новый файл и введите следующие строки:

После, сохраните этот файл с расширением .pl (тип файла: Perl source file).

Первая строка данного кода, указывает путь к интерпретатору CGI скриптов. Остальные, непосредственно исполняемый код.

Загрузка CGI скриптов на сервер

Мы воспользуемся популярным FTP клиентом FileZilla (можно скачать здесь). Войдите в вашу учетную запись на FTP сервере (как это сделать, можно узнать здесь). В правой панели перейдите в каталог cgi-bin вашего домена (путь будет выглядеть так: /domains/your-domen.ru/html/cgi-bin/).

В верхнем меню, перейдите в Передача – Тип передачи, и убедитесь что установлен режим ASCII .

После этого, в левой панели, на вашем файле скрипта нажмите правую кнопку мыши и выберите Загрузить на сервер. Файл будет загружен на сервер, далее, уже на правой панели на файле скрипта нажмите правую клавишу мыши и выберите Изменить атрибуты. Необходимо проверить права на ваш CGI -скрипт. Они должны быть установлены в значение -rwxr-xr-x или 755.

Подробнее о правах доступа

Значение прав доступа файла определяет тех кто имеет право на редактирование и исполнение файлов. Права доступа файла определяются в CHMOD файле. Права доступа можно изменить большинством популярных клиентов FTP или через, встроенный в панель управления, Web FTP.

Наиболее, часто используемые, уровни доступа к файлам:

Ошибки работы скрипта

Для корректной работы, необходимо проверять скрипты перед тем, как помещать их на веб-сервер. Если в скрипте есть ошибки, то, запустив скрипт в unix shell, Вы сможете понять чем недоволен интерпретатор Perl .

Ошибка 403 Если при обращении к скрипту Вы видите сообщение об ошибке 403, это значит, что на скрипт установлены некорректные права доступа. На CGI -скрипты необходимо установить атрибут исполнения (права доступа 755 или -rwxr-xr-x).

Perl и CGI программы — особенности использования

1. Использование готовых скриптов

Если у вас уже есть написанные CGI-скрипты, то прежде чем скопировать их на сервер, вы должны сделать следующие действия:

  • Убедиться, что в скриптах указан правильный путь к интерпретатору:

Perl: /usr/bin/perl
Python : /usr/local/bin/python

  • Если вашему скрипту требуется доступ к базе данных MySQL , то необходимо указать параметры доступа (см. статью Подключение к серверу MySQL)
  • В разделе Управление веб-серверомпанели управления хостингом включить модуль CGI.

Теперь вы можете скопировать свои скрипты на сервер.
Загружать файлы необходимо в каталог ваш_домен/cgi. Файлы из данного каталога будут доступны по адресу http://ваш_домен/cgi-bin/имя_файла. Для того чтобы CGI-скрипты запускались из корневого каталога сайта ваш_домен/docs, необходимо создать в нем файл .htaccess со следующим содержимым:

На скрипты необходимо установить права доступа 755 или -rwxr-xr-x.
Права доступа можно изменить с помощью файлового менеджера панели управления.

2. Написание простейшего CGI-скрипта

Рассмотрим написание простого CGI скрипта на Perl.
Если вы работаете под управлением ОС «Windows», то для работы с кодом скриптов вам необходимо использовать специализированный текстовый редактор, например, Notepad++. Стандартную для Windows программу «Блокнот» лучше не использовать. Для демонстрации работы CGI скрипта необходимо создать два файла. Первый файл представляет собой html-документ с формой ввода текста:

HTML PUBLIC «-//W3C//DTD HTML 4.0//EN»>

Пример работы с Perl

Программирование cgi скриптов на перле

В этой главе вы научитесь использовать Perl для создания скриптов CGI. Коротко говоря, вы получите возможность сочетать ваши знания по языку Perl и CGI, полученные в предыдущих главах. Кроме того, вы узнаете несколько новых приёмов программирования на языке Perl. Как вы уже знаете, можно создать скрипты CGI, используя практически любой язык программирования. Чтобы быть грамотным Web-программистом, вы должны не только знать, как писать программы для WEB, но также необходимо иметь представление о том, какие средства использовать для решения специфических задач. За счёт правильного выбора языка программирования и программных средств всоответствии с вашей задачей, вы можете значительно повысить эффективность работы и сэкономив много сил и времени. Когда вы используете язык Perl для создания скриптов, можно создать устойчивые профессиональные скрипты за относительно короткий промежуток времени. Остаток этой главы посвящен изучению программирования CGI-скриптов на языке Perl. К моменту окончания изучения этой главы вы поймете следующие концепции:

Perl представляет собой эффективное средство для создания надежных скриптов без написания кодов большого объёма, что выгодноотличает его от других языков программирования, таких как C и С++.

Версия 5 языка Perl добавляет много новых возможностей, такихкак поддержка объектно-ориентированных скриптов и усовершенствование техники определения области видимости переменных.

Почему разработчики используют Perl для создания CGI- скриптов?

П редыдущие две главы должны были составить у вас представление о том, что такое CGI и почему мощные возможности языка Perl по обработке текстов делают его хорошо приспособленным для разработки CGI-скриптов.

Д ругие причины и пользования разработчиками языка Perl для написания CGI-скриптов заключаются в том, что Perl обеспечивает широкую поддержку взаимодействия с базами данных, обладает переносимостью и обеспечивает безопасность при работе в сетях. Как уже говорилось, Perl представляет собой один из наиболее мощных языке программирования для обработки текстов. Скрипты CGI обычно имеют дело с интенсивной обработкой текста: анализом данных, обеспечением доступа к базам данных, генерацией HTML-страниц и т.д. Типичный CGI-скрипт, написанный на языке Perl, по своему размеру представляет собой фрагмент программы аналогичного назначения, написанной на C++. Как вы увидите дальше в этой главе, Perl обеспечивает поддержку взаимодействия с базами данных. По существу, Perl имеет встроенный менеджер баз данных Perl был перенесен почти что на все популярные вычислительные платформы такие как Windows, UNIX, MS, DOS.

T o обстоятельство, что Perl является 6ecплатным, также увеличивает его привлекательность. Поскольку Perl не использует указателей, то он является более безопасным и надежным языком, чем С и C++. За счет исключения использования указателей предовращается нарушение доступа к памяти и связанные с этим ошибки. Кроме того используя регулярные выражения языка Perl, легко проверить целостность входных данных и отфильтровать всякие escape-последовательности, которые МОГУТ угрожать безопасности вашей системы. Наконец, для повышения безопасности имеется специальная версия Perl, называемая taintperl, предотвращающая использование каких-либо входных данных в качестве системных команд.

Н а UNIX-системах программисты могут исполнять скрипты, написанные на языке Perl, как выполнимые файлы. Иными словами, для них нет необходимости делать что-то специальное для вызова скрипта. На системах, основанных на DOS или Windows, некоторые серверы не исполняют скрипты Perl автоматически. В этом случае вам придется писать пакетный файл, который вызывает команды Perl для запуска скрипта. Для некоторых систем придется подробнее познакомиться с документацией по вашему НТTР-серверу относительно запуска скриптов Perl. Большинство серверов HTTP предполагает, чтоскрипты CGI находятся в каталоге под названием cgi-bin. В этом случае можно вызвать скрипт с помощью URL, подобно следующему:

Примечание: В URL задан каталог cgi-bin, но в действительности скрипт может находиться где угодно в системе. Вы должны определить его расположение при установке сервера HTTP.

Вызов СGI-скрипта в системе UNIX

Е сли вы поместили ваш скрипт в каталог cgi-bin и сделали его выполнимым, то пользователь может вызвать скрипт, непосредственно используя URL. Однако необходимо выполнить несколько шагов. Впервую очередь, в начало скрипта необходимо поместить строку, которая идентифицирует файл как программу на языке Perl:

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


Д алее необходимо сделать скрипт выполнимым, используя команду сhmod:

chmod +x your-srcipt

Вызов скрипта на языке PERL из DOS и WINDOWS

Введение в программирование на Perl

Язык программирования Perl является основным средством разработки CGI-скриптов для Web-узлов. Его не применяют только там, где требуется высокая эффективность кода и нет стандартных библиотек для Perl.

Perl как язык разработки скриптов имеет ряд преимуществ. Перечислим их в порядке значимости:

  • независимость от программно-аппаратной платформы;
  • мощные средства разбора строк;
  • простота работы с переменными окружения ;
  • простота работы со входными и выходными стандартными потоками;
  • возможность чтения заданного числа символов из входного потока;
  • хешированные таблицы;
  • возможность организации конвейеров;
  • библиотеки TCP/IP-обмена;
  • множество стандартных библиотек прикладных программ.

Все это делает программное обеспечение , написанное на Perl, мобильным, а разработку программ — быстрой и простой.

Структура Perl-программы

У программы на языке Perl нет жестко заданной структуры. Точнее сказать, программист не обязан ее соблюдать. Если же он захочет, чтобы интерпретатор контролировал объявление и использование переменных и конструкций языка, то при помощи класса strict он может такой контроль установить.

Программа на Perl состоит из операторов языка, которые должны заканчиваться символом «;». Например:

В общем случае операторы делятся на простые и составные. Простой оператор — это оператор print , например, а составной — while() :

Программа на Perl исполняется интерпретатором Perl. Есть и компиляторы с этого языка, но они используются реже. При программировании CGI-скриптов в Unix интерпретатор вызывается из того же файла, который содержит программу, например:

В данном случае первая строка — это вызов интерпретатора с указанием полного пути к нему от корневого каталога файловой системы.

Вообще говоря, символ «#» — это символ начала комментария в Perl. Последовательность символов от символа «#» до конца строки рассматривается как комментарий. Часто в качестве комментария используют целые строки. В этом случае символ «#» ставится в первой позиции строки:

Данный пример демонстрирует не только использование комментариев, но еще и формирование HTTP-заголовка. Без этого заголовка система выдаст сообщение о внутренней ошибке сервера, а в файле журнала ошибок появится запись о неправильном заголовке.

В последнее время основным рабочим местом авторов HTML-страниц и CGI-скриптов стали системы на платформе Windows. Как известно, конец строки в Windows и в Unix обозначается разными последовательностями неотображаемых символов. Если автор использует текстовый редактор в Windows, а потом как binary копирует файл в Unix, то эти символы передаются. Сервер начинает сообщать об ошибках, которые автору не видны. В таком случае можно сделать следующее: либо копировать программы как char , тогда происходит перекодировка, либо использовать «умные» текстовые редакторы.

Удобна также и Samba, которая позволяет редактировать «по месту» из Windows в Unix.

Стандартный поток вывода

Основная цель создания CGI-скрипта — обработка данных запроса пользователя и формирование отклика сервера на этот запрос. Можно рассматривать и другие задачи, которые позволяют решать CGI-скрипты, но эта задача — главная. Скрипт должен формировать не просто отклик, а HTTP-отклик. Это означает, что он должен сформировать заголовок и тело HTTP-сообщения, которые отделяются друг от друга пустой строкой.

Проще всего реализовать такой отклик с помощью команды print :

Первая строчка определяет заголовок HTTP-отклика и пустую строку (два символа «\n\n»). Остальные операторы print формируют тело сообщения. Оператор print пишет в стандартный вывод список своих аргументов. Вообще говоря, print можно использовать для вывода данных в любой файл. Если имя файла не указано, то вывод осуществляется в стандартный поток вывода .

Переменные окружения

Скрипт порождается сервером в некоторой операционной среде. Эта среда называется окружением (environment). Частью окружения являются так называемые переменные окружения . При вызове скрипта их порождает и присваивает им значения HTTP-сервер. Список переменных определен спецификацией Common Gateway Interface.

В Perl существует встроенный системный массив переменных окружения %ENV . Символ «%» перед именем массива означает, что это массив ассоциативный, т.е. значение элемента массива может быть выбрано путем указания ключа, с которым оно связано. Например, нужно определить метод доступа к скрипту:

В данном контексте символ «$» перед именем массива не должен вводить в заблуждение. Обращение происходит к элементу ассоциативного массива. Это скаляр, поэтому и применяется символ «$». Ключ, по которому выбирается значение, указан в фигурных скобках.

Очень полезен скрипт распечатки всех переменных окружения , которые переданы скрипту ( perlenv2.htm ). Обычно этот отчет получают при отладке HTML-форм:

Этот простой скрипт распечатывает значения всех переменных окружения , используя цикл foreach . В этом цикле переменная цикла hkey пробегает по всем уникальным ключам (именам переменных окружения ), которые доставляет функция keys .

Немножко о модуле CGI.pm в Perl

CGI — Simple Common Gateway Interface Class

Модуль CGI предназначен для упрощения создания HTML документов скриптом написанным на Perl’е. Модуль CGI подключается к вашему скрипту на perl, так же, как и другие модули:

use CGI;

Есть два способа использования модуля CGI: это объектно-ориентированный стиль и как набор функций. при использовании объектно-ориентированного стиля, вы создаете один или несколько объектов, а потом используете их методы для формирования HTML-страницы. Вот пример использования объектно-ориентированного стиля:

#!/usr/bin/perl use CGI; # Подключить модуль CGI $q = new CGI; # Создать новый объект CGI print $q->header # Вызов метода header, который печатает HTTP заголовок # это вместо print «Content-Type: text/html\n\n» $q->start_html(‘Hello World’) # Печатаем начало документа (тэги и ), # при этом вставляем строчку Hello World $q->h1(‘Hello World’) # Печатаем заголовок первого уровня $q->end_html; # Печатаем конец документа ( )

Использовать CGI как набор функций, еще проще, в этом случае, вам не нужно создавать новый объект, вы просто используете функции CGI. Следующий пример демонстрирует использование CGI как набор функций, в результате его выполнения будет выдана страница аналогичная странице выдаваемой в предыдущем примере.

#!/usr/bin/perl use CGI qw/:standard/; # Загружаем стандартные процедуры CGI print header # Печатаем HTTP заголовок # это вместо print «Content-Type: text/html\n\n» start_html(‘Hello World’) # Печатаем начало документа (тэги и ), # при этом вставляем строчку Hello World h1(‘Hello World’) # Печатаем заголовок первого уровня end_html; # Печатаем конец документа ( )

Синтаксис функций в CGI таков:

name(<-atr=>value, -atr2=>value2>, ‘text’)

name — это имя функции, которое как правило совпадает с именем интересующего тэга. О тэгах, имена которых не совпадают с именами соответствующих функций, речь пойдет дальше.
atr и atr2 — это имена атрибутов данного тэга.
value и value2 — это значения тэгов.
text — это текст находящийся между открывающим и закрывающим тэгами.
Любой из указанных параметров может опускаться. Рассмотрим все изложенное на примерах.

print h1() # Печатает

Hello world

Hello

Некоторые функции в CGI используются парами, подобно закрывающим и открывающим тэгам в HTML, например:

start_html и end_html ( ) start_table и end_table ( ) start_ul и end_ul ( ) start_form и end_form ()

Вы наверное уже успели заметить, что названия функций аналогичны названиям тэгов HTML. В этом и заключается простота в освоении CGI, достаточно знать HTML, чтобы через 30 мин. свободно использовать CGI. Вот список функций, имена которых не совпадают с именами тэгов:

print redirect(‘http://www.perl.ru/’); # Переадресовать браузер к другой странице. # Пример известной нам функции выполняющей функции сразу нескольких тэгов print start_html(-title=>’Hello World’, # Заголовок документа -author=>’flp@mail.ru’, # Автор -meta=><'keywords'=>‘world hello flp’, # Ключевые слова ‘copyright’=>’copyright 2000 Philip Koryaka’>, # Авторские права -style=><'src'=>‘/styles/style1.css’>, # Стиль для документа -BGCOLOR=>’blue’); # BGCOLOR для документа print header(-Refresh=>’10; URL=http://www.perl.ru’, # Обновление документа -cookie=>$cookie, # Устанавливаем Cookie -type=>’image/gif’, # Тип документа -expires=>’+3d’); # Срок годности # Следующий тэг создает список радио-кнопок (аналог ): print radio_group(‘name’=>’OS’, ‘values’=>[‘Unix’,’Windows’,’Macintosh’], ‘default’=>’Unix’); # Следующий тэг создает поле ввода пароля (аналог ): password_field(-name=>’secret’, -value=>’starting value’, -size=>50, -maxlength=>80); # Аналогично данной функции используются функция file_field

Сильной стороной CGI является использование параметров, передаваемых скрипту. Функция param() взращает значение любого из параметров.

Вызовем скрипт script.cgi?name=bob&lang=en&opt=1&opt=4&opt=8 $a = param(‘name’) # Переменной $a присваиваем значение параметра name ($a=bob) $a = param(‘lang’) # Переменной $a присваиваем значение параметра lang ($a=en) @a = param(‘opt’) # Массиву @a присваиваем значения параметра opt (@a[0]=1; @a[1]=4; @a[2]=8;)

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

Жемчужные формы . или как приобщиться к 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 претендует на то, чтобы считаться не просто программой, но подлинной интегрированной средой разработчика ( >
Еще немного Перла
Есть и еще одна оболочка — 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-сервер был затронут момент описания директорий сервера.

Options Indexes FollowSymLinks Includes

Следует обратить внимание на строку 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-код нужно вставить строчку вида:

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

Элементы errmsg Посылается сообщение об ошибке
sizefmt Формат вывода размера файла
timefmt Формат вывода времени
echo var Печатает специальную переменную
cgi Запуск cgi-скрипта, с включением результата
cmd Запуск комманды shell
file Выдает размер файла (полный путь)
virtual Путь от корня Web-сервера
file Вставляет файл (полный путь)
virtual Путь от корня Web-сервера
var Имя переменной
value Присваемое значение

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

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

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

#!/usr/bin/perl
use Time::localtime;

print «Content-Type: text/html \n\n»;

#print «Current status: $curr \n\n»;

$yes=0;
open(COUNT, «count.dat») || die «Cannot open count.dat. \n»;
while($str= )
<
chomp($str);

open(CTR, «ctr.dat») || die «Cannot open ctr.dat file. \n\n»;
$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);

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

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

Как «оживить» Perl/CGI скрипт

Введение

Данная статья призвана помочь взять «быстрый старт» тем, кто решил строить Web-приложения «своими руками» и выбрал в качестве средства для их создания язык программирования Perl (Practical Electric Rubbish Lister). Здесь вы найдете сведения о том где «взять» Perl-интерпретатор и как его установить, какие существуют способы отладки Perl-программы, а в завершении ознакомитесь с самой простейшей Perl-программкой.

Начнем с того, что Perl — это язык для создания серверных скриптов (литературный эквивалент — сценарий), т.е. Perl-программа выполняется на Web-сервере, а не на компьютере пользователя, как, например JavaScript-сценарии или Java-апплеты. Поэтому для проверки ваших творений одного броузера будет мало, необходимо иметь доступ к Web-серверу. Самый простой способ разрешения данной проблемы — использовать для отладки Perl-программы сервер в Internet, на котором разрешено выполнение сценариев. Но в этом случае, первое — вы тратите свои кровно заработанные денежки, второе — наслаждаетесь «быстротой соединения с Internet» -). Я же хочу предложить вам несколько альтернативных методов отладки Perl-программ, которые, надеюсь, избавят вас от вышеописанных неудобств.

Метод1. Установить на своем компьютере Web-сервер и работать с ним как с обычным Internet-сервером.

Метод2. Воспользоваться специальными программами-отладчиками.

Метод3. Перенаправлять результаты работы интерпретатора в файл (стандартная возможность любой ОС).


У каждого из этих способов есть свои достоинства и недостатки. Но прежде чем применить один из вышеописанных методов, нужно настроить Perl-интерпретатор. Первым делом следует загрузить интерпретатор из Internet. Для OC Windows 9x следует скачать файл по следующему URL-адресу: http://www.activeware.com/download/ActivePerl/Windows/5.6/ActivePerl-5.6.0.613.msi . Если вы же используете другую ОС, загрузите страницу по адресу http://www.activeware.com/download , на ней выберите соответствующую ссылку, после чего «скачивайте» предложенный для этой цели файл.
После окончания процесса загрузки, запустите файл ActivePerl-5.6.0.613.msi или соответствующий файл для вашей ОС. Начнется процедура установки, в процессе которой вам предстоит ответить на ряд вопросов. В частности, о том, в какую директория нужно установить интерпретатор (устанавливать Perl желательно по следующему пути: диск:\usr).
Web-сервер (например, Apache) «узнает» о том, какую программу необходимо запускать для интерпретации скрипта из первой строчки программного кода скрипта. Например, строка #!/usr/bin/perl означает, что интерпретатор находится в директории /usr/bin и имеет имя perl.
Далее подробно рассматриваются все вышеперечисленные методы отладки Perl-программ.

Метод 1

Главное достоинство данного метода — это то, что работа с вашим сервером полностью аналогична работе с «реальным» Internet-сервером. Основной же недостаток заключается в том, что вы видите только окончательный результат выполнения скрипта, и не можете проследить его выполнение по шагам. Максимальная эффективность достигается при использовании данного метода в комплексе с методами 2 и 3, которые описываются ниже.
В качестве Web-сервера рекомендую использовать Apache (это один из самых распространенных, надежных серверов, а главное, что он бесплатный). Для корректной работы Apache под Windows 95 необходимо установить Winsock 2 (для Windows 98 и Windows NT 4.0 эта процедура не потребуется). Загрузите с сайта фирмы Microsoft файл W95ws2setup.exe (http://www.microsoft.com/windows/downloads/bin/W95ws2setup.exe) и запустите его. Произойдет установка Winsock 2. Теперь скачиваем файл apache_1_3_12_win32.exe для установки Apache под Windows (http://www.apache.org/dist/binaries/win32/apache_1_3_12_win32.exe). После установки сервера, его необходимо сконфигурировать. Для этого в любом текстовом редакторе открываем файл httpd.conf , который находится в подпапке Conf папки, в которую был установлен Apache. Далее выполните следующие действия по конфигурации сервера:
1. Находим строку DocumentRoot и прописываем физический путь к корневому каталогу (сайту). У меня, например, этот путь следующий «C:/FrontPage Webs/Content/mudconnector/» (заметьте, что при указании пути используется Unix разделитель, даже в среде Windows). Корневой каталог является для сервера стартовой точкой при поиске документов. Обращение к корневому каталогу осуществляется по URL-адресу, в котором указано только имя сервера (имя папки или страницы не указывается). Обычно при употреблении термина каталог опускают слово «виртуальный». Виртуальные каталоги представляют собой директории (папки), доступ к которым через Web осуществляется по логическому имени (псевдониму). Физически эти папки могут находиться в любом месте на вашем жестком диске или на другом компьютере. При создании виртуальному каталогу присваивается псевдоним, который ставится в соответствии физическому пути к нему.
2. Чуть ниже находится строка со словом Directory и прописываем то же путь («C:/FrontPage Webs/Content/mudconnector/»).
3. Строка со словами Options All говорит о том, что включены все возможности сервера, в том числе и поддержка cgi.
4. В строке со словами ScriptAlias /cgi-bin/ указываем путь к cgi-bin каталогу (в моем случае этот путь «C:/Apache/cgi-bin/»).
5. Чуть ниже в строке со словом Directory указываем тот же путь «C:/Apache/cgi-bin»
6. Добавляем строку AddHandler cgi-script .cgi .pl. Тем самым даем понять серверу, что все фалы с расширением .cgi, .pl — являются cgi исполняемыми, т.е. программами.
Итак, настройка сервера завершена. Если вы сделали все правильно, то после запуска файла apache.exe на экран будет выведено сообщение типа «Apache/1.3.12 (Win32) running. «. Теперь загрузите броузер и введите URL-адрес http://localhost. В броузер будет загружена домашняя страница корневого Web-узла — index.html (на моем компьютере физический путь к этой странице C:/FrontPage Webs/Content/mudconnector/index.html)
Теперь проверим, как выполняется Perl-программа на нашем сервере. Для этого создадим простенькую программку, текст которой приведен ниже:
#!/usr/bin/perl
print «Content-type: text/html\n\n»;
print «Ура работает!\n»;
В текстовом редакторе создайте новый файл и введите вышеприведенный код программы. Сохраните данный файл, например, под именем test.pl в папке cgi-bin, которая находится в папке, в которую вы установили Apache. После этого перейдите в броузер и введите URL-адрес http://localhost/cgi-bin/test.pl. В броузер загрузится страница, содержащее долгожданное сообщение Ура работает! Это означает, что вы победили! Теперь можно закричать «Ура!»

Метод 2

Отладчик, какое это сладкое слово для программиста. Конечно же, используя отладчик, вы на порядок быстрее доберетесь до этих подлых глюков, которые мешают сделать рабочую программу. Но давайте серьезно. Существует довольно много программ-отладчиков для Perl-программ. Все они имеют свои плюсы и минусы. Рассмотрим наиболее популярные из них:
Perl Builder (http://www.querybot.com/perlbuilderev.exe) — одна из самых мощных и удобных программ — отладчиков под W32. Из наиболее полезных особенностей данной программы можно выделить: мощный механизм отладки скриптов, возможность просмотра значений переменных, очень удобный интерфейс эмуляции Cgi-запросов, приятный (дружественный) пользовательский интерфейс. Единственный минус, как для нас, жителей СНГ, это то, что данная программа коммерческая
DzSoft Perl Editor (http://www.dzsoft.com/download/dzperl22.zip) — эта программа также коммерческая. Небольшая и очень удобная программа. Особенности: возможность upload-а скриптов на сервер, быстрая вставка (вставка определенного куска кода нажатием, одной клавиши), возможность редактирования переменных окружения, возможность работать в разных кодировках, что очень удобно для русскоязычного пользователя.
Perl Studio (http://www.perl-studio.com/pstudio.exe) — очень мощный инструмент для создания Perl скриптов, функции отладки реализованы слабее, чем у вышеупомянутых «собратьев», но встроено очень много функций, полезных для создателя скриптов: автоматизация написания кода (например, SQL запросы, SSI — директивы), множество помощников и построителей, интуитивный интерфейс, хорошая документация. Опять же, программа коммерческая.

Метод 3

Самый простой метод работы с Perl-скриптами. Этот метод, не требует ни каких дополнительных программ кроме Perl — интерпретатора и броузера. Суть метода очень проста: после создания Perl скрипта мы запускаем интерпретатор и перенаправляем результаты работы в файл (например, для скрипта test.pl — perl test.pl > test.htm). После этого в полученном файле удаляем строку Content-type: text/html\n\n. Просматривая данный файл броузере, вы получите результат работы скрипта.

Рекомендуется не «зацикливаться» на каком-либо одном из этих методов, а стараться использовать комбинированный подход.

Perl = простота Basic + мощь Cи++

Введение

Популярность Internet растет с каждым днем, однако если раньше клиенты провайдеров в основном хотели получить доступ к системам электронной почты, то в последние два года наметилась тенденция к расширению спектра требуемых услуг. Теперь интересы пользователей не ограничиваются электронным почтовым ящиком и поиском какой-либо информации в WWW, они стремятся создавать собственные Web-страницы или даже Web-узлы. Новички организуют простые HTML-страницы, не обращая особого внимания на стиль и дизайн. Но со временем у них появляется желание сделать нечто эффектное и интересное для определенной части Internet-сообщества. И тогда новоявленному Web-мастеру приходится более полно изучить язык разметки гипертекста (HTML) и языки создания клиентских сценариев (VBScript1 и JavaScript)*.

Впоследствии у него могут появиться и новые запросы, — например пообщаться с посетителями своего узла. И в этом случае его уже не удовлетворит, если в тело страницы просто добавится Webmaster. Так, он решит, что неплохо было бы получить достаточно полную информацию о посетителях узла (имена, e-mail, телефоны, факсы и адреса), подсчитать количество посещений, собрать различные мнения и, наконец, создать базу данных, чтобы пользователям сеансов связи предоставить какие-либо определенные услуги. Но для всего этого знания HTML, VBScript1 и Java Script становится явно недостаточно, так как они описывают только технологию взаимодействия сервера и клиента.

Следовательно, нужно изучить языки для создания программ, работающих на сервере. Обычно их разрабатывают на Perl (Practical Extraction and Report Language — практический язык извлечений и отчетов), применяемом также для обработки потоков информации. Изначально предполагалось, что он будет использоваться в ОС Unix, но в дальнейшем Perl стали переносить на другие платформы, и сейчас он существует в самых разных версиях — для Unix, Windows, MS-DOS, OS/2, MacOS, Amiga, Atari ST, VMS, Plan 9 и др.

Для чего нужен Perl?

Perl предназначен для выполнения задач командных сценариев Unix в тех случаях, когда они слишком трудны, плохо переносимы или сложны для программирования на другом языке, например на Cи. Иногда содержимое Perl-программ выглядит для непосвященных как случайный набор символов, но, естественно, он имеет контрольную сумму, а каждый его символ — свое назначение.

Perl распространяется бесплатно, поэтому исходные тексты языка и многие двоичные файлы для использования вне Unix-архитектуры можно получить на одном из серверов сети CPAN (Comprehensive Perl Archive Network) по адресу http://www.perl.com/CPAN или на узле поддержки разработчиков по адресу http://www.basicnet.sonnet.ru/dounload.

Для создания и тестирования Perl-программ необходимы:

  • любой текстовый редактор, позволяющий сохранять файлы в ASCII-коде (например, встроенный редактор из оболочки FAR Commander);
  • программа конвертации ACSII-файлов в формат Unix-систем (в частности, редактор Castillo TextEditor, который можно свободно загрузить с сервера www.castillobueno.com);
  • интерпретатор Perl для отладки (у автора — Win32-версия Perl, доступная по адресу ftp.perl.com/pub/perl);
  • Web-сервер, поддерживающий работу Perl-программ (для проверки интерфейсных программ был применен Web-сервер OmniHTTPd 2.0 Professional, который можно загрузить с узла компании-разработчика по адресу www.omnicron.ab.ca/httpd);
  • FTP-клиент для загрузки файлов на сервер (больше всего для этого подходит CuteFTP 2.0, позволяющий устанавливать права доступа к файлам; его можно найти по адресу www.cuteftp.com);
  • любой Web-браузер (был использован MS IE 4.0).

Программы на языке Perl с расширениями .cgi или .pl должны находиться в специальном каталоге на Web-сервере, обычно называемом CGI-BIN. Размещая в нем свои программы, пользователи могут создавать там собственные папки для обеспечения иерархичности. Если сервер работает в среде Unix, то необходимо придать ему определенные права для доступа. Для исполняемых Perl-программ следует задать атрибут 755. Если в них существует какой-либо каталог, в котором будут производиться запись и удаление файлов, то предпочтительнее поставить атрибут 777 (полный доступ). Когда сервер работает под управлением операционной системы Windows 9.x/NT, то не следует преобразовывать созданные файлы в формат систем Unix. А операционные системы семейства Windows не позволяют выставлять атрибуты доступа подобно Unix-системам — в них используется другая методика.

Структура Perl-программ

Perl-программы очень похожи на написанные на Cи/Cи++, возможно, потому, что сам язык был написан на Cи. Все Perl-программы состоят из операторов, имеющихся в файле и рассматриваемых в совокупности как одна большая программа, подлежащая выполнению. Но понятия «основной» (main) программы, как в языке Си, здесь нет. Комментарием в Perl является все, что следует за «решеткой» (#), вплоть до конца строки. Интерпретатор языка перед выполнением разбирает программу и компилирует в свой внутренний формат. Поэтому после ее запуска невозможно получить сообщение о синтаксической ошибке — это происходит только в процессе отладки программы в командной строке. В результате обеспечивается быстрое выполнение операций языка Perl после запуска.

Для написания программы можно использовать любой текстовый редактор. Так, в Windows это Notepad (Блокнот) или WordPad, в OS/2 — e или epm, в Unix — vi или emacs. Обычно лучшему пониманию языка способствует разбор небольшой программы (см. листинг 1).

Листинг 1. Пример программы на Perl #!/usr/local/bin/perl @passwords = qw (inet basic net); print ”Enter the login: ”; $login = ; chomp ($login); if ($login eq ”Root”) < print ”Hello, Administrator! Glad to see you again!\n ”; >else < print ”Enter password: ”; $pass = ; chomp ($pass); $i = 0; $flag = ”no”; while ($flag eq ”no”) < if ($passwords[$i] eq $pass) < $flag = ”yes”; >elseif ($i ‘work in Microsoft’, ‘MY’ => ‘write this article’, ‘BC’ => ‘work as the Pres >): open (HANDLE,”filename.txt”); while ( ) < # Этот цикл будет считывать информацию из файла построчно >Режим записи (Write) имеет следующий вид: open (HANDLE,”>filename.txt”); Отличие синтаксиса операций записи от синтаксиса чтения заключается лишь в том, что перед именем файла стоит символ «больше чем» (>). Этот знак сообщает, что следует создать указанный в кавычках файл и записать или обновить (если он уже существует) его содержимое. Чтобы записать в него информацию, нужно обратиться к помощи оператора print: open (HANDLE,”>filename.txt”); print HANDLE ”Записать этот текст в файл. ”; Режим добавления (Append) синтаксически выглядит так: open (HANDLE,”>>filename.txt”); print HANDLE ”Дописать этот текст в файл. ”; Он схож с режимом записи. Разница лишь в том, что при его описании ставится двойной знак «больше чем» (>>). Если указанный файл не существует, то он будет создан, в противном случае введенная информация будет добавлена в конец. Когда выполняется операция дополнения, данные можно не только записывать, но и считывать из файла. В случае успешного выполнения все формы функции open возвращают значение true, а в случае неудачи — false. Например, если при попытке открыть файл для чтения выдается значение false, то это означает, что файла нет или доступ к нему запрещен. А когда при открытии файла для ввода информации это значение возвращается, то можно сделать вывод, что либо файл защищен от записи, либо невозможна запись в каталог или доступ к нему. Если затем программа завершит свою работу или файл заново откроется, то не нужно закрывать его после окончания работы с дескриптором — операция открытия файла закрывает ранее задействованный дескриптор. Тем не менее лучше все же закрыть файл с помощью операции close. Подобная структура является «хорошим тоном» при программировании: close (HANDLE); Отладка. Всякий раз при открытии файла разумно использовать вместе с оператором open оператор die. Бывает, что файл по какой-то причине нельзя правильно открыть. Программа вроде бы выполнилась, как требовалось, а в файл записалось вовсе не то, что ожидалось. В подобном случае оператор die прерывает выполнение программы и выдает сообщение об ошибке при открытии файла. В синтаксисе совмещения open и die используется «логическое ИЛИ» (||): open (HANDLE,”>>filename.txt”) || die ”Ошибка добавления в файл filename.txt $!\n”; Функция die, название которой можно перевести с английского как «откройся или умри», прерывает выполнение программы. Выдается сообщение об ошибке, а также информация о том, что ее вызвало. Perl сохраняет сведения о последней системной ошибке в специальной переменной $!. Если после функции die вставить $!, то от ОС будут получены дополнительные данные, которые помогут отладить программу. Проверка файлов. Теперь можно открыть дескриптор файла для записи, уничтожив имеющийся файл с таким же именем. Но для этого сначала нужно проверить, существует ли файл с таким именем, чтобы не стереть какую-либо важную информацию. При этом следует использовать следующую конструкцию: $filename = ”filename.txt”; if (-e $filename) < print ”Файл $filename уже существует\n”; >else < print ”Файл $filename не найден\n”; >И для нескольких файлов можно за один раз выяснить, существуют ли они, просто уничтожив первую строку предыдущего примера и заменив вторую конструкцией if (-e ”filename.001” && -e ”filename.002”) < Есть множество других операций для проверки файлов. Например, чтобы убедиться в наличии какого-либо файла и возможности чтения из него, нужно вместо операции -e выполнить -r, а в случае требования возможности записи —w. Можно проверить один и тот же файл на доступность чтения и записи информации, выполнив следующее: $filename = ; chomp ($filename);# убрать символ новой строки if (-r $filename && -w $filename) < # файл существует, мы можем читать из него # и записывать в него . . . >Чтобы определить возможность чтения для целой группы файлов с одинаковым расширением, можно использовать конструкцию: @files = ; foreach (@files) < print ”$_ is readable\n” if -r; >При большинстве подобных проверок, а их около 20, возвращается значение true или false. Отличия от Win32. При работе на Perl под управлением Windows существуют некоторые нюансы, о которых следует знать. Во-первых, нужно указывать полный путь к файлу (вместе с именем диска), над которым будут выполняться какие-либо действия, например open (HANDLE,”c:/scripts/newfile.txt”) || die ”Error opening c:/scripts/newfile.txt $!\n”; . close (HANDLE); Во-вторых, блокировка файла происходит иначе, чем в Unix-системах. При использовании Windows 9.x эта операция вообще не поддерживается, а в Windows NT выполняется весьма своеобразно — перед выполнением команд копирования или изменения имени файла нужно удостовериться, что вы уже закрыли его. Иначе они просто не выполнятся.
Дескриптор Описание
STDIN Стандартный ввод (по умолчанию с клавиатуры)
STDOUT Стандартный вывод (обычно на консоль; во многих Web-приложениях в браузер)
STDERR Устройство, в которое выводится сообщение об ошибке (обычно на консоль, а на Web-сервере это зачастую лог-файл ошибок сервера)

Дата добавления: 2020-04-04 ; просмотров: 386 ; ЗАКАЗАТЬ РАБОТУ

Программирование cgi скриптов на перле

CGI (от англ. Common Gateway Interface — «общий интерфейс шлюза») — стандарт интерфейса, используемого для связи внешней программы с веб-сервером. Программу, которая работает по такому интерфейсу совместно с веб-сервером, принято называть шлюзом, хотя многие предпочитают названия «скрипт» (сценарий) или «CGI-программа».

Поскольку гипертекст статичен по своей природе, веб-страница не может непосредственно взаимодействовать с пользователем. До появления JavaScript , не было иной возможности отреагировать на действия пользователя, кроме как передать введенные им данные на веб-сервер для дальнейшей обработки. В случае CGI эта обработка осуществляется с помощью внешних программ и скриптов, обращение к которым выполняется через стандартизованный (см. RFC 3875: CGI Version 1.1) интерфейс — общий шлюз.

Упрощенная модель, иллюстрирующая работу CGI:

Сам интерфейс разработан таким образом, чтобы можно было использовать любой язык программирования, который может работать со стандартными устройствами ввода-вывода. Такими возможностями обладают даже скрипты для встроенных командных интерпретаторов операционных систем, поэтому в простых случаях могут использоваться даже командные скрипты.

Как работает CGI?¶

Обобщенный алгоритм работы через CGI можно представить в следующем виде:

  1. Клиент запрашивает CGI-приложение по его URI.
  2. Веб-сервер принимает запрос и устанавливает переменные окружения, через них приложению передаются данные и служебная информация.
  3. Веб-сервер перенаправляет запросы через стандартный поток ввода (stdin) на вход вызываемой программы.
  4. CGI-приложение выполняет все необходимые операции и формирует результаты в виде HTML.
  5. Сформированный гипертекст возвращается веб-серверу через стандартный поток вывода (stdout). Сообщения об ошибках передаются через stderr.
  6. Веб-сервер передает результаты запроса клиенту.

Области применения CGI¶

Наиболее частая задача, для решения которой применяется CGI — создание интерактивных страниц, содержание которых зависит от действий пользователя. Типичными примерами таких веб-страниц является форма регистрации на сайте или форма для отправки комментария. Другая область применения CGI, остающаяся за кулисами взаимодействия с пользователем, связана со сбором и обработкой информации о клиенте: установка и чтение «печенюшек»-cookies; получение данных о браузере и операционной системе; подсчет количества посещений веб-страницы; мониторинг веб-трафика и т.п.

Это обеспечивается возможностью подключения CGI-скрипта к базе данных, а также возможностью обращаться к файловой системе сервера. Таким образом CGI-скрипт может сохранять информацию в таблицах БД или файлах и получать ее оттуда по запросу, чего нельзя сделать средствами HTML.

CGI — это не язык программирования! Это простой протокол, позволяющий веб-серверу передавать данные через stdin и читать их из stdout. Поэтому в качестве CGI-обработчика может использоваться любая серверная программа, способная работать со стандартными потоками ввода-вывода.

Perl CGI программирование

Что такое CGI

CGI в настоящее время поддерживается NCSA, NCSA CGI определяется следующим образом:

CGI (Common Gateway Interface), Common Gateway Interface, который является программа, работающая на сервере, например: HTTP-сервер, клиентский интерфейс обеспечивает такой же HTML-страницу.

просмотр веб-страниц

Чтобы лучше понять, как работает CGI, мы можем нажать на ссылку на веб-странице или URL процесса:

  • 1, использовать браузер для доступа к URL и подключиться к HTTP веб-сервер.
  • 2, Web-сервер получает сообщение с запросом будет анализироваться URL и посмотреть получил доступ к файлам на сервере, если есть, если есть, чтобы вернуть содержимое файла, в противном случае она возвращает сообщение об ошибке.
  • 3, браузер получает информацию с сервера и отображает полученный файл или сообщения об ошибках.

Программы CGI могут быть сценарий Python, Perl скрипт, скрипт SHELL, C или C ++ программ.

CGI Chart

Конфигурация сервера Web и поддержка

Перед тем, как проводить программирование CGI, убедитесь, что ваш веб-сервер был настроен для поддержки CGI и обработчик CGI.

Apache поддерживает конфигурацию CGI:

Настройка каталога CGI:

Все сервера HTTP для выполнения программы CGI сохраняются в предварительно сконфигурированной директории. Этот каталог называется каталог CGI, а также по соглашению, он называется / вар / WWW / CGI-BIN каталога.

CGI расширение файла .cgi, Perl может также использовать расширение .pl.

По умолчанию, конфигурация сервера Linux работает каталог CGI-BIN является / Var / WWW.

Если вы хотите указать другой каталог для запуска CGI скриптов, вы можете изменить файл конфигурации httpd.conf следующим образом:

Добавьте суффикс .pl AddHandler, так что мы можем получить доступ к конец .pl файла сценария Perl:

Первая программа CGI

Ниже мы создаем файл test.cgi, код выглядит следующим образом:

Затем откройте браузер HTTP: //localhost/cgi-bin/test.cgi, выходные результаты являются следующими:

Выход первой строке сценария «Content-Type: Текст / html \ г \ п \ г \ п» отправляется в браузер и сообщить браузеру, чтобы отобразить тип содержимого «текст / html».

заголовок HTTP

содержание test.cgi файлов в: часть заголовка HTTP является «Content-Type текст / html», он будет направлен к типу контента браузер сообщает файлы браузера.

Формат заголовка HTTP, выглядит следующим образом:

В следующей таблице приведены сведения в программах CGI заголовка HTTP часто используются:

руководитель описание
Content-Type: MIME-объект, соответствующий запросу информации. Например: Content-Type: Текст / html
Истекает: Дата дата и время отклика истекло
Расположение: URL Чтобы перенаправить получателя на запрос, не расположение URL для выполнения запроса или идентификации новых ресурсов
Последнего изменения: Дата Запрошенный ресурс Последнее изменение
Content-Length: N Запрос Content-Length
Set-Cookie: String Настройки Http Cookie

Переменные окружения CGI

Все программы CGI получили следующие переменные окружения, которые сыграли важную роль в программе CGI:

имя переменной описание
CONTENT_TYPE Это значение указывает на то, что переменная окружения к MIME типа передачи информации. В настоящее время переменные среды, как правило, CONTENT_TYPE: применение / х-WWW-форм-urlencoded, он сказал, что данные из HTML-формы.
CONTENT_LENGTH Если информация о режиме передачи сервера и программа CGI является POST, даже если переменная окружения ввода STDIN число байтов, которые можно прочитать достоверные данные от стандарта. Эта переменная окружения при чтении входных данных должны быть использованы.
HTTP_COOKIE содержание COOKIE в клиенте.
HTTP_USER_AGENT Предоставление информации включает в себя номер версии браузера клиента или других собственных данных.
PATH_INFO Значение этой переменной среды указывает имя программы CGI сразу после получения дополнительной информации о пути. Он часто появляется в качестве аргумента программы CGI.
QUERY_STRING Если информация о режиме передачи сервера и программы CGI информация GET, значение этой переменной окружения, даже если он будет принят. Эта информация следует имя программы CGI, как в середине с вопросительным знаком «?» Сепаратор.
REMOTE_ADDR Значение этой переменной окружения является IP-адрес клиента, отправляет запрос, например, выше 192.168.1.67. Это значение всегда присутствует. И это необходимо, чтобы обеспечить веб-клиент уникальный идентификатор веб-сервера может быть использован в программах CGI различать между различными веб-клиента.
REMOTE_HOST Значение этой переменной окружения содержит имя хоста запрашивающего клиента CGI. Если это не вы хотите проверить, что вам не нужно определить эту переменную окружения.
REQUEST_METHOD Она обеспечивает метод, называемый сценарий. Для сценария / протокола HTTP 1.0 только GET и POST осмысленным.
SCRIPT_FILENAME Полный путь к CGI-скриптов
SCRIPT_NAME Имя сценария CGI
SERVER_NAME Это имя хоста, псевдоним или IP-адрес вашего веб-сервера.
SERVER_SOFTWARE Значение этой переменной окружения содержит вызов CGI название программы и номер версии сервера HTTP. Например, указанное выше значение Apache / 2.2.14 (Unix)

Вот простой CGI скрипт CGI переменные окружения выход:

Загрузки

Если мы хотим достичь с помощью Perl CGI загрузки файлов, требуется другой набор информации заголовка следующим образом:

Используйте метод GET передачи данных

GET метод для отправки закодированную информацию о пользователе на сервер, информационные данные, содержащиеся в URL запроса страницы на номер распределились следующим образом «?»:

GET запросы о некоторых из других комментариев:

  • GET запрос может быть кэширован
  • запрос GET остается в истории браузера
  • GET запросы могут быть закладкой
  • GET запросов не следует использовать при работе с конфиденциальными данными
  • GET запросы имеют ограничения длины
  • GET запросы должны быть использованы только для получения данных

Примеры простых URL: Получ

Ниже приведен простой URL, используя метод GET для отправки два параметра программы test.cgi:

Файл код test.cgi:

Проверьте свой браузер, выходные результаты являются следующими:

Примеры простой формы: Получ

Ниже приводится две передачи данных на сервер с помощью метода GET через HTML-формы, который был представлен один и тот же сценарий сервера test.cgi документ, test.html код выглядит следующим образом:

Реализация Браузер результатов выглядит следующим образом:

Используйте метод POST для передачи данных

С помощью метода POST для передачи данных на сервер является более безопасным и надежным, так как некоторые конфиденциальной информации, такой как пароли пользователя нужно использовать POST для передачи данных.

Ниже также test.cgi, он также может обрабатывать данные формы POST, представленные в браузере:

Ниже приводится две передачи данных на сервер с помощью метода GET через HTML-формы, который был представлен один и тот же сценарий сервера test.cgi документ, test.html код выглядит следующим образом:

Реализация Браузер результатов выглядит следующим образом:

CGI программа для передачи данных через флажок

Флажок используется для передачи одного или более опций данных, test.html код выглядит следующим образом:

Файл код test.cgi:

Реализация Браузер результатов выглядит следующим образом:

Передача данных с помощью радио программы CGI

Радио только передавать данные на сервер, test.html код выглядит следующим образом:

Код test.cgi скрипт выглядит следующим образом:

Реализация Браузер результатов выглядит следующим образом:


передача данных Textarea через программу CGI

Textarea передать несколько строк данных на сервер, test.html код выглядит следующим образом:

Код test.cgi скрипт выглядит следующим образом:

Реализация Браузер результатов выглядит следующим образом:

CGI программа для передачи данных через раскрывающихся

HTML код выпадающий следующим образом:

test.cgi код сценария следующим образом:

Реализация Браузер результатов выглядит следующим образом:

Протокол Http в большой недостаток, неправильно судить личность пользователя, которые дают программистам большое неудобство, но появляется функциональность печенья, составленную этот недостаток.

Cookie, который обращается скрипт, а клиент через браузер клиента на жестком диске клиента, чтобы сохранить записи данных, извлечения данных, когда клиент посещает следующий сценарий, с тем, чтобы достигнуть функции определения идентичности, печенье, обычно используемый в проверке подлинности личности.

синтаксис печенья

Http печенье отправляется через заголовок HTTP, чтобы достигнуть, он должен был передавать файлы, синтаксис заголовка Set-Cookie выглядит следующим образом:

  • Имя = имя: установить значение куки (имя не может быть использована «,» и «,» номер), когда есть несколько значений имен «,» отделить, например: name1 = name1; имя2 = имя2 ; name3 = NAME3.
  • истекает = дата: дата окончания срока действия куки в формате: истекает = «Wdy, dd- пн-YYYY HH: MM: SS»
  • путь = путь: путь установить поддержку куки, если путь есть путь, куки для всех файлов и подкаталогов записи каталога в силу, например: путь = «/ CGI-BIN /», если путь файла, печенье Это относится к вступлению в силу этого файла, например: путь = «/ CGI-BIN / cookie.cgi».
  • домен = домен: доменное имя куки действительна, например: домен = «www.w3big.com»
  • обеспечить: Если этот флаг задан, что печенье может передаваться только через сервер HTTPS протокола SSL.
  • печенье получена путем установки переменных окружения HTTP_COOKIE достигнуты, программы CGI может получать информацию, извлекая переменную куки.

Настройки Cookie очень просто, печенье будет отправлено отдельно в заголовке HTTP. Следующий пример устанавливает идентификатор пользователя, пароль и истекает в куки:

Cookie страницы информационного поиска очень проста, в CGI переменные окружения HTTP_COOKIE, формат хранения выглядит следующим образом информация Cookie хранится:

В приведенном выше примере выход:

модуль CGI

Perl CGI обеспечивает множество встроенных модулей, используются следующие два:

Программирование cgi скриптов на перле

В этой главе вы научитесь использовать Perl для создания скриптов CGI. Коротко говоря, вы получите возможность сочетать ваши знания по языку Perl и CGI, полученные в предыдущих главах. Кроме того, вы узнаете несколько новых приёмов программирования на языке Perl. Как вы уже знаете, можно создать скрипты CGI, используя практически любой язык программирования. Чтобы быть грамотным Web-программистом, вы должны не только знать, как писать программы для WEB, но также необходимо иметь представление о том, какие средства использовать для решения специфических задач. За счёт правильного выбора языка программирования и программных средств всоответствии с вашей задачей, вы можете значительно повысить эффективность работы и сэкономив много сил и времени. Когда вы используете язык Perl для создания скриптов, можно создать устойчивые профессиональные скрипты за относительно короткий промежуток времени. Остаток этой главы посвящен изучению программирования CGI-скриптов на языке Perl. К моменту окончания изучения этой главы вы поймете следующие концепции:

Perl представляет собой эффективное средство для создания надежных скриптов без написания кодов большого объёма, что выгодноотличает его от других языков программирования, таких как C и С++.

Версия 5 языка Perl добавляет много новых возможностей, такихкак поддержка объектно-ориентированных скриптов и усовершенствование техники определения области видимости переменных.

Почему разработчики используют Perl для создания CGI- скриптов?

П редыдущие две главы должны были составить у вас представление о том, что такое CGI и почему мощные возможности языка Perl по обработке текстов делают его хорошо приспособленным для разработки CGI-скриптов.

Д ругие причины и пользования разработчиками языка Perl для написания CGI-скриптов заключаются в том, что Perl обеспечивает широкую поддержку взаимодействия с базами данных, обладает переносимостью и обеспечивает безопасность при работе в сетях. Как уже говорилось, Perl представляет собой один из наиболее мощных языке программирования для обработки текстов. Скрипты CGI обычно имеют дело с интенсивной обработкой текста: анализом данных, обеспечением доступа к базам данных, генерацией HTML-страниц и т.д. Типичный CGI-скрипт, написанный на языке Perl, по своему размеру представляет собой фрагмент программы аналогичного назначения, написанной на C++. Как вы увидите дальше в этой главе, Perl обеспечивает поддержку взаимодействия с базами данных. По существу, Perl имеет встроенный менеджер баз данных Perl был перенесен почти что на все популярные вычислительные платформы такие как Windows, UNIX, MS, DOS.

T o обстоятельство, что Perl является 6ecплатным, также увеличивает его привлекательность. Поскольку Perl не использует указателей, то он является более безопасным и надежным языком, чем С и C++. За счет исключения использования указателей предовращается нарушение доступа к памяти и связанные с этим ошибки. Кроме того используя регулярные выражения языка Perl, легко проверить целостность входных данных и отфильтровать всякие escape-последовательности, которые МОГУТ угрожать безопасности вашей системы. Наконец, для повышения безопасности имеется специальная версия Perl, называемая taintperl, предотвращающая использование каких-либо входных данных в качестве системных команд.

Н а UNIX-системах программисты могут исполнять скрипты, написанные на языке Perl, как выполнимые файлы. Иными словами, для них нет необходимости делать что-то специальное для вызова скрипта. На системах, основанных на DOS или Windows, некоторые серверы не исполняют скрипты Perl автоматически. В этом случае вам придется писать пакетный файл, который вызывает команды Perl для запуска скрипта. Для некоторых систем придется подробнее познакомиться с документацией по вашему НТTР-серверу относительно запуска скриптов Perl. Большинство серверов HTTP предполагает, чтоскрипты CGI находятся в каталоге под названием cgi-bin. В этом случае можно вызвать скрипт с помощью URL, подобно следующему:

Примечание: В URL задан каталог cgi-bin, но в действительности скрипт может находиться где угодно в системе. Вы должны определить его расположение при установке сервера HTTP.

Вызов СGI-скрипта в системе UNIX

Е сли вы поместили ваш скрипт в каталог cgi-bin и сделали его выполнимым, то пользователь может вызвать скрипт, непосредственно используя URL. Однако необходимо выполнить несколько шагов. Впервую очередь, в начало скрипта необходимо поместить строку, которая идентифицирует файл как программу на языке Perl:

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

Д алее необходимо сделать скрипт выполнимым, используя команду сhmod:

chmod +x your-srcipt

Вызов скрипта на языке PERL из DOS и WINDOWS

Программирование cgi скриптов на перле

Настоящая публикация посвещена ряду вопросов CGI-программирования на языке Perl, а именно нетипичным ситуациям генерации выходных данных в среде броузера. Рассматриваются варианты возврата выходных данных с помощью контейнерных HTML элементов: APPLET, SCRIPT, OBJECT, IFRAME (ILAYER для Netscape), а также элемента IMG. Представлены примеры программирования реальных ситуаций (выборка новостной информации из БД, защита copyright и защита от копирования, вывод курса валют on-line без перезагрузки страницы) с использованием Perl, JavaScript, Java, событийно-управляемого языка Flash 5. Показано, что активное взаимодействие сценариев CGI и программ на языках JavaScript, Java, скриптов Flash в значительной степени расширяет возможности представления и обработки выходной информации, позволяет автоматизировать процессы вывода и сократить накладные расходы. Особое внимание уделено разделению CGI программы и HTML-кодирования, что позволяет дизайнерам модифицировать HTML-страницы независимо от CGI-скрипта и независимо от CGI-программиста.

Содержание.

Введение.

Взаимодействие между пользовательской интерактивной HTML-страницей (среда броузера, клиент) и сервером обслуживается протоколом CGI. При передаче данных от клиентской формы серверу, последний кодирует входные данные, а сценарий CGI декодирует их, а затем функционально обрабатывает и возвращает выходные данные броузеру.

Судя по литератере, вопросам передачи и обработки данных, включая их запись на диск или в базу данных уделено достаточно много внимания, эти вопросы в той или иной степени затронуты практически в любом руководстве по Web-программированию [1, 2, 3]. Вместе с тем задачи, а в ряде случаев и проблемы, связанные с генерированием выходных данных в среду броузера, освещаются в публикациях и монографиях на уровне фона. Применение же встроенных HTML-функций Perl [2], в задачу которых входит облегчить генерацию HTML-включений непосредственно из CGI-сценария, приводит к тому, что программист и дизайнер должны выступать в одном лице.

В принципе, самый эффективный (с точки зрения разделения CGI программирования и HTML дизайна) способ возврата данных клиенту, это генерация HTML-шаблонов на лету. Шаблон читается CGI сценарием, который выполняет подстановку переменных вместо параметрических включений и потом на лету генерирует страницу в окне броузера. Самый неэффективный способ, это размещение полных HTML-страниц в теле CGI-скрипта. Любое изменение дизайна HTML-страницы, в последнем случае, потребует модифицировать и CGI программу в целом. К чему это приводит, думаю знакомо всем Web-программистам. Вместе с тем, как во втором, так и в первом случаях гибкость и опереративность вывода данных оставляет желать лучшего.

В данной статье мы остановимся, на некоторых промежуточных вариантах вывода данных, обеспечивающих гибкость и опреративность, смысл которых будет понятен ниже, я надеюсь. Представим себе ситуацию, когда в действующую HTML-страницу (файл) потребуется оперативно выводить данные и при этом не затрагивать существующий дизайн. Такими данными могут быть изображения, численные значения счетчиков, ленты новостей, котировки валют on-line, прогнозы погоды и много другое. При этом, в ряде случаев потребуется избавить пользователя от перезагрузки HTML-страницы. На сайтах часто можно встретить предупреждение типа: «Для обновления данных перезагрузите страницу!». Прямолинейным решением может служить перезапись HTM-файлов с помощью CGI-программы, которая предварительно читает файл с диска и изменяет содержимое параметрических включений. Такой подход, плох уже тем, что снижает безопасность, открывая доступ каждому (everyone) к записи на диск. Мы рассмотрим другие варианты, а именно, формирование запросов CGI-ресурсов путем использования контейнерных HTML элементов: APPLET, SCRIPT, OBJECT, IFRAME (ILAYER для Netscape), ну и конечно элемент IMG. С последнего и начнем.

§1. Загрузка ресурса IMG.

Задача.
Вы хотите, чтобы на вашей HTML-странице, случайным образом, загружались бы графические изображения, перечень которых может постоянно изменяться и пополняться.

Решение.
Используем атрибут SRC эленента IMG для загрузки CGI-ресурса:

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

Для полноты картины приведем и текст HTML-страницы:

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

В этом скрипте, имена файлов заносяться в массив @my_pic, причем для пропуска точек (. и ..) в верхей части директории, выполняется условый оператор в зависимости от значения счетчика (переменная $i).

В заключение отметим, что элемент IMG и сответствующий CGI-сценарий часто используются в качестве скрытых счетчиков посетителей страниц. Такие скрипты могут также содержать процессы MAIL, которые позволяют, в сою очередь, известить владельца о посещении страницы визитером, имеющего такой-то IP-адрес, зашедший с такой-то страницы и т.п.

§2. Загрузка CGI-сценариев в контейнере IFRAME.

Основной привлекательностью использования элемента IFRAME является возможность выделения в произвольном месте HTML-страницы прямоугольной области произвольных размеров. Этот прием часто применяется для внедрения в статическую HTML-страницу, новостной, часто меняющейся информации, как текстовой, так и графической. При этом, как правило, новостная вставка, сама представляет собой HTML-страницу (файл). Применение, в качестве загрузочного ресурcа CGI-сценария позволит автоматизировать процедуру смены новостей.

Задача.
Автоматизировать процесс смены новостной информации (текстовой) в поле статической HTML-страницы.

Решение.
CGI программа считывает текстовый файл с диска, или выполняет выборку из базы данных (БД), генерирует на лету документ HTML и загружает ресурс в элемент IFRAME: .

Отметим, что элемент IFRAME представляет собой встроенный элемент Internet Explorer (IE). Начнем рассмотрение с CGI-скрипта:

В процессе загрузки в броузер новостной HTML-страницы, управление передается CGI-скрипту, который считывает обычный текстовый файл bulletin.txt с диска сервера, создает на лету HTML-вставку и выводит ресурс в элемент IFRAME. Для наглядности, HTML-вставка размещена в теле CGI-скрипта. В реальной ситуации, HTML-вставка существует в виде шаблона в каталоге шаблонов на сервере или находиться в таблице шаблонов в БД. Ниже представлена собственно новостная HTML-страница (news.html):

Из этого примера видно (рис.1), что динамически обновляемая информация отделена от статического дизайна, который может модифицироваться дизайнером без ущерба CGI-cкрипту.

Дополнительный элемент ILAYER будет понятен броузеру Netscape Navigator (NN). Ниже представлен простой пример CGI-скрипта, выполняющий единичную выборку новостей из базы данных MySQL:

Отметим, что изменение кода HTML-вставки, выразилось лишь только в замене массива @lines на переменную $news.

Автоматическая выборка новостной информации из БД хороший пример сокращения затрат на содержание сайтов средних и крупных размеров, порталов, интернет-магазинов и.т.п. Редактор новостей корпоративной сети, по мере поступления новостной информации, заносит ее в БД. Дальнейшее распространение и публикация новостей происходит без его участия и без помощи дизайнеров и программистов.

§3. CGI-JavaScript программирование.

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

Задача.
Автоматизировать процесс смены новостной информации (текстовой) в поле статической HTML-страницы и обеспечить при этом сохранение информации об авторских правах на публикацию.

Решение.
В новостной HTML-странице располагается некоторая подпрограмма-функция test_copyright( ) языка JavaScript, ненсущая инфорацию об авторских правах. Выполнение этой подпрогаммы возлагается на сценарий CGI. CGI программа считывает файл новостей с диска, сравнивает информацию об авторских правах с образом copyright и генерирует на лету свой JavaScript скрипт test2( ), который непосредственно и выполняет вывод в окно броузера.

Загрузка CGI ресурса выполняется с помощью атрибута SRC элемента SCRIPT: .

Расссмотрим сначала код HTML-страницы:

Как видим в теле HTML-страницы располагается подпрограмма-функция test_copyright( ). Возвращаемый параметр этой функции содержит copyright. Образ этого copyright находится в одной из переменных сценария CGI:

Функция test2( ) языка JavaScript, размещается в теле CGI-скрипта, а вызывается на выполнение при загрузке HTML-страницы. В процессе выполнения сценария CGI, последний анализирует информацию, возвращаемую подпрограммой-функцией test_copyright( ) и сравнивает ее, с помощью скрипта test2( ), с образом copyright в переменной $param. В зависимости от совпадения или несовпадения образа с copyright, новостная информация публикуется или возвращается ошибка JavaScript. Ошибка JavaScript, равносильная запрету на публикацию, возникает в двух случаях: 1) если вы измените или удалите copyright из тела HTML-страницы, 2) если вы попытаетесь удалить подпрограмму-функцию.

Отметим, что как и прежде, реализуется идеология разделения CGI-программы и дизайна (Рис.2).

Из кода HTML видно, что атрибуты текста новостей могут быть изменены независимо от сценария CGI и независимо от скрипта языка JavaScript. Разумеется, мы здесь представили упрощенный вариант скриптов, преследуя цель наглядности излагаемого материала. Понятно, что техника CGI-JavaScript программирования, позволяет создать весьма изощеренные средства защиты и ограничения доступа.

§4. CGI-Java программирование.

Пожалуй CGI-Java технология является наиболее перспективной и наиболее интересной в области Web-программирования. Несмотря на выросшую популярность языка Java, CGI остается фактическим стандартом взаимодействия в модели клиент/сервер. Непоколибимость CGI объясняется просто. Во-первых протокол HTTP является основным механизмом передачи информации. Этот механизм положен в основу WWW. Во-вторых, это мощность языка Perl, который чаще всего используется в CGI-программировании. Perl изначально задумывался как высокоуровневый кросс-платформенный язык системного программирования [4]. Perl 5 работает практически везде: Unix, Linux, BSD, Windows, .NET, Sun, Macintosh. В Perl поддерживается интерфейс к базам данных SQL и постреляционным СУБД типа Cache’ [5]. При желании в Perl можно написать программу, в которой будет реализован практически весь арсенал приемов объекто-ориентированного программирования [6]. И наконец, в третьих, программе на Java можно передать всю необходимую информацию от CGI-сценария с помощью потоков ввода-вывода. И наоборот, программы на Java сами могут передавать информацию в сценарии CGI, например, можно «заставить» апплет записывать информацию, полученную из формы в файл на диск.

Рассмотрим примеры CGI-Java программирования в рамках обозначенной темы настоящей публикации.

Задача.
Автоматизировать процесс смены новостной информации (текстовой) в поле статической HTML-страницы и обеспечить вывод текта в графическом виде в целях противодействия несанкционированному копированию новостной информации.

Решение.
В новостной HTML-странице располагается контейнерный элемент APPLET, где атрибут CODE задает имя загружаемого ресурса Java-программы (апплета). Java-апплет, в процессе выполнения, с помощью метода DataInputStream( ) создает поток ввода для ресурса CGI-сценария. CGI-сценарий выполняет выборку текстовой информации из SQL БД, построчно форматирует полученный текст и в потоке вывода построчно передает апплету. Апплет с помощью методов paint( ) и dawString( ) также построчно отображает текст в окне броузера в графической форме.

Включение апплета в документ HTML реализуется следующим образом: ,

где codebase — имя каталога, в котором содержится файл cgi_java.class.
Рассмотрим сначала Java-апплет:

В этом апплете, для реализации построчного чтения выходного потока CGI-сценария, мы использовали метод языка Java — readLine( ). Для того, чтобы этот метод работал, необходимо предварительно определить собственно поток DataInputStream(my_buffer), а перед этим для чтения информации из открытого потока ввода, следует сначала создать буффер: my_buffer. В процессе чтения строк, последние заполняют массив text[ ]. Графический вывод строк в броузер обеспечивает метод Paint( ) с помщью оператора g.drawString(text[j], x, y).

CGI программа как всегда лаконична:

Переменные $database, $host, $port, $login и $pass, для доступа и открытия БД, загружаются в сценарий с помощью команды require из модуля globalvar.pm. Длинна строк $my_leng не превышает 64 символов. Образом для выделения подстрок является пробельный символ » «. Циклическое формирование строк и создание стандартного потока вывода, осуществляется всего шестью строками кода. На Java такое трудно реализовать. Зато на Java легко реализуется графическая форма представления текста. Графический вывод текстовой информации, преследует цель противодействовать несанкционированному копированию новостных данных. Чтобы усилить защиту против копирования, текст выводиться на фоне «водяных знаков» — рис. . . Теперь потенциальному взломщику потребуется выполнить копирование экрана, обработку полученного изображения в PhotoShop, преобразование графики в текст с помощью FineReader, редактирование текста (FineReader выполняет распознавание текста не на все 100% ).

В заключение этого раздела приветем код HTML-страницы:

Последний HTML-код показывает независимость CG-Java программы от дизайна (Рис.3).

§5. CGI-Flash программирование.

Появление технологии Flash компании Macromedia в значительной степени преобразило мир Web. Flash, без особой шумихи (что было свойственно распространению в Web языка Java), быстро занял свою нишу и эволюционировал от внешних plug-in к встроенным в броузеры IE и NN и является в настоящее время полноценной частью инструментов Web-дизайна и Web-программирования. Применение Macromedia Flash избавляет от проблемы совместимости между броузерами, Flash одинаково работает как в IE, так и в NN. В Macromedia Flash 5 применяется специальный событийно-управляемый язык, который поддерживает условные переходы, циклы, массивы, функции и классы, которые можно наследовать. Процедуры ввода-вывода данных, как мы увидим ниже, могут быть реализованы с помошью всего лишь одного оператора этого языка.

Задача.
Создать в статической HTML-странице on-line котировщик валюты EUR/USD рынка Forex и обеспечить запрос на обновление информации через каждые N секунд без перезагрузки HTML-страницы. В качестве ресурса котировок валют использовать ресурс партнерского сервера (www.my_partner.com).

Решение.
Создать файл Flash, обеспечивающий прием информации от сценария CGI. CGI-сценарий должен создавать сокет и устанавливать соединение для приема информации от удаленного сервера. Этот сервер содержит ресурс котировок валют рынка Forex (ресурс обновляется каждые 5 секунд). Из полученного ресурса (HTML-страницы) извлечь численные значения спроса (b >

Как мы видим (рис.6), файл Flash finan.swf выводит в HTML-страницу информационную вставку и идеология разделения CGI-программы и дизайна не нарушена.

Программа CGI показана ниже:

Функция socket( ) создает сокет, тип которого определен как потоковый — SOCK_STREAM. После конвертации имени сокета (более удобного представления для сервера), создается соединение с помощью функции connect( ). Предварительно с помощью переменных $host и $file задаются имя сервера и имя ресурса, соответственно. Для передачи данных через сокет используется функция send( ), а для приема данных через сокет — известная процедура: @data= . После закрытия сокета идет разбор принятых данных ресурса simulation.html:

Для разбора HTML-кода используется образ EURUSD, который задается переменной $valuta. Данные относящиеся к спросу (b >Теперь обратимся к Flash. Прежде всего создадим форму с тремя полями ввода — рис.5.

Создадим два слоя и растянем их на 20 кадров. При скорости кадров 8 fps, полное время цикла из 20 кадров составит 2.5 секунды, т.е. этот промежуток времени будет равен половине времени обновления ресурса курса валют. Затем в оконе Text Options (рис.6) зададим имя текстовой переменной Variable равой my_b >

Аналогичную процедуру выполним для создания имен двух других текстовых переменных: my_ask и my-time. Для верхнего слоя (рис.5) откроем окно Frame Actions и займемся программированием:

loadVariablesNum («http://www.mycgi.com/cgi-bin/java_applet/finan.cgi», 0);

Процедура loadVariablesNum загрузит CGI-ресурс, а полученные данные от CGI-скрипта разместит в текстовых переменных: my_b >Нет сомнения, что методы программирования, представленные выше, весьма перспективны и фактически применяются Web-программистами. Здесь сделана попытка систематизации. Привлекательность технологии CGI/JavaScript/Java/Flash, на мой взгляд, обусловлена прежде всего ее взаимодополняемостью. Небезизвестно, что технические прорывы, как правило, возникает именно на стыке моно-технологий. Там где приоритет Perl не оспорим, пишем скрипты на Perl, в тех случаях где лучше подходит Java, целесообразно использовать апплеты и т.д. И все это в рамкам одной задачи.

Литература:

  1. К. Пэтчетт, М. Райт. CGI/Perl: создание программ для Web : Пер. с англ. — К.: Издательская группа BHV, 1999.
  2. Холзнер С. Perl: специальный справочник — СПб: Издательство «Питер», 2000.
  3. Scott Guelich, Shishir Gundavaram, Gunther Birznieks. CGI Programming with Perl , 2nd Edition, July 2000.
  4. Cross-Platform Perl Second Edition by Eric Foster-Johnson IDG Books Worldwide, 2000.
  5. Кречетов Н., Петухова Е., Скворцов В., Умников А., Щукин Б. Постреляционная технология Cache’ для реализации объектных приложений . –М, МИФИ, 2001.
  6. Кристиансен Т., Торкингтон Н. Perl: библиотека программиста — СПб: Издательство «Питер», 2000. — 736 с.

The technical support is rendered by the company «The Web Production».

Хостинг в Европе для новичков (от 25 руб/мес) и VIP-хостинг для профессионалов (от 1000 руб/мес)

Скидка 25% на все тарифы хостинга по промокоду STDCITF

Илон Маск рекомендует:  Что такое код random
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL