
- •Романчик в.С.
- •Минск, бгу, 2011
- •Введение в Интернет Коротко об истории Интернет
- •Как работает Интернет?
- •Система адресации в Интернет
- •Способы подключения к сети Интернет
- •Сервисы Интернет
- •Электронная почта
- •Адресация электронной почты
- •Передача файлов по ftp
- •Всемирная паутина www
- •Задания по теме “Введение в Интернет”
- •Общие задания для лабораторной работы #1
- •Глава 1. Протоколы Интернет Понятие и краткое описание протоколов
- •Соотношение между tcp/ip и osi/iso
- •Межсетевой протокол ip
- •Транспортный протокол tcp
- •Флаги (управляющие биты) Это поле содержит 6 битовых флагов:
- •Механизм действия протокола
- •Передача данных
- •Протокол дэйтаграмм udp
- •Протоколы сетевого уровня
- •Протоколы электронной почты
- •Протокол pop3
- •Протокол imap4
- •Протокол smtp
- •Спецификация mime
- •Проблемы с кодировкой
- •Протокол ftp
- •Http – Протокол передачи гипертекстов
- •Что такое транзакция http
- •Клиентские методы http
- •Что возвращается обратно: коды ответа сервера
- •Заголовки http
- •Задания по теме «Протоколы Интернет»
- •Глава 2 Краткий обзор основных технологий Веб
- •Язык разметки гипертекста html
- •Язык xml
- •Язык программирования скриптов на стороне клиента JavaScript
- •Язык Java на клиентской странице
- •Технология «клиент-сервер». Cgi
- •Программирование для серверов
- •Технология ssi
- •Язык программирования Perl
- •Глава 3. Основные этапы разработки сайтов
- •Модель водопада
- •Спиральная модель
- •Модель Уолта Диснея
- •Управление проектами
- •Глава 4. Веб – дизайн и обработка гипертекстовых документов
- •Главная страница
- •Рекомендации по дизайну главной страницы
- •Какими должны быть внутренние страницы web-сайта
- •Логическое проектирование дизайна сайта
- •Основные этапы и уровни информационного обмена
- •Сжатие изображений с помощью фракталов
- •Язык разметки гипертекста html
- •Теги, атрибуты, значения
- •Структура документа
- •Разрыв строки
- •Предварительное форматирование
- •Выравнивание текста
- •Комментарии
- •Физическая и логическая разметка документа
- •«Физические» теги:
- •«Логические» теги:
- •Специальные символы
- •Графика
- •Формы html
- •Теги div и span
- •Метатеги
- •Новое в html 5
- •Валидация документов
- •Вопросы и задания
- •Задания для выполнения
- •Каскадные таблицы стилей css
- •Способы включения каскадных таблиц стилей
- •Множественные классы
- •Селекторы идентификаторов (id-селекторы)
- •Комментарии
- •Свойства шрифтов. Свойство шрифтов font позволяет задать одну или несколько характеристик шрифта.
- •Свойства текста.
- •Цвет и фон.
- •Представление документа в виде специальных областей – блоков
- •Отступы, поля, позиционирование
- •Границы элементов
- •Визуальное форматирование
- •Визуальные эффекты
- •Свойства списков
- •Свойства таблиц
- •Псевдоклассы
- •Псевдостили текста
- •Псевдоэлементы
- •Различные свойства
- •1. Свойства шрифтов.
- •2. Свойства текста.
- •3. Свойства цвета и фона.
- •4. Свойства рамки.
- •6. Свойства изображений.
- •Css. Примеры
- •Новое в css3
- •Валидация css
- •Глава 5. Язык JavaScript Введение
- •Включение скриптов JavaScript в html-код
- •Создание простых сценариев
- •Комментарии. Скрытие сценариев от браузеров
- •Отладка скриптов. Ввод и вывод данных
- •Инструменты для разработчика
- •Описание языка Типы данных
- •Преобразование типа
- •Специальные числа
- •Булев тип
- •Переменные типа Undefined и Null
- •Массивы
- •Оператор with
- •Оператор switch
- •Метод eval()
- •Функции
- •Передача параметров по значению и по ссылке
- •Глобальные и локальные переменные
- •Модель событий
- •Ключевое слово this
- •Исключения: throw/catch/finally
- •Объектная модель
- •Пользовательские объекты
- •Прототипы
- •Встроенные объекты String, Array, Date, Math Объект String
- •Объект Date (Дата)
- •Методы объекта Date
- •Объект Function (Функция)
- •Свойства Function
- •Методы Function
- •Объекты браузера
- •Объект window
- •Методы объекта window
- •Свойства окна, передаваемые методу open
- •Свойства и методы объекта navigator
- •Свойства объекта screen
- •Свойства и методы объекта history
- •Свойства и методы объекта document
- •Коллекции и подчиненные объекты объекта document Обращение к элементам страницы
- •Свойства и методы объекта location
- •Свойства и методы объекта style
- •Объект layer
- •Свойства объекта layer
- •Методы объекта layer
- •Навигация по дереву документа
- •Свойства объектов-узлов
- •Несколько других свойств узлов - объектов dom
- •Создание новых узлов
- •Добавление узлов в документ
- •Копирование: метод cloneNode()
- •Удаление и замена узлов в документе
- •Работа с атрибутами элементов
- •Метод removeAttribute()
- •Модель ajax:
- •Запрос к серверу. Класс xmlHttpRequest
- •Методы класса xmlHttpRequest
- •Свойства класса xmlHttpRequest
- •Создание экземпляра объекта xmlHttpRequest
- •Использование dom
- •Проблема с кешированием в Microsoft Internet Explorer
- •Информируйте пользователя
- •Подготовьте запасной план
- •Работа с cookie
- •Формат и синтаксис cookie
- •Синтаксис http заголовка для поля Cookie
- •Дополнительные сведения
- •Способы задания значений cookie
- •Примеры на JavaScript
- •Тестовые вопросы по языку JavaScript
- •Упражнения и задачи по JavaScript
- •Список итоговых заданий (курсовая работа)
- •Литература
- •Приложение 1. Программное обеспечение Adobe Dreamweaver cs4
- •Типы данных
- •Ассоциированные массивы
- •Операторы
- •Подпрограммы
- •Введение
- •Возможности php.
- •Инструменты для разработки
- •Как php работает
- •Глава 1. Язык php Типы данных
- •Массивы и инициализация массивов
- •Объектно-ориентированное программирование в php Основные понятия ооп
- •Классы и Объекты
- •Конструкторы и деструкторы
- •Наследование классов и интерфейсов
- •Магические методы
- •Обработка ошибок
- •Ошибки php и журнал error_reporting
- •Чтение и запись бинарных файлов
- •Работа с каталогами в рнр
- •MySql – сервер: бд1; бд2; бд3; бд4;
- •Язык запросов sql
- •Операция соединения.
- •Команды sql для создания баз данных и таблиц
- •Выборка данных из таблиц бд
- •Работа с MySql (сохранение данных в базе данных).
- •Работа с MySql занесение и получение данных из базы данных
- •Некоторые улучшения в организации работы с данными
- •Передача данных от клиента к серверу и обратно. Протокол http
- •Клиентские методы http
- •Обработка html-форм
- •Передача переменных в скрипт.
- •Передача значений переменных по методу get
- •Передача данных из клиентской формы на сервер по методу get
- •Передача данных из клиентской формы на сервер по методу post
- •Php и различные формы
- •Обработка форм
- •Более сложные переменные формы
- •Базы данных и язык sql
- •Реляционные субд Модель данных в реляционных субд
- •Нормализация модели данных
- •Язык sql
- •Команды sql
- •Команды определения структуры данных (Data Definition Language – ddl)
- •Команды манипулирования данными (Data Manipulation Language – dml)
- •Команды управления транзакциями (Transaction Control Language - tcl)
- •Команды управления доступом (Data Control Language – dcl)
- •Работа с командами sql Извлечение данных, команда select
- •Ключевое слово distinct
- •Секция from, логическое связывание таблиц
- •Секция where
- •Секция order by
- •Групповые функции
- •Секция group by
- •Секция having
- •Изменение данных
- •Команда insert
- •Команда delete
- •Команда update
- •Определение структуры данных Команда create table
- •Команда alter table
- •Команда drop table
Подпрограммы
Подпрограммы необходимо определить или объявить (декларировать):
sub имя; #- декларация. Определение ниже.
sub имя блок; #- Декларация и определение.
sub имя (прототипы) {блок;} #- То же, но с параметрами.
Вызов подпрограммы:
имя(список параметров); # символ '&' можно не указывать.
имя список; # Если подпрограмма уже декларирована.
&имя; # Параметры в @_
Все параметры передаются подпрограмме как массив @_ ,который содержит адреса параметров. Соответственно $_[0] - первый параметр, $_[1] - второй и т.д. Возвращаемое значение подпрограммы - результат последнего оператора. Можно возвращать значение используя return.
Для применения переменных, доступных только внутри блока или подпрограммы, необходимо определить их с помощью функции my(список). Если переменная одна, то скобки можно опустить.
# Программа вычисления факториала.
print fact(3); # вычислить факториал 3*2*1
sub fact # Определяем подпрограмму.
{ my $m; # private переменная
$m = $_[0];
return 1 if $m <= 1;
return($m * fact($m -1)); }
Функция my позволяет указывать начальные значения переменных: my(список) = выражение; Так в приведенном примере лучше было написать: my($m) = $_[0];
В Perl реализован механизм модулей - группы подпрограмм включенных в один файл. Начало модуля определяется директивой: packages имя_модуля;. Конец модуля это конец блока или файла. Головной модуль имеет по умолчанию имя main. На имя внутри модуля можно ссылаться, добавляя '::' после имени модуля. Например: $main::var1.Для импортирования подпрограмм из других модулей используйте: use модуль qw(подпрограмма1 подпрограмма2 );
В Perl используются конструкторы и деструкторы - подпрограммы, которые выполняются в момент создания (удаления) объекта. Для модуля это подпрограммы с именами BEGIN и END.
Perl библиотеки обычно поставляется с дистрибутивом Perl и разделяются на pragma библиотеки (директивы компилятору) и стандартные библиотеки. Pragma библиотеки используют так: use имя;
В стандартный набор входят следующие pragma библиотеки:
diagnostics - включить режим расширенной диагностики; integer - использовать целочисленную арифметику; overload - hежим переопределения операторов; sigtrap - режим слежения за прерываниями; strict -режим ограниченного использования "опасных" операторов; subs - режим обязательного декларирования подпрограмм.
Рассмотрим некоторые стандартные библиотеки: AnyDBM_File - возможность работы с разными типами баз данных. Carp - предупреждения об ошибках. Config - доступ к конфигурации Perl. Cwd - получить имя текущей рабочей директории. English - использовать длинные имена встроенных переменных. Env - импортировать имена переменных окружения. ExtUtils::MakeMaker - создает файл проекта Makefile. File::Basename -синтаксический разбор спецификации файла. File::Find - Быстрый поиск файлов по директориям. File::Path –создание/удаление директорий. Net::Ping - тест доступа к хосту. Socket - определение структур и констант. Подробное описание каждой библиотеки записано в самом файле.
Программисты, работающие с Perl, создали общедоступную библиотеку модулей CPAN. Она доступна через Интернет.
Файлы
Существует три способа открытия файла: для чтения (read), дополнения (append) и записи (write). Для режима read синтаксис операции открытия файла следующий: open (HANDLE,”filename.txt”);
В круглых скобках заключен дескриптор файла HANDLE и имя файла. Для считывания информации из файла выполняется так называемая операция ромба, обозначаемая символами (<>):
open (HANDLE,”filename.txt”);
while (<HANDLE>){
# цикл будет считывать информацию из файла построчно
}
Отличие синтаксиса open() для операции записи заключается в том, что перед именем файла стоит символ (>). Этот символ сообщает, что следует создать указанный в кавычках файл и записать или обновить его содержимое. Чтобы записать в него информацию, нужно обратиться к помощи оператора print:
open (HANDLE,”>filename.txt”);
print HANDLE ”Записать этот текст в файл...”;
Режим добавления (Append) синтаксически выглядит так:
open (HANDLE,”>>filename.txt”);
print HANDLE ”Дописать этот текст в файл...”;
При его описании ставится двойной знак (>>). Если указанный файл не существует, то он будет создан, в противном случае введенная информация будет добавлена в конец. Когда выполняется операция дополнения, данные можно не только записывать, но и считывать из файла.
В случае успешного выполнения функция open() возвращают значение true, иначе — false. Закрыть файл можно с помощью функции close(HANDLE). Всякий раз при открытии файла разумно использовать вместе с оператором open() оператор die. Бывает, что файл по какой-то причине нельзя правильно открыть. В подобном случае оператор die прерывает выполнение программы и выдает сообщение об ошибке при открытии файла.
open (HANDLE,”>>f.txt”)||die”Ошибка добавления в файл $!\n”;
Функция die прерывает выполнение программы. Выдается сообщение об ошибке, а также информация о том, что ее вызвало. Perl сохраняет сведения о последней системной ошибке в специальной переменной $!. В синтаксисе используется «логическое ИЛИ» (||).
Проверка существования файла.
$filename = ”filename.txt”;
if (-e $filename) {
print ”Файл $filename уже существует\n”;}
else { print ”Файл $filename не найден\n”;}
Чтобы убедиться в наличии какого-либо файла и возможности чтения из него, нужно вместо операции -e выполнить -r, а в случае требования возможности записи —w. Можно проверить один и тот же файл на доступность чтения и записи информации:
$filename = <STDIN>;
chomp ($filename);# убрать символ новой строки
if (-r $filename && -w $filename) {
# файл существует, мы можем читать из него и записывать в него
}
Чтобы определить возможность чтения для целой группы файлов с одинаковым расширением, можно использовать конструкцию:
@files = <*.txt>;
foreach (@files) {
print ”$_ is readable\n” if -r;
}
При большинстве подобных проверок, а их около 20, возвращается значение true или false.
При работе на Perl под управлением Windows нужно указывать полный путь к файлу (вместе с именем диска), над которым будут выполняться какие-либо действия, например:
open (HANDLE,”c:/scripts/newfile.txt”) || die ”Error opening c:/scripts/newfile.txt $!\n”;
close (HANDLE);
Common Gateway Interface
CGI представляет собой стандарт взаимодействия Web-сервера с прикладными программами, которые пользователь может выполнять на Web-сервере. Программы CGI можно писать на языках типа С++, Visual Basic, но при этом возникают проблемы их переносимости с одной серверной платформы на другую. Таких проблем с Perl нет, интерпретатор Perl существует практически на любой платформе.
Ниже будет показано, как реализовать диалог с посетителем Web-страницы. Будут рассмотрены вопросы создания программ типа гостевой книги на основе Perl. Необходимые Perl-программы можно загрузить из Internet. Вот несколько узлов: www.freescripts.com, www.scripts.ru.
Как работает CGI программа.
CGI программа всегда размещается на диске сервера до ее выполнения. Web - сервер требует размещения CGI - приложения в директорию cgi-bin, однако системный администратор может выделить вам и другой каталог. Простейший способ вызова CGI программы состоит в указании броузеру URL этой программы. Например, если вы хотите выполнить программу test.pl на локальном web - сервере, вы должны ввести URL: http://localhost/cgi-bin/test.pl. Здесь cgi-bin представляет относительный адрес, к которому может добавляться остальной путь, напрмер: /usr/local/etc/httpd/cgi-bin/test.pl или /website/cgi-shl/test.pl.
Есть и другой способ вызова CGI программы. Вы можете поставить гиперссылку, например на кнопку формы
<A HREF="cgi-bin/test.pl">Click here to run a CGI program</A>
Информацию для CGI программы можно передать, добавляя ее к стандартному URL. Например <A HREF="cgi-bin/search.pl/root/document"> Search the Document Directory</A>
Информация о пути доступна через переменную окружения PATH_INFO.
Для поиска может быть использован знак вопроса
<A HREF="cgi-bin/search.pl?Wine+1993">Search for 1993 Wines</A>
Информация после знака вопроса доступна через переменную окружения QUERY_STRING.
Приведем пример простейшей CGI программы:
#!/usr/local/bin/perl -w
use strict;
print "Content-type: text/plain\n\n";
print "Hello, World.\n";
Файл test.pl с этой программой помещается в каталог cgi-bin web сервера. Затем задается URL вида: http://localhost/cgi-bin/test.pl
Результат: Hello, World.
При выполнении CGI программы автоматически открываются стандартные файлы STDIN - ввода информации из HTML формы, STDOUT - вывода в окно броузера, STDERR - вывода сообщений в log - файл сервера.
Первая строка вывода для CGI программы должна содержать заголовок HTTP, который сообщает броузеру клиента какой тип сообщения будет послан на STDOUT: print("Content Type: text/html\n\n");
Могут быть другие заголовки, например Location определяет какую из страниц открыть: print("Location: $nextPage\n\n");
CGI и переменные окружения
Переменные окружения доступны CGI программе через переменную %ENV. Могут использоваться следующие переменные окружения:
CONTENT_LENGTH - содержит длину записи, передаваемой скрипту через STDIN файл. Используется в методе POST.
CONTENT_TYPE - содержит тип данных, доступных через STDIN.
HTTP_ACCEPT - содержит лист MIME типов программ броузера
HTTP_USER_AGENT - тип броузера пользователя
HTTP_FROM - содержит email адрес пользователя.
PATH_TRANSTLATED - путь к скрипту
REMOTE_ADDR - числовой адрес пользователя
REMOTE_HOST - имя домена сайта из которого коннектится пользователь.
REMOTE_USER - имя пользователя.
REQUEST_METHOD - содержит метод "GET" или "POST"
SCRIPT_NAME - путь к скрипту.
SERVER_NAME имя хоста сервера.
SERVER_PORT -содержит прослушиваемый порт, стандартно 80.
SERVER_PROTOCOL имя протокола сервера.
Кодирование URL
Данные, поступившие из формы, имеют следующий вид:
<Имя1>=<Значение1>&<Имя2>=<Значение2>&<Имя3>=<Значение3>
ИмяX — имя элемента формы, определенное атрибутом NAME, а ЗначениеX — информация, введенная в соответствующее поле. Если в форме присутствует несколько элементов управления (поля ввода, ниспадающие списки, обычные списки, флажки, элементы выбора, кнопки), то пары <Имя>=<Значение> разделяются символом &.
Поскольку при использовании метода GET данные формы передаются как часть адреса URL, они не могут включать пробелы и другие специальные символы, применение которых в URL не допускается, а также символы, имеющие в URL другое назначение, например символ «косая черта» (/), причем последнее ограничение накладывается и при использовании метода POST. Web-браузер производит кодирование информации, представленной пользователем. Например, все символы пробелов заменяются на «+». Вместо управляющих символов ставится их шестнадцатеричный (HEX) эквивалент, вводимый после символа %. Например строка Ivan Ivankov aa@planet.net кодируется: Ivan+Ivankov+%3Caa@planet.net %3E. Символ < это %3C, символ > это %3E. CGI скрипт должен раскодировать информацию.
Работа с формами
Тег <INPUT> использует кнопку submit, чтобы переслать данные из формы в CGI программу. Например:
<INPUT TYPE=submit VALUE="Process Information">
Есть два способа передачи информации из формы:
<FORM METHOD =GET> и <FORM METHOD =POST>. Например: <FORM METHOD=get ACTION=/cgi-bin/gestbook.pl>
Метод GET добавляет данные из формы в конец URL, используемого в ACTION, разделяя их знаком вопроса. Эта информация помещается в переменную окружения QUERY_STRING и используется в CGI скриптом. Метод POST используется для больших форм и посылает скрипту информацию из формы, используя файл STDIN. Размер данных которые надо прочитать, определяется с помощью переменной CONTENT_LENGTH. По умолчанию используется метод пересылки данных METHOD=”GET”. Способ передачи данных помещается в переменную REQUEST_METHOD. Рассмотрим пример:
sub getFormData {
my($buffer) = "";
if ($ENV{'REQUEST_METHOD'} eq 'GET') {
$buffer = $ENV{'QUERY_STRING'};#чтение из буфера в методе GET
}
else {#чтение из файла в методе POST
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
}
В обоих случаях информация содержится в переменной $buffer .
Даннае из формы передаются в формате name=value, каждое поле разделяется амперсандом (&). Например
name=Ivan+Ivankov&age=34
Сначала разделим поля, используя & как разделитель:
name=Ivan+Ivankov
age=34
Затем разделим поля с помощью =:
Field Name: name Field Value: Ivan+Ivankov
Field Name: age Field Value: 34
В следующем примере объявим переменные, соответствующие полям формы, проинициализируем буфер, определим функцию getFormData(). Затем разделим строку с помощью функции split() и определим функцию декодирования decodeURL().
my(%frmFlds);
getFormData(\%frmFlds);
sub getFormData {
my($hashRef) = shift;
my($buffer) = "";
if ($ENV{'REQUEST_METHOD'} eq 'GET') {
$buffer = $ENV{'QUERY_STRING'};
}
else {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
foreach (split(/&/, $buffer)) {
my($key, $value) = split(/=/, $_);
$key = decodeURL($key);
$value = decodeURL($value);
%{$hashRef}->{$key} = $value;
}
}
sub decodeURL {
$_ = shift;
tr/+/ /;
s/%(..)/pack('c', hex($1))/eg;
return($_);
}
HTML-код нашей формы гостевой книги выглядит следующим образом:
<!-- Исходный текст HTML-формы-->
<FORM METHOD=”POST” ACTION=”/cgi-bin/guestbook.cgi”>
<BLOCKQUOTE>
<TABLE BORDER=”0” CELLPADDING=”0” CELLSPACING=”0”>
<TR> <TD COLSPAN=”2”>ГОСТЕВАЯ КНИГА<BR> <BR>
</TD> </TR>
<TR> <TD>Ваше имя: </TD>
<TD><INPUT TYPE=”text” NAME=”signer” SIZE=”40”></TD>
</TR>
<TR> <TD>E-Mail: </TD>
<TD><INPUT TYPE=”text” NAME=”email” SIZE=”40”></TD>
</TR>
<TR> <TD>Город: </TD>
<TD><INPUT TYPE=”text” NAME=”city” SIZE=”20”></TD>
</TR>
<TR> <TD>Home Page URL: </TD>
<TD> <INPUT TYPE=”text” NAME=”url” SIZE=”40” VALUE=”http://”>
</TD> </TR>
<TR>
<TD COLSPAN=”2”>Комментарии:<BR>
<TEXTAREA NAME=”comments” COLS=”40” ROWS=”4”>
</TEXTAREA><BR>
<INPUT TYPE=”submit” VALUE=”PostIt!”></TD>
</TR> </TABLE>
</BLOCKQUOTE>
</FORM>
Пользователь заполняет форму и подтверждает введенную им информацию нажатием кнопки submit. Затем сведения из формы передаются на сервер. К тегу <FORM> необходимо добавить два параметра: METHOD, обеспечивающий посылку данных, и ACTION, в котором хранится URL к CGI-программе. Метод POST более эффективен и надежен, чем GET. Например, формы, использующие поля <TEXTAREA>, позволяют пользователям вводить большое количество текста. Они должны всегда применять метод POST:
ACTION=”http://www.server.com/cgi-bin/script.cgi”
Практически во всех формах, которые приходится заполнять на тех или иных Web-узлах, присутствуют поля ввода и кнопки подтверждения. Все они создаются с помощью тега <INPUT>, который в отличие от <FORM> и <TEXTAREA> не имеет закрывающей пары. Тег <INPUT>, равно как и <FORM>, может содержать несколько атрибутов: NAME, TYPE и VALUE. Обязательными являются первые два:
<INPUT TYPE=”text” NAME=”email”VALUE=”@”>
<INPUT TYPE=”submit” NAME=”button”VALUE=”PostIt!”>
В результате отображения формы браузером первая строка образует поле для ввода информации (TYPE=«text»), а вторая — кнопку ее подтверждения (TYPE=«submit»). Можно также создать и кнопку сброса введенной информации в форме (TYPE=«reset»). Кроме TYPE используется NAME — второй важный параметр. Он придает каждому объекту формы свое уникальное имя. А в качестве необязательного атрибута тег <INPUT> может содержать VALUE. В него записывается значение, отображаемое в соответствующих элементах формы при ее загрузке. Например, использование VALUE=«@» приведет к тому, что при загрузке формы в браузер поле ввода адреса электронной почты будет содержать символ @.
Заполним форму, исходный текст которой приводился и, нажав кнопку PostIt, подтвердим ее!
Программа обработки данных из формы и вывода их в браузер
#!/usr/local/bin/perl
&GetFormInput;
$Name=$field{‘name’};
$Email=$field{‘email’};
$City=$field{‘city’};
$Url=$field{‘url’};
$Comments=$field{‘comments’};
print ”Content-type:text/html\n\n”;
&Title;
print ”<B>Name: $Name</B><BR>\n
<B>Email:</B>
<A HREF=\”mailto:$Email\”>$Email</A><BR>\n
<B>City:</B> $City<BR>\n
<B>Url:</B>
<A HREF=\”$Url\”>$Url</A><BR>\n
<B>Comments:</B> $Comments<BR>\n”;
sub GetFormInput {
(*fval) = @_ if @_ ;
local ($buf);
if ($ENV{‘REQUEST_METHOD’} eq ‘POST’) {
read(STDIN,$buf,$ENV{‘CONTENT_LENGTH’});
}
else {
$buf=$ENV{‘QUERY_STRING’};
}
if ($buf eq ””) {
return 0 ;
}
else {
@fval=split(/&/,$buf);
foreach $i (0 .. $#fval){
($name,$val)=split (/=/,$fval[$i],2);
$val=~tr/+/ /;
$val=~ s/%(..)/pack(”c”,hex($1))/ge;
$name=~tr/+/ /;
$name=~ s/%(..)/pack(”c”,hex($1))/ge;
if (!defined($field{$name})) {
$field{$name}=$val;
}
else {
$field{$name} .= ”,$val”;
#if you want multi-selects to goto into an array change to:
#$field{$name} .= ”\0$val”;
}
}
}
return 1;
}
sub Title {
print ”<H2>Simple GuestBook</H2><P>\n”;
return 1;
}
В результате произойдет запуск серверной программы для обработки этой формы и вывода данных в виде отдельной HTML-странички. В форме использовался метод GET, так как в строке ввода адреса вместе с названием самой CGI-программы присутствуют также закодированные данные.
Если использовать метод POST, то в строке адреса отобразится только название самой CGI-программы. Алгоритм работы программы очень прост: вызывается подпрограмма &GetFormInput, декодирующая данные из формы, которые затем записываются в соответствующие переменные. Далее с помощью строки print «Content-type:text/html\ n\n» объявляется MIME-тип вывода информации (в данном случае — в виде HTML-страницы), потом запускается подпрограмма &Title для вывода заголовка «Simple Guestbook» и в конце выводятся декодированные данные в Web-браузер в виде HTML-страницы.
Гостевая книга должна сохранять введенные пользователем данные в каком-либо файле для дальнейшего их отображения и использования при новом посещении страницы.
Процесс декодирования данных формы практически во всех CGI-программах одинаков. Поэтому, чтобы не повторять его от программы к программе, создаются библиотеки подпрограмм. На сегодняшний день самые популярные из них для Perl — CGI-LIB.PL и CGI.PM. Благодаря этим программам можно сократить размер Perl-программы. Возможностями CGI-LIB.PL воспользуемся ниже.
Для объявления библиотеки необходимо в начале программы написать: require ”../cgi-lib.pl”;
В кавычках указан физический путь к библиотеке. Если требуется, можно организовать и свою библиотеку с набором часто используемых собственных подпрограмм:
require ”../mylib.pl”;
Объявив эту библиотеку в начале программы гостевой книги, можно убрать из текста подпрограмму декодирования данных. Теперь для обработки закодированных данных нужно просто вызвать из нее соответствующую подпрограмму. Это действие практически не отличается от вызова обычной внутренней подпрограммы: &Parse_Data;
Из-за того что используется библиотечная подпрограмма (а она, естественно, отличается названиями переменных), в месте присваивания данных переменным нужно $field{‘ ‘} заменить на $CGI{‘ ‘}. А после внесения всех необходимых изменений в текст программы гостевой книги следует реализовать механизм сохранения пользовательской информации в текстовую базу данных
# Создание текстовой БД записей посетителей
#!/usr/local/bin/perl
require 'cgi_lib.pl';
&Parse_Data;
$Name=$CGI{'name'};
$Email=$CGI{'email'};
$City=$CGI{'city'};
$Url=$CGI{'url'};
@Comments=$CGI{'comments'};
# Убираем символы конца строки из переменной окна прокрутки
$c=0;
foreach (@Comments) {
$Comments[$c] =~ s/\n/ /g;
chomp($Comments[$c]);
$q=$Comments[$c]+$Desc[$c];
$q = ~ s/\n/ /g;
$c++;
}
$file="guestbook";
$dbase="../";
open (F, "+>>$dbase/$file") || die "Error of adding a record
$!\n";
print F join ("::","$Name", "$Email", "$City", "$Url",
"@Comments"),"\n";
$i=1;
foreach (@F) {
print F $_;
$i++;
}
close (F);
print "Content-type:text/html\n\n";
&Title;
print "<B>Name: $Name</B><BR>\n
<B>Email:</B> <A HREF=\"mailto:$Email\">$Email</A><BR>\n
<B>City:</B> $City<BR>\n
<B>Url:</B> <A HREF=\"$Url\">$Url</A><BR>\n
<B>Comments:</B> $Comments<BR>\n";
CGI-программа обрабатывает введенные данные и записывает их в файл. Вместо обычного открытия файла для записи используется режим добавления записей (Append), чтобы не была уничтожена записанная ранее информация.
Web -сервер
Что делает web – сервер? Web сервер Apache просто забирает пакеты идущие по адресу 127.0.0.1 или "http://localhost". Затем их обрабатывает и отсылает ответ клиенту. Клиент ожидает ответ на запрос (Request).
Apache будет установлен в любую директорию какую вы укажете. Можете создать файл конфигурации config.conf, а можете, не удаляя старой конфигурации, воспользоваться новой, указав в коммандной строке соответственно комманду -f "path", где path это полный путь к файлу новой конфигурации *.cfg. Вам будет предложено установить Apache Server в какую-либо директорию. В строке "Install to" введите полный путь для установки, к примеру z:\home\web_server. В результате этого будут созданы папка Apache и файл MakeConf.exe. Запустите MakeConf.exe из директории, где он был создан, и укажите ту же папку что и при инсталляции, только с маленькой оговоркой: для правильного создания файла конфигурации путь надо будет прописывать с правым слэшем: "z:/home/web_server".
Для запуска Apache сервера используйте файл start_apache.cmd, для остановки stop.cmd.Все ошибки, которые возникнут в процессе работы с сервером будут занесены в файлы error.log и access.log в директории logs.
Приложение4. Язык серверных скриптов PHP