Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Данные формы поступают в CGI-программу в закодированном виде, поэто­му в качестве первого шага обработки CGI-сценарий должен выполнить де­кодирование полученной информации. При пересылке данных методом GET данные формы, как видно из приведенного выше примера, присваиваются переменной среды QUERY_STRING, при пере­даче методом POST — передаются в программу через стандартный ввод и то­же могут быть присвоены некоторой внутренней переменной. Таким обра­зом, декодирование данных сводится к следующей последовательности ма­нипуляций со строкой:

· замена каждой группы "%hh", состоящей из шестнадцатеричного ASCII-кода "hh" с префиксом "%", на соответствующий ASCII-символ;

· замена символов "+" пробелами;

· выделение отдельных пар имя=значение, разделенных ограничителем "&";

· выделение из каждой пары имя=значение имени и значения соответст­вующего поля формы.

Вывод CGI-программы в интерфейс CGI выполняется с помощью функции print, которая направляет данные в стандартный выводной поток, причем первой должна быть выведена строка заголовка протокола HTTP (поле "Content-type"), как в следующем примере:

#!/usr/bin/perl

# Создание заголовка HTTP

print "Content-type:text/html\n\n";

# Создание заголовка Web-страницы

print "<HTML><HEAD><TITLE>HelloWorld Page",

"</TITLE></HEAD><BODY>";

# Создание заголовка первого уровня

print "<H1>Hello, world</H1>";

НЕ нашли? Не то? Что вы ищете?

# Создание окончания Web-страницы

print "</BODY><HTML>";

С использованием конструкции "here document" ("документ здесь") предыдущий пример можно записать следующим образом:

print<<TEST_WEB_PAGE;

Content-type:text/html\n\n

<HTML><HEAD><TITLE>HelloWorld Page</TITLE></HEAD><BODY>

<H1>Hello, world</H1>

</BODY><HTML>

TEST_WEB_PAGE

Для написания CGI-программ для доступа к интерфейсу CGI можно использовать модуль CGI, входящий в состав стандартной поставки Perl. Этот модуль включается в программу с помощью оператора use:

use CGI;

3.13.1. Стили программирования CGI-программ

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

При использовании объектно-ориентированного стиля создаются один или несколько объектов CGI, а затем для создания элементов страницы используются объектные методы применительно к созданным объектам. Каждый объект CGI формируется со списком именованных параметров, передаваемых Web-сервером CGI-программе. Можно изменять объекты, сохранять их в файле или базе данных, а затем восстанавливать их из файла или базы данных.

Например, простая Web-страница, содержащая приветствие "Hello, world" может быть создана с помощью объектно-ориентированного стиля с помощью следующей последовательности операторов:

#!/usr/bin/perl -w

use CGI; # Загрузка модуля CGI

$q = new CGI; # Создание нового объекта CGI

print $q->header, # Создание заголовка HTTP

# Создание заголовка Web-страницы

$q->start_html('HelloWorld Page'),

# Создание заголовка первого уровня

$q->h1('Hello, world'),

$q->end_html; # Создание окончания Web-страницы

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

#!/usr/bin/perl

# Загрузка стандартных функций CGI

use CGI qw/:standard/;

print header, # Создание заголовка HTTP

# Создание заголовка Web-страницы

start_html('HelloWorld Page'),

# Создание заголовка первого уровня

h1('Hello, world'),

end_html; # Создание окончания Web-страницы

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

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

use CGI список-функций;

Однако более часто используются наборы функции, импортируемые по их групповому имени. Перед именем набора ставится префикс ":". Наиболее часто используются набор :standard, в который входят функции обработки форм и дескрипторов HTML, а также функции, связанные с интерфейсом CGI и набор :all, в который входят все функции модуля CGI.

3.13.2. Функции модуля CGI

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

· функции управления Web-браузером;

· функции для обработки параметров;

· информационные функции;

· функции для записи дескрипторов.

Функция управления header информирует Web-браузер о том, данные какого типа он будет получать. Для этого используется параметр Content-Type. По умолчанию функция header посылает Web-браузеру заголовок Content-Type типа text/html. Чтобы указать другой тип получаемых данных, используется ключ -type, например:

print header (-type => image/gif);

В качестве параметра при вызове функции header может быть задано любое имя параметра заголовка HTTP, в котором впереди добавлен символ "-", а все символы дефиса "-" заменены символами подчеркивания "_". Кроме того, при вызове можно указать несколько параметров, разделенных запятыми, например:

print header(-Content_length=>3002, - Server=>$server_name);

Для обработки параметров в модуле CGI используются функции param и escape. Функция param без параметров возвращает имена параметров, переданных CGI-программе (с помощью метода GET или POST). Если у функции param задан аргумент, она возвратит значение параметра, имя которого задано в качестве аргумента, например, param(¢username¢) возвратит значение username, введенное в форме или заданное в запросе. При этом будут, в случае необходимости, выполнены преобразования шестнадцатеричных представлений в символьные представления. Если параметр, указанный в аргументе функции param, не используется в форме, функция возвращает значение undef.

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

В модуле CGI раз­работан целый набор функций, предназначенных для получения информации о типе Web-браузера и Web-сервера.

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

Некоторые наиболее распространенные функции представлены в таблице:

Функция

Описание

referer

Возвращает URL гиперссылки, с помощью которой будет осуществлен переход к этой странице.

user_agent

Возвращает строку, идентифицирующую тип Web-браузера, который запросил страницу (например, браузеры Netscape, IE или Lynx).

remote_host

Возвращает либо имя компьютера (host), либо IP-адрес системы, которая запросила страницу. Получаемое значение зависит от того, как сконфигурирован ваш Web-сервер и доступно ли для него имя удален­ного компьютера (hostname).

script_name

Возвращает имя данной CGI-программы в виде части URL (например, /cgi-bin/foo.pl).

server_name

Возвращает имя сервера, на котором работает CGI-программа

virtual_host

Возвращает имя виртуального Web-сервера, который использовался для выполнения данной CGI-программы. Эта функция отличается от функции server_name, поскольку зачастую один сервер может управлять несколькими Web-узлами. Функция virtual_host возвращает имя конкретного узла, который был затребован.

И, наконец, последнюю, самую большую группу функций составляют функции, формирующие дескрипторы языка HTML. Как правило, их имена совпадают с наименованиями соответствующих дескрипторов HTML, например h1, или эти функции формируют начальные и конечные дескрипторы, например start_table и end_table.

При программировании с использованием модуля CGI можно дать следующие рекомендации:

1. Для управления программой, работы с параметрами и получения информации о Web-браузере и Web-сервере рекомендуется использовать функции модуля CGI.

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

3.13.3. Использование файлов DBM

При программировании на Perl использование DBM-файлов является самым простым способом хранения структурированных данных. Файлы DBM, обычно используемые в UNIX, обладают одним замечательным свойством – в программах на Perl их можно напрямую связать с хэш-массивом. При этом чтение и запись DBM-файлов сводится к простым операциям с хэш-массивами, которые рассматривались в 2.10.

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

Чтобы связать хэш-массив с DBM-файлом, в Perl используется функция dbmopen, синтак­сис которой выглядит следующим образом:

dbmopen (хэш, имя-файла, права-доступа)

В результате выполнения этой функции указанный хэш-массив подключается к файлу DBM. Параметр имя-файла на самом деле определяет два файла на жестком диске: имя-файла.pag и имя-файла.dir. Они используются Perl для хранения данных в иерархическом виде и быстрого доступа к ним. Эти файлы не являются текстовыми, поэтому их нельзя редактировать с помощью обычного текстового редактора.

Третий параметр функции dbmopen определяет права доступа, которые назначаются двум файлам DBM при их создании (задаются в виде восьмеричного числа). Например, значение кода прав доступа, равное 0666, обеспечивает дос­туп по чтению и записи к файлам DBM для всех пользователей данного ком­пьютера; значение 0644 позволяет читать и записывать данные владельцу файла, в то время как для остальных пользователей обеспечивается только режим чтения. При работе в системе Windows данный параметр не играет особой роли, поскольку в ней не предусмотрены средства управления доступом, поэтому в Windows обычно используется значение 0666.

Функция dbmopen возвращает истинное значение, если операция подключения хэш-массива к файлу DBM прошла успешно, например:

dbmopen(%hash, "dbafile", 0644) ||

die "Ошибка при открытии DBM-файла: $!";

После выполнения этого оператора устанавливается связь хэш-массива %hash с DBM-файлом dbmfile. Для хранения хэш-массива на диске Perl создает два файла: dbmfile.pag и dbmfile.dir. Если в последующих операторах значение элементов хэш-массива будет измене­но (как показано ниже на примере), Perl автоматически обновит соответствующие DBM-файлы:

$hash{''}="Иванов";

$hash{''}="Петров";

Обращение к элементам хэш-массива автоматически приводит к считыванию информации из DBM-файла, например:

print $hash{''};

Чтобы разорвать связь хэш-массива %hash с DBM-файлом, используется функция dbmclose, например,

dbmclose(%hash);

После выполнения этой функции элементы хэш-массива "" и "" останутся в DBM-файле. В результате при следующем запуске программы и связывании хэш-массива %hash с DBM-файлами значение указанных элементов хэш-массива будет восстановлено.

С хэш-массивами, связанными с DBM-файлами, можно выполнять те же операции, что и с обычными хэш-массивами, в том числе использовать функции keys, values и delete. Чтобы очистить хэш-массив (и соответственно DBM-файл), надо присвоить ему пустой список, например:

%hash=();

Чтобы инициализировать хэш-массив и соответствующий ему DBM-файл, после выпол­нения функции dbmopen надо присвоить ей нужные значения в списке.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4