Использование технологий WWW для доступа к базам данных

Администрирование Cold Fusion

Для администрирования в Cold Fusion предусмотрен специальный интерфейс администратора.
Этот интерфейс позволяет изменять различные параметры настройки Cold Fusion по четырем категориям:
  • Data Sources - используется для настройки источников данных ODBC,
    для использования их с Cold Fusion.
    Чтобы добавить источник данных, нужно нажать на кнопку "Add...",
    выбрать один из установленных в системе драйверов ODBC
    и задать определенные для него настройки. Переопределить эти настройки
    можно воспользовавшись кнопкой "Setup...",
    предварительно выделив конкретный источник данных. Если нужно
    определить способы взаимодействия Cold
    Fusion с источником данных, то нужно нажать на кнопку "Preferences..."
    и определить такие атрибуты как имя пользователя, пароль,
    допустимые операции с базой данных и др.
  • Templates - используется
    для настройки логических путей до директорий в которых расположены
    файлы с шаблонами Cold Fusion.
  • Debugging - используется
    для настройки отладочных сообщений и сообщений об ошибках.
  • Mail - используется для настройки параметров SMTP mail
    и позволяет просматривать журнал сообщений и ошибок.

    Адреса

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


    Браузеры обычно выделяют его курсивом, то есть строка
    ул. Пирогова, д. 2
    будет отображена как

    ул. Пирогова, д. 2.

    Аргументы командной строки

    СGI-модуль в командной строке от сервера получает:
  • остаток URL после имени cgi-модуля в качестве первого параметра (первый параметр будет пуст, если присутствовало только имя cgi-модуля), и
  • список ключевых слов в качестве остатка командной строки
    для скрипта поиска, или
  • чередующиеся имена полей формы с добавленным знаком равенства и соответствующих значений переменных.
    Ключевые слова, имена и значения полей формы передаются декодированными (из HTTP URL формата кодирования) и перекодированными в соответствии с правилами кодирования Bourne shell так, что cgi-модуль в командной строке получит информацию без необходимости осуществлять дополнительные преобразования.

    Ассоциативные массивы

    Ассоциативные массивы или хэши содержат пары ``ключ'' и ``значение''.
    Например:
    \%map = ('red',0x00f,'blue',0x0f0,'green',0xf00);
    Часто для удобства чтения между ``ключом'' и ``значением'' ставят оператор =>.
    %map = (
    'red' => 0x00f,
    'blue' => 0x0f0,
    'green' => )xf00
    );

    Библиотеки и функции на языке C

    Одной из основных технологий создания CGI-модулей для реализации функций "преобразователя"
    и "обработчика" сценариев 1-3 является язык C. Язык C - наиболее распространенный
    язык программирования. В каждом ВУЗе есть специалисты, способные использовать его для создания приложений.
    При решении описанных задач язык C можно использовать для создания следующих программ:
  • преобразователя, однократно преобразующего содержимое БД в сеть гипертекстовых
    документов (рис. );
  • обработчика, динамически обрабатывающего запрос от WWW-сервера
    к БД. (рис. );
  • перегрузчика из существующих БД в информационное хранилище (см.
    рис. );
  • обработчика запросов от WWW-сервера к информационному хранилищу (рис. ).
    Для поддержки этих функций создано большое количество библиотек и функций языка C,
    готовых приложений в исходных текстах. В главе описывается использование языка C
    для создания исполняемых CGI-программ.

    Бинарные операторы

    Звездочка * - умножение двух чисел. Cлэш / - деление числа на число.
    Процент % - вычисляет модуль двух чисел, x - оператор повторения. В
    скалярном контексте возвращает строку, состоящую из многократно повторенного
    левого операнда, причем повторяется он то количество раз, которое стоит справа.
    В списковом контексте он многократно повторяет список.
    print 'a' x 80; напечатает букву a 80 раз.

    @ones = (1) x 80; массив из восьмидесяти единиц.

    @ones = (5) x @ones сделает все элементы равными пяти.

    Бинарный плюс - операция сложения двух чисел.

    Бинарный минус - операция вычитания двух чисел.

    Бинарная точка - конкатенация строк.

    Что такое progressive JPEGs и как ИХ делать

    Существует возможность создавать GIF-файлы, которые отображаются черезстрочным
    способом. Эта возможность является очень удобной для Web-страниц.
    Не все знают, что подобная возможность имеется и в формате JPEG. Метод
    этот называется progressive JPEGs. Сейчас все большее количество
    программных пакетов начинает его использовать. Например для Adobe Photoshop
    существует подключаемый модуль, создающий progressive JPEGs. Смотрите внимательно
    в меню экспорта графики Вашей любимой программы. Быть может она уже имеет
    такую функцию!

    Что такое transparent/interlaced GIFs и как их делать

    Графический формат GIF имеет несколько интересных возможностей, делающих его особенно привлекательным для WWW. К ним относятся возможности создавать ``прозрачные'' (transparent) изображения и изображения, проявляющиеся постепенно, по мере подкачки (interlaced). Эффект постепенного проявления достигается за счет черезстрочной отрисовки изображения: сначала появляются каждые четвертые строчки растра, затем каждые четвертые строчки со сдвигом на одну строку вниз и т.д. Таким образом, картинка появляется как бы в четыре приема. Эффект прозрачности состоит в том, что один из индексов палитры объявляется прозрачным, то есть при отображении вместо соответствующего цвета будет использоваться цвет ``из-под'' изображения, например, цвет фона документа.
    Существует множество различных программ для большинства систем, позволяющих придать GIF-картинкам свойства прозрачности и черезстрочности. Из них
    выделяются по своим возможностям и удобству использования:
  • для платформы MS Windows - GIF Construction Set by Alchemy Mindworks,
  • для UNIX-систем - git, Image Alchemy, PBMPLUS и прочие.

    Цитаты и преформатированный текст

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

    ...

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

    ...

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



    текст1
    ...

    ...

    текстN


    При этом отображен он будет, по возможности, примерно так:

    текст1
    ...
    ...
    текстN

    Cтруктуры данных

    Perl поддерживает три типа данных:
  • скаляры
  • массивы скаляров
  • ассоциативные массивы скаляров (так называемые хэши).
    Обычные массивы, как и в языке C, индексируются числами, начиная с нуля.
    Ассоциативные массивы индексируются строками.
    Простые скаляры (в дальнейшем мы будем также называть их переменными) всегда
    начинаются со знака доллара: $, даже в том случае, когда мы обращаемся к
    элементу массива.
    ?
    $day простая переменная day
    $day[28] 29 элемент массива day
    $day{'Feb'} значение 'Feb' из хэша %day
    $#day последний индекс массива @day
    Простой массив начинается со знака @: ?
    @day массив day - ($day[1],$day[2],...)
    @day[3,4,5] то же, что и @day[3..5]
    Ассоциативный массив (хэш) начинается со знака процент %:
    %day (key1, val1, key2, val2, ...)

    Каждый тип данных имеет свое именное пространство, поэтому вы можете использовать
    одно и то же имя одновременно для скалярной переменной, массива или
    хэша (а также для подпрограммы или метки) без опасения, что произойдет ошибка.
    Perl различает большие и маленькие буквы: FOO, foo и Foo будут
    рассматриваться Perl-ом как разные переменные. Имена, начинающиеся с буквы или
    знака подчеркивания, могут в дальнейшем содержать в себе цифры или знаки подчеркивания.
    Имена,
    начинающиеся с цифры, могут в дальнейшем содержать только цифры. Имена, начинающиеся не с буквы, цифры или подчерка должны состоять только из одного символа.
    Большинство таких имен зарезервировано, например $$ является
    идентификатором текущего процесса.
    Интерпретация команды или величины часто зависит от требований контекста.
    Существует два основных контекста: скалярный и списковый. Некоторые операции
    возвращают список величин если в контексте подразумевается список и одну величину,
    если контекст скалярный.
    Например, операция &ora_fetch в скалярном контексте возвращает количество
    выбранных строк:

    $nfields = &ora_fetch($csr);

    В списковом контексте она возвращает массив выбранных строк:

    @array = &ora_fetch($csr);
    Левый аргумент определяет контекст правого аргумента.

    Деструкторы

    Когда удаляется последняя ссылка на объект, этот объект автоматически удаляется.
    Это может произойти даже после завершения программы, если ссылки на объект
    содержались в глобальных переменных. Если необходимо контролировать процесс
    удаления объекта, можно определить в объекте специальный метод, называемый
    деструктором. Деструктор объекта (в отличие от C++) имеет
    фиксированное имя DESTROY и вызывается перед удалением объекта. В нем можно
    реализовать дополнительные процедуры, необходимые для корректного
    завершения (например, удаление временных файлов, используемых объектом).
    []
    []
    []

    Динамическое определение SQL выражения

    В некоторых сложных приложениях может потребоваться, в зависимости
    от значений параметров, определять не только содержание запроса,
    но и его структуру. В Cold Fusion
    предусмотрен тег DBSQL,
    который может употребляться внутри тега DBQUERY,
    доопределяя SQL - выражение,
    в зависимости от значений параметров. Тег DBSQL
    имеет единственный атрибут SQL,
    значение которого будет добавляться к основному SQL
    - выражению.
    Пример
    DATASOURCE="Sites Database"
    SQL="SELECT * FROM SITES
    WHERE SiteType = #SiteType# ">



    not "">




    Динамическое создание гипертекстовых документов на основе содержимого БД

    В этом варианте доступ к БД осуществляется специальной CGI-программой,
    запускаемой WWW-сервером в ответ на запрос WWW - клиента.
    Эта программа, обрабатывая запрос, просматривает содержимое БД и создает выходной HTML-документ,
    возвращаемый клиенту (см.рис.1-3).
    Динамическое создание гипертекстовых документов на основе содержимого БД
    Это решение эффективно для больших баз данных со сложной структурой
    и при необходимости поддержки операций поиска. Показаниями также являются частое обновление и невозможность
    синхронизации преобразования БД в статические документы с обновлением
    содержимого. В этом варианте возможно осуществлять изменение БД из WWW-интерфейсов.
    К недостаткам этого метода можно отнести большое время обработки
    запросов, необходимость постоянного доступа к основной базе данных, дополнительную
    загрузку средств поддержки БД, связанную с обработкой запросов от WWW - сервера.
    Для реализации такой технологии необходимо использовать взаимодействие WWW-сервера
    с запускаемыми программами CGI - Common Gateway Interface. Выбор программных
    средств достаточно широк - языки программирования, интегрированные средства типа генераторов отчетов. Для СУБД со внутренними языками программирования существуют
    варианты использования этого языка для генерации документов.

    Для метода GET

  • Получить значение переменной QUERY_STRING
  • Декодировать имена и их значения (учитывая, что все пробелы
    при декодировании сервером были заменены символом "+"
    и все символы с десятичным кодом больше 128 преобразованы в символ
    "%" и следующим за ним шестнадцатеричным кодом символа.)
  • Сформировать структуру соответствия "имя - значение"
    для дальнейшего использования в cgi-модуле

    Для метода POST

  • Получить из стандартного входного потока CONTENT_LENGTH символов
  • Декодировать имена и их значения (учитывая, что все пробелы
    при декодировании сервером были заменены символом "+"
    и все символы с десятичным кодом больше 128 преобразованы в символ
    "%" и следующим за ним шестнадцатеричным кодом
    символа.)
  • Сформировать структуру соответствия "имя - значение"
    для дальнейшего использования в cgi-модуле
    Очевидно, что отличие только в источнике данных. Поэтому, в принципе,
    возможно создание единого модуля для методов POST и GET. Необходимо
    только добавить в начало проверку значения переменной REQUEST_METHOD
    для определения метода запроса. После формирования структуры "имя-значение"
    можно приступить к решению задач, ради которых, собственно, создавался
    cgi-модуль. Понятно, что задачи, решаемые cgi-модулем, могут быть
    очень разнообразными (получение и обработка почты, доступ к базам
    данных, гостевая книга и т.д.).
    Следующим важным моментом является динамическое формирование cgi-модулем
    HTML-документа (оформление результата работы модуля). Например,
    таблицы выборки из базы данных.
    Для этого cgi-модуль должен выдать в стандартный выходной поток
    заголовок состоящий из строки:
    Content-type: text/html и пустой строки (двух символов
    CR)
    После этого заголовка можно давать любой текст в формате HTML.

    Дополнительные функции

    Дополнительные возможности предоставляются функциями
    &ora_titles()
    &ora_length()

    &ora_types()
    &ora_autocommit()
    &ora_commit()

    &ora_rollback()
    &ora_version()


    &ora_titles
    @titles = &ora_titles($csr)
    Программа может определить название полей, содержимое которых будет извлечено запросом, вызовом функции
    &ora_title. Эта функция имеет один параметр - курсор. Заголовки обрезаются
    до длины поля.

    &ora_length
    @length = &ora_length($csr)
    Программа может определить длину каждого из полей, возвращенных запросом,
    с помощью вызова функции &ora_length. Она имеет только один параметр - курсор и
    возвращает массив целых чисел.

    &ora_types
    @types = &ora_types($csr)
    Программа может определить тип каждого из полей, возвращенных запросом,
    с помощью вызова функции &ora_types. Она имеет один параметр - курсор и возвращает
    массив целых чисел. Эти типы определяются в документации по OCI и в файле
    oraperl.ph для Oracle v6.

    &ora_autocommit
    &ora_autocommit($lda,$on_or_off)
    Режим автоматического завершения транзакций можно установить или отменить
    вызовом функции &ora_autocommit. Эта функция имеет два параметра:
    идентификатор регистрации и булевскую переменную, которая указывает
    действие, которое нужно выполнить. Если значение переменной ненулевое, то
    режим включается, если нулевое, то отключается. По умолчанию режим не включен.
    Режим включается на продолжительность пребывания в системе. Если есть
    необходимость включать его только для одного оператора, то лучше делать
    несколько регистраций и использовать для каждого оператора отдельный
    идентификатор регистрации.

    &ora_commit, &ora_rollback
    &ora_commit($lda)
    &ora_rollback($lda)
    Изменения в базе данных могут быть сохранены или отменены вызовом этих
    функций. Они имеют один параметр - идентификатор регистрации в системе.
    Транзакции, результат которых уже был сохранен не могут быть отменены
    &ora_rollback. Эти функции также действуют на все время пребывания в
    системе, а не на отдельные операторы.

    &ora_version
    &ora_version()
    Эта функция печатает версию и информацию об авторских правах, касающуюся
    Oraperl. Она не возвращает ничего.

    Дополнительные команды SQL

    В теге DBOUTPUT, кроме выражения
    SELECT языка SQL,
    допускается использование и любых других, допустимых для конкретного
    источника данных, SQL - команд,
    включая:
  • INSERT - добавление записи
    в таблицу.
  • UPDATE - модификация записи в таблице.
  • DELETE - удаление записи из таблицы.
    Использование непосредственно команд SQL
    вместо тегов DBINSERT и
    DBUPDATE в некоторых случаях
    может обеспечить большую гибкость и эффективность. Например, при
    модификации или создании новой записи, появляется возможность
    использовать все параметры и переменные доступные в шаблоне в
    том числе и результаты определенных в шаблоне запросов.
    Пример использования команды UPDATE
    в теге DBQUERY приведен
    в
    []
    []
    []

    Дополнительные замечания по созданию DBML - шаблонов

  • В шаблонах DBML, для комментариев, используется три тире (

    Конфигурационные файлы Режимы работы сервера

    Главный файл конфигурации (ГКФ) сервера содержит все параметры,
    необходимые серверу для начала работы, а также пути других конфигурационных
    файлов. По умолчанию, главный файл конфигурации сервера находится
    в подкаталоге conf/ каталога и имеет имя httpd.conf.
    При запуске серверу можно указать другой путь, используя ключ
    -f.
    Например:
    /usr/local/sbin/httpd -f /etc/httpd.config
    Ниже приведены параметры, указываемые в главном файле конфигурации
    сервера, с необходимыми пояснениями. Значения параметров отделяются
    от названия одним или несколькими пробелами или табуляциями. Если
    одному параметру соответствуют несколько значений, они разделяются
    запятыми.

    Параметры запуска серверных процессов
  • ServerType
    Определяет способ запуска сервера:
    ServerType inetd
    серверный процесс запускается в ответ на каждое обращение клиента
    через механизм inetd. После обработки запроса, сервер прекращает
    свою работу.
    ServerType standalone
    серверный процесс запускается один раз и находится в состоянии
    ожидания запросов клиентов. После обработки запроса, сервер остается
    запущенным.
  • Port
    Определяет порт tcp, по которому сервер принимает запросы клиентов.
    Этот параметр используется только для сервера типа standalone.
    При механизме старта inetd порт определяется конфигурационным
    файлом сервера inetd - inetd.conf.
    Стандартный порт для WWW - сервера - 80.
    Пример:
    Port 80


  • StartServers и MaxServers
    Для режима standalone определяют количество процессов сервера
    при многопоточной обработке. StartServers - указывает
    число процессов сервера, создаваемых при запуске httpd. MaxServers
    определяет максимальное число одновременно работающих процессов
    сервера.
    Пример:
    StartServers 3
    MaxServers 5


  • TimeOut
    Определяет время (в секундах), которое серверный процесс, запущенный
    в режиме standalone, будет
    ожидать повторного обращения клиента. По умолчанию используется
    1200 секунд.
    Пример:
    TimeOut 3600


  • User и Group
    Определяют имя пользователя и группу, права которого получает

    сервер при запуске в режиме standalone. Изменение прав сервера

    производится с целью предотвращения доступа WWW - клиентов к файлам

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

    User nobody

    Group nobody



    Информационные параметры для WWW - клиентов

  • ServerName

    Определяет имя сервера, которое пересылается клиенту вместе с

    другими параметрами запроса. Используется в случае, если сервер

    имеет несколько имен (синонимов).

    Например:

    ServerName Indy.cnit.nsu.ru



  • ServerAdmin

    Определяет адрес электронной

    почты администратора сервера. При возникновении каких - либо ошибок

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

    о них администратора сервера по указанному Email.

    Например:

    ServerAdmin fancy@nsu.ru

    Расположение необходимых файлов и каталогов

  • ServerRoot

    Определяет местоположение каталога ServerRoot. По

    умолчанию, это /usr/local/etc/httpd

    или измененное значение параметра HTTPD_ROOT файла src/config.h.

    Например:

    ServerRoot /var/httpd

  • ErrorLog

    Определяет местоположение файла - журнала ошибок, в который заносятся

    все сообщения об ошибках, возникающих в процессе работы сервера.

    Если значение не начинается со slash (/), подразумевается путь

    относительно ServerRoot.

    Например:

    ErrorLog logs/errlog

    Журналом ошибок является файл /var/httpd/logs/errlog

  • TransferLog

    Определяет местоположение файла - журнала доступа, в который заносятся

    данные обо всех передачах данных между WWW - клиентом и WWW -

    сервером. Если значение не начинается со slash (/), подразумевается

    путь относительно ServerRoot.

    Например:

    TransferLog logs/translog

    Журналом доступа является файл /var/httpd/logs/translog



  • AgentLog

    Определяет местоположение файла - журнала клиентов, в который

    заносятся данные о программном обеспечении, используемом WWW клиентами

    при доступе к данному серверу. Если значение не начинается со

    slash (/), подразумевается путь относительно ServerRoot.

    Например:

    TransferLog logs/agentlog


    Журналом клиентского программного обеспечения является файл /var/httpd/logs/agentlog



  • RefererLog

    Определяет местоположение файла в который записываются все факты

    обращений к данным сервера в виде ссылок от клиентов к данным.

    Если значение не начинается со slash (/), подразумевается путь

    относительно ServerRoot.

    Например:

    RefererLog logs/reflog

    Журналом ссылок является файл /var/httpd/logs/reflog



  • PidFile

    Определяет местоположение файла, хранящего номер процесса запущенного

    WWW - сервера. Используется для остановки работы сервера путем

    посылки сигнала командой kill. Если значение не

    начинается со slash (/), подразумевается путь относительно ServerRoot.

    Например:

    PidFile logs/httpd.pid

    Номер процесса - сервера записывается при старте в файл /var/httpd/logs/httpd.pid



  • AccessConfig

    Определяет местоположение файла управления доступом. Если значение

    не начинается со slash (/), подразумевается путь относительно

    ServerRoot.

    Например:

    AccessConfig conf/access.conf



  • TypesConfig

    Определяет местоположение файла, содержащего список соответствий

    расширений файлов ОС типам MIME. По умолчанию используется файл

    conf/mime.types в каталоге, определяемом ServerRoot. Если не начинается

    с backslash (/), подразумевается путь относительно ServerRoot.

    Например:

    TypesConfig /etc/mime.types



  • CoreDirectory

    Определяет местоположение каталога, в который записывается файл

    дампа памяти при возникновении сбоя.

    Например:

    CoreDirectory /tmp



    Параметры протоколирования

  • LogOptions

    Определяет, будут ли несколько протоколов записываться в один

    файл (Combined) или каждый будет записан в свой

    файл (Separate).

    Например:

    LogOptions Separate



  • RefererIgnore

    Определяет имена серверов, обращения от которых не будут протоколироваться.

    Например:

    RefererIgnore Indy.cnit.nsu.ru



    Другие режимы работы

  • DNSMode

    Определяет интенсивность обращений WWW сервера к серверу имен

    Интернет. Minimum означает,

    что сервер будет обращаться к DNS только при необходимости проверить


    ограничения доступа по домену. Standard означает,

    что сервер будет обращаться к серверу имен каждый раз при обработке

    запроса клиента. Maximum означает, что сервер будет

    дважды обращаться к серверу имен при каждой обработке запроса.

    Например:

    DNSMode Standard



    Процедура определения конфигурации сервера

    После запуска основного серверного процесса сервер пытается открыть

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

    каталоге /usr/local/etc/http/conf с именем httpd.conf.

    Умолчание можно изменить при сборке системы редактированием файла

    src/config.h. За каталог отвечает параметр HTTPD_ROOT,

    за имя файла - параметр SERVER_CONFIG_FILE. Изменить значения

    по умолчанию можно при запуске сервера, указав ключи -h

    и-f (см. выше).

    Местоположение файлов конфигурации доступа, документов, типов

    MIME, а также файлов журналов сервер получает из главного конфигурационного

    файла. Если каких - либо параметров там нет, их значения берутся

    по умолчанию (см. src/config.h).

    Конфигурация ресурсов

    Расположение файлов данных, их интерпретация сервером и поведение

    сервера при обращении к разным типам файлов определяются параметрами

    файла конфигурации ресурсов. Ниже приведен список основных параметров

    с пояснениями.

  • DocumentRoot

    Определяет каталог локальной файловой системы,

    от которого начинается отсчет виртуального пути URL.

    Например:

    DocumentRoot /apply/www



  • UserDir

    Определяет название публичного подкаталога пользователей. ПО WWW

    - сервера позволяет обеспечить внешний доступ к гипертекстовым

    документам пользователей базовой операционной системы. Для этого

    пользователям необходимо создать в своем домашнем каталоге подкаталог

    с именем, определяемым параметром UserDir. После

    этого все обращения по URL:

    http://<имя_сервера>/~<имя_пользователя_ОС>

    будут транслироваться в реальный путь до подкаталога, определенного

    параметром UserDir в домашнем каталоге пользователя <имя_пользователя_ОС>.

    Например:

    UserDir public_html


    при этом при обращении по URL

    http://www.nsu.ru/~fancy/index.html

    сервер будет искать файл Index.html в подкаталоге

    public_html/ домашнего каталога пользователя fancy.

  • Redirect

    Переадресует запрос к одной иерархии в запрос к другой иерархии,

    возможно расположенной на другом сервере.

    Например:

    Redirect /HTTPd/ http://hoohoo.ncsa.uiuc.edu/



  • Alias

    Определяет синоним для документа или каталога на локальном сервере.

    Пример:

    Alias /icons /var/opt/images



  • ScriptAlias

    Определяет синоним для каталогов, содержащих CGI - программы.

    Пример:

    ScriptAlias /hrv-cgi /var/opt/cgi



  • DirectoryIndex

    Определяет имена файлов, трактующихся сервером как индексные.

    Их содержимое выдается сервером при обращении к данному каталогу.

    Пример:

    DirectoryIndex index.html index.htm index.cgi



  • AccessFileName

    Определяет имя файла, трактующегося сервером как файл управления

    доступом (см. раздел ).

    Пример:

    AccessFileName .htaccess

    Конструкторы и деструкторы пакетов

    Существует две функции специального вида - конструкторы и деструкторы. Это
    BEGIN и END программы в их описании необязательно использование sub. Подпрограмма
    BEGIN исполняется сразу, как только это возможно, то есть в момент, когда
    она полностью определена, даже перед тем как обрабатывается остаток содержащего
    файла. В файле может быть несколько блоков BEGIN. Они исполняются в порядке
    определения.

    Подпрограмма END исполняется в самом конце. В файле может содержаться несколько
    END блоков, они исполняются в обратном порядке.

    Контроль работоспособности сервера

    Проверка работоспособности сервера может осуществляться различными
    способами. На Unix - платформе, в режиме standalone, можно посмотреть
    список процессов, выделив среди них процессы с именем httpd:
    #
    ps -aef | grep httpd

    root
    28816 1 0 Nov 14 ? 7:42 /usr/local/sbin/httpd
    nobody 28817 28816 0 Nov
    14 ? 5:50 /usr/local/sbin/httpd
    nobody 28818 28816 0 Nov
    14 ? 5:32 /usr/local/sbin/httpd
    nobody 28819 28816 0 Nov
    14 ? 4:49 /usr/local/sbin/httpd
    nobody 28820 28816 0 Nov
    14 ? 5:24 /usr/local/sbin/httpd
    nobody 28821 28816 0 Nov
    14 ? 5:42 /usr/local/sbin/httpd
    root 19150 19145 0 14:57:58
    pts/4 0:00 grep httpd
    #
    Мы увидим несколько процессов, у одного из которых собственником
    является root, а у других - пользователь, определенный
    параметром User главного конфигурационного файла
    (ГКФ). Процесс с собственником root запускается
    первым. Он контролирует работу остальных процессов - серверов.
    По использованному процессорному времени (колонка 8
    примера) можно судить о загруженности серверов.
    Если сервер работает в режиме inetd или необходимо
    проверить работоспособность сервера извне, нужно выполнить команду
    telnet, указав ей имя машины - сервера и номер порта.
    После установления соединения наберите команду GET /.
    Сервер должен выдать содержимое корневого каталога документов
    или индексного файла, находящегося в этом каталоге. Номер порта
    обычно равен 80. В режиме standalone он определяется параметром
    Port ГКФ. Для режима inetd он определяется парой файлов - services
    и inetd.conf, определяющих соответствие между входными
    tcp - портами и сервисами Unix.
    Например:
    $ telnet www.cnit.nsu.ru
    80

    Trying 193.124.209.70...
    Connected to Indy.
    Escape character is '^]'.
    GET /


    Novosibirsk Center<br> of New Information Technologies

    . . .


    Connection closed by foreign host.
    $

    Логическое И и логическое ИЛИ

    Бинарное && - логическое И. Если левый аргумент FALSE, то правый
    не проверяется.

    Бинарное - логическое ИЛИ. Если левый аргумент TRUE, то правый
    аргумент не проверяется.

    ''и && отличаются от подобных операторов в \verbC| тем, что вместо 0 или
    1 они возвращают последнюю обработанную величину.
    Таким образом, наиболее удобным способом определить домашний каталог
    пользователя из переменной окружения HOME будет (на практике такой способ
    определения домашнего каталога пользователя не рекомендуется):
    $home = $ENV{'HOME'} $ENV{'LOGDIR'}
    (getpwuid($<))[7] die "You're homeless!\n";
    В качестве более удобной для чтения альтернативы Perl поддерживает операторы and и
    or, которые будут описаны далее. Их приоритет ниже, однако их можно с
    удобством использовать, не расставляя скобки,
    после операторов, аргументами которых являются списки:
    unlink "alpha", "beta", "gamma"
    or gripe(), next LINE;
    Если писать в стиле C, то это может быть записано так:
    unlink("alpha", "beta", "gamma")
    (gripe(), next LINE);

    Логическое И, ИЛИ и Исключающее ИЛИ

    and возвращает конъюнкцию двух выражений. Он эквивалентен &&, за
    исключением более низкого приоритета.
    or возвращает дизъюнкцию аргументов. Он эквивалентен , за исключением
    более низкого приоритета.
    xor (eXclusive OR) - исключающее ИЛИ, возвращает истину, если истинен
    ровно один из аргументов.

    Логическое НЕ

    Унарное NOT возвращает отрицание аргумента. Оно эквивалентно !, за
    исключением более низкого приоритета.

    Методы HTTP запроса

    Для реализации взаимодействия "клиент-сервер" важно, какой метод HTTP запроса использует
    клиентская часть при обращении к WWW серверу. В общем случае, запрос - это сообщение, посылаемое
    клиентом серверу. Первая строка HTTP запроса(см. ) включает в себя метод, который должен быть применен к запрашиваемому ресурсу,
    идентификатор ресурса(URI-Uniform Resource Identifier), и используемую версию
    HTTP-протокола. В рассматриваемом нами случае, клиентская часть применяет методы запроса POST
    и GET. Метод POST используется для запроса серверу, чтобы тот принял информацию, включенную в запрос, как
    относящуюся к ресурсу, указанному идентификатором ресурса. Метод GET используется для получения
    любой информации, идентифицированной идентификатором ресурса в HTTP запросе.
    Для WWW-сервера стандарта NCSA прикладные программы или CGI-модули, обрабатывающие поток данных от клиента
    или (и) формирующие обратный поток данных могут быть написаны на таких языках программирования как:
  • C/C++;
  • Любой UNIX shell;
  • Fortran;
  • Perl;
  • Visual Basic;
  • TCL;
  • AppleScript;

    Методы

    В Perl-е метод имеет синтаксис простой подпрограммы. В качестве первого аргумента
    метода выступает объект или пакет. Существует два типа методов: статические и
    виртуальные методы.

    Статические методы имеют первым аргументом имя класса. Они обеспечивают функциональность
    для класса в целом, а не для отдельных объектов принадлежащих классу. Конструкторы
    являются, как правило, статическими методами. Многие статические методы просто игнорируют
    свой первый аргумент, так как заранее знают, какому пакету они принадлежат.
    Другой способ использования статических методов состоит в том, что метод работает
    с объектом, используя имя:
    sub find {
    my ($class, $name) = @_;
    $objtable{$name};
    }
    Виртуальные методы имеют первым аргументом ссылку на объект. Обычно они
    помещают
    эту ссылку в переменную self или this и в дальнейшем используют ее как обычную
    ссылку.
    sub display {
    my $self = shift;
    my @keys = @_ ? @_ : sort keys %$self;
    foreach $key (@keys) {
    print "\t$key => $self ->{$key}\n";
    }
    }

    Модули

    В Perl 5 понятие пакетов расширено в понятие модулей. Модули это пакеты находящиеся
    в одноименном файле, включенном в библиотеку. Модули подключаются следующим образом:
    use Module; или use Module LIST;
    Это эквивалентно:
    BEGIN { require "Module.pm"; import Module; }
    Все модули имеют расширение .pm. Если именное пространство модуля пересекается
    с именным пространством основной программы то всегда используется use, если не
    пересекается то можно использовать require.

    Стандартные модули Perl описаны в документации.

    Multimedia-материалы

    Все большее количество Web-страниц использует различные multimedia-материалы,
    как-то звуки или видеовставки. Они обычно имеют ОЧЕНЬ большой размер
    и передаются по сети ОЧЕНЬ долго. Как этого избежать? Единого ответа
    на этот вопрос нет. Все зависит от того что вам на самом деле нужно.
    Как всегда, возникает вопрос о форматах хранения данных.
    Для звука используются форматы MIDI, WAV (Windows Audio), AU (Sun Audio),
    AIFF (Mac Audio).
    Для видео-вставок -- AVI (Microsoft Video for Windows), MPEG (Motion
    Picture Experts Group), и MOV (Apple QuickTime movies).
    Рассмотрим сначала форматы хранения аудиоданных:
    MIDI
    - Musical Instruments Digital Interface -- формат хранения команд
    для различных электронных музыкальных инструментов (например, синтезатора на
    музыкальной карте компьютера). Грубо говоря, внутри файла формата MIDI
    хранится нотная запись музыкального фрагмента. Это позволяет достичь
    минимального размера файла при максимальной сложности мелодии. Файлы MIDI
    являются оптимальными для записи мелодий, если не требуется гарантий
    абсолютно идентичного звучания различных инструментов на различных системах.
    WAV
    - формат хранения звуков, используемый в системах семейства Windows.
    Содержит запись звука в виде сигнала, то есть, гарантирует точность
    воспроизведения (если, конечно, устройство вывода позволяет).
    AU
    - формат представления звука, используемый в системах компании
    Sun Microsystems. По принципу схож с WAV. Имеет встроенную компрессию.
    AIFF
    - формат представления аудиоданных, используемый в системах
    Apple Computer и Silicon Graphics. По принципу схож с WAV.
    Имеет встроенную компрессию.
    Как и в случае с изображениями, следует прежде всего избавиться от избыточной
    информации. Для цифрового звука характерны два параметра, влияющие на размер
    данных: частота оцифровки и разрядность уровня сигнала. Частота оцифровки
    определяет, сколько раз в секунду замерялся уровень сигнала (и сколько раз в
    секунду он будет меняться при нормальном воспроизведении).
    Разрядность

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

    Для примера: на музыкальных компакт-дисках частота дискретизации составляет

    примерно 44.1 Кгерц при разрядности 16 бит. Нетрудно подсчитать, что при

    такой схеме одна секунда звука будет занимать больше 88 килобайт (!)

    К счастью, уровень качества звука, присущий компакт-дискам, далеко не всегда

    необходим при передаче звука по сетям. Например, для корректной передачи

    голоса достаточно частоты дискретизации в 8.0 Кгерц при разрядности

    сигнала в 8 бит. Таким образом, в те же 88 килобайт поместится уже почти

    11 секунд звучания голоса. Если при этом использовать еще и сжатие (с потерями),

    то это значение можно сильно увеличить.

    Таким образом, главное правило звучит так:

    Для звуковых файлов выбирайте минимальную частоту дискретизации и

    разрядность, при которых качество все еще остается приемлемым. Выбирайте формат

    с максимальным показателем сжатия для ваших данных.


    Видеовставки, пожалуй -- самый объемный элемент современных Web-страниц.

    Единственный совет, который можно дать по отношению к ним: старайтесь не

    вставлять их прямо в документ (inline). Лучше вставьте один из кадров

    в виде статичной картинки и сделайте ссылку на весь фрагмент. Кроме того,

    можно выбирать формат и способ компрессии, достигая при этом оптимального

    соотношения размер / качество.

    Обычно в WWW применяются следующие форматы хранения видеофрагментов:

    AVI

    - формат компании Microsoft, используемый в системах семейства

    Windows. Построен по схеме применения так называемых ``кодеков'', то есть

    модулей сжатия/распаковки. Точно такой же подход используется в формате

    QuickTime фирмы Apple, только набор стандартных кодеков отличается.

    QuickTime MOV

    - формат, разработанный компанией Apple и ныне получивший

    повсеместное распространение. Программы его воспроизведения (некоторое

    множество кодеков) ныне существуют для большинства систем.

    MPEG

    - Формат экспертной группы по кинематографии. Очень сильно

    распространен и популярен.

    Написание модулей CGI

    Язык Perl очень широко используется при написании исполняемых модулей
    CGI (Common Gateway Interface) для Web.
    Это обусловлено прежде всего тем, что Perl предоставляет разработчикам
    простые и удобные средства обработки текста и взаимодействия с базами
    данных. Наша цель - лишь дать пример
    использования Perl для написания CGI-модуля.
    Рассмотрим простую подпрограмму разбора входного потока CGI-программы
    (при передаче параметров используется метод POST ).
    #!/usr/local/bin/perl
    sub Print {
    $len = 100;
    $buf = "";
    read(STDIN, $buf,$len);
    # считываем из стандартного потока ввода
    # в переменную $buf количество символов
    # $len
    @ar = split(/[&=]/,$buf);
    # разбиваем строку в массив строк,
    # разделителями служат & и =.
    $output = "Content-type: text/html\n\n
    # посылает тип MIME передаваемого документа
    Result

    Hi there



    ";
    $i = 0;
    while ($i <= $#ar) {
    $ar[$i] =~ s/\+/ /g;
    # заменяем в элементах массива + на пробел
    $output .= "$ar[$i]\n";
    # конкатенация переменной $output с
    # элементом массива
    $i++; }
    $output .="
    ";
    # завершаем HTML страницу
    print $output;
    }
    eval &Print;
    # выполняем подпрограмму осуществляющую
    # считывание, обработку и вывод информации
    В данном примере был проиллюстрирован случай считывания параметров из входного
    потока.
    Если параметры передаются CGI-модулю в командной строке, то они помещаются в служебный
    массив @ARGV. Например, если параметры пишуться в URL:

    http://www.host.ru/cgi-bin/name.cgi?123+resource+time+12 .

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

    Назначение WWW - сервера Общая схема работы Определение

    WWW сервер - это такая часть глобальной или внутрикорпоративной
    сети, которая дает возможность пользователям сети получать доступ
    к гипертекстовым документам, расположенным на данном сервере.
    Для взаимодействия с WWW сервером пользователь сети должен использовать
    специализированное программное обеспечение - броузер (от англ.
    browser), другое название - программа просмотра.
    Схема работы
    Рассмотрим более подробно, чем
    в предыдущих главах, схему
    работы WWW-сервера.
    В общем виде она выглядит так:
  • Пользователь сети запускает пакет программного обеспечения,
    называемый броузером,
    в функции которого входит
  • Установление связи с сервером
  • Получение требуемого документа
  • Отображение полученного документа
  • Реагирование на действия пользователя - доступ к новому документу
  • После запуска броузер по команде пользователя или автоматически
    устанавливает связь с заданным WWW - сервером и передает ему запрос
    на получение заданного документа (см рис.3-1).
    Назначение WWW - сервера Общая схема работы Определение
  • WWW сервер ищет
    запрашиваемый документ и возвращает результаты броузеру
    (см. рис.
    3-2).
    Назначение WWW - сервера Общая схема работы Определение
  • Броузер, получив
    документ, отображает его пользователю
    и ожидает его реакции. Возможные варианты:
  • Ввод адреса нового документа
  • Печать, поиск, другие
    операции над текущим документом
  • Активизация (нажатие) специальных зон полученного документа,
    называемых связями (link) и ассоциироваными с адресом
    нового документа.
    В первом и третьем случае происходит обращение за новым документом.
    Адрес
    Как было описано в главе , адрес
    документа указывается в виде специальной строки, называемой URL.
    Для протокола HTTP, используемого при взаимодействии WWW клиента
    и WWW сервера, URL состоит из следующих компонент:
  • Наименование протокола,
    по которому работает сервер (http).
  • Имя машины - сервера в Internet или ее IP - номер.
  • Порт TCP, обращение к которому обрабатывает сервер.
  • Место (путь) документа на машине - сервере.
    Например:
    http://www.cnit.nsu.ru:80/welcome.html
    Здесь http означает протокол работы с WWW - сервером

  • ':' - разделитель

  • "www.cnit.nsu.ru" - имя машины - сервера

    в Internet

  • "80" - номер tcp - порта

  • /welcome.html - путь до документа на машине

    - сервере

    Из общей схемы работы видно,

    что функции WWW сервера заключаются в следующем:

  • Установление соединения с клиентским ПО по протоколу tcp.

  • Принятие запроса на документ по протоколу http.

  • Поиск документа в локальных ресурсах.

  • Возврат результатов поиска по протоколу http.

    В общем случае, WWW - сервером будем называть программно

    - аппаратный комплекс, предназначенный для выполнения вышеперечисленных

    действий.

    Среда работы сервера

    В настоящее время все известные WWW - серверы представляют собой

    компьютер общего назначения с многозадачной операционной системой.

    Один или несколько процессов такой системы отвечают за поддержку

    специфических для WWW - сервера функций. Другие процессы ОС отвечают

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

    технологии WWW (см. рис. 3-3).

    Назначение WWW - сервера Общая схема работы Определение

    Такая структура приводит к тому, что под WWW сервером начинают подразумевать только часть программного

    обеспечения, единственными функциями которой являются функции

    WWW сервера, а остальную часть - компьютер, операционную систему,

    другие процессы, сетевую структуру называют средой работы WWW

    сервера или платформой. Ниже приведена таблица 3-1,

    содержащая список наиболее распространенных платформ для

    WWW - сервера.

    Таблица 3-1

    Компьютер

    Операционная Система

    IBM PC

  • Unix (UnixWare, Open Server, Solaris, BSD, Linux и т.д.

  • Microsoft Windows NT

  • IBM OS/2

  • Novell NetWare

  • Sun SparcStation и SparcServer

  • SunOS

  • Solaris

  • Silicon Graphics

    серверы и рабочие станции

    IRIS


    Непосредственные функции сервера Базовые определения

    В простейшем случае гипертекстовый документ представляет собой
    совокупность файлов. Представление этих файлов как единого документа
    производится броузером. По каждому файлу документа броузер делает
    запрос к WWW - серверу. Таким образом,
    сервер не имеет представления о структуре и составе документов,
    он отвечает только за выдачу локальных файлов по запросам.
    На различных платформах, в различных операционных системах пути
    файлов выглядят по разному.
    Например:
    D:\DOCUMENTS\HTML\INDEX.HTM - в Windows,
    /u/data/www/html/index.html - в Unix - системах,
    USR:WWW/HTML - в NetWare и т.д.
    Путь файла, указываемый в URL, имеет стандартный вид:
    /<имя_каталога>/ ... /<имя_каталога>/<имя_файла>
    Таким образом, в функции WWW - сервера входит преобразование адреса
    из внешнего единого формата в платформенно ориентированный внутренний
    формат. Появляется ряд понятий,
    специфичных для такого преобразования, необходимых для него.

  • Исходный каталог документов
    Это каталог реальной файловой системы сервера, от которого идет
    вычисление пути, указанного в URL.
    Например, если исходным каталогом
    документов является D:\Documents\HTML\,
    то на запрос к этому серверу документа по URL
    http://<имя_сервера>/index.htm
    будет возвращен файл
    D:\Documents\HTML\index.htm
  • Синонимы
    В случае, когда необходимо
    осуществить обращение к конкретному каталогу или файлу, находящемуся
    вне иерархии Исходного каталога документов,
    используется механизм синонимов. Синоним позволяет явно определить
    соответствие между путем, указанным в URL, и путем локальной файловой
    системы.
    Например:
    Синонимом для /Harvest объявляется /projects/www/harvest
    или
    синонимом для /test/myfile.html объявляется
    C:\MYDIR\FILE.HTM
    В первом случае все обращения к файлам каталога /Harvest
    будут обрабатываться в каталоге /projects/www/harvest.
    Второй пример показывает работу
    синонима с конкретным файлом файловой системы.
  • Индексный файл
    Для каждого сервера определено имя так называемого индексного

    файла. Обычно этот файл содержит ссылки на другие файлы данного

    каталога. Содержимое индексного файла выдается сервером в случае,

    если в URL указан каталог без конкретного файла.

  • Пользовательский раздел

    Для многопользовательских операционных систем (таких как Unix)

    ПО WWW - сервера позволяет каждому пользователю предоставлять

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

    вне основной иерархии (Исходного каталога документов, Синонимов

    и т.д.). Этот набор документов должен находиться в собственном

    (т.н. "домашнем") каталоге пользователя. Для доступа

    к таким документам в URL перед путем ставится знак тильда и имя

    пользователя: ~<имя_пользователя>.

    Например:

    На сервере Indy.cnit.nsu.ru создан пользователь

    с именем fancy и "домашним" каталогом /home/fancy.

    Собственные гипертекстовые документы он хранит в каталоге /home/fancy/public_html.

    При обращении по URL http://Indy.cnit.nsu.ru/~fancy/start.html,

    WWW - сервер будет искать документ start.html в

    каталоге /home/fancy/public_html.

    Объектная ориентация

    Понятие объектной ориентации зиждется на трех простых определениях:
  • Объект это просто ссылка.
  • Класс это просто пакет, который содержит методы для работы с объектными
    ссылками.
  • Метод это просто подпрограмма, которая имеет своим первым аргументом
    объектную ссылку (или имя пакета для статического метода).

    Объекты

    В отличие от C++, Perl не имеет специального синтаксиса для описания
    конструкторов. Конструктор, как уже говорилось раньше, это просто подпрограмма,
    которая возвращает ссылку ассоциированную с классом (как правило с тем, где
    определена подпрограмма). Например, типичный конструктор:
    package Critter;
    sub new { bless {} }
    {} создает ссылку на анонимный хэш.

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

    Обработка файлов формата DBF

    Для взаимодействия с файлами этого формата существует специальный модуль - Xbase.pm
    На текущий момент поддерживается только возможность чтения таких файлов.
    Этот модуль подключается стандартным образом: use Xbase;

    Новый Xbase объект создается следующим образом:
    $database = new Xbase;
    Будет создан объект $database, который в дальнейшем будет использоваться для
    взаимодействия со всевозможными методами, которые поддерживает модуль.
    Доступ к базе данных осуществляется следующим образом:
    $database->open_dbf($dbf_name,$idx_name);
    Мы ассоциировали DBF-файл и необязательный индексный файл с объектом. Чтобы
    определить тип (database type) можно сделать следующее:
    print $database->dbf_type;
    Вернется строка, которая, если Xbase файл открыт, будет содержать значение
    DBF3, DBF4 или FOX.
    Чтобы узнать дату последнего обновления делается следующее:
    print $database->last_update;
    Возвращает строку с датой.

    Чтобы узнать номер последней записи можно сделать следующее:
    $end=$database->lastrec;
    Вернется номер последней записи в файле с базой данных.

    Информацию о статусе базы данных можно посмотреть следующим образом:
    $database->dbf_stat;
    В стандартный выходной поток будет напечатана информация о статусе и структуре
    базы данных. Этот метод работает аналогично команде display status.

    Посмотреть информацию о статусе индексного файла можно используя метод idx_stat:
    $database->idx_stat;
    Печатает в стандартный выходной поток (STDOUT) информацию о статусе открытого
    IDX-файла.

    Для того чтобы перейти на начало файла есть метод go_top:
    $database->go_top;
    Передвигает курсор чтения на физическое начало файла,если индексы не существуют
    и на первую запись, соответствующую порядку, который задается индексом, в
    противоположном случае.

    Для того чтобы перейти на конец файла есть метод go_bottom:
    $database->go_bottom;
    Передвигает курсор чтения на физический конец файла,если индексы не существуют
    и на последнюю запись, соответствующую порядку, который задается индексом, в

    противоположном случае.

    Чтобы перейти на следующую запись есть метод go_next:

    $database->go_next;

    Эквивалентно команде skip 1, которая передвигает курсор на следующую запись.

    Чтобы перейти на предыдущую запись есть метод go_prev:

    $database->go_prev;

    Эквивалентно команде skip -1, которая передвигает курсор на предыдущую запись.

    Есть возможность осуществить поиск по заданному ключу:

    $stat=$database->seek($keyvalue);

    Эта команда устанавливает курсор на первую запись, соответствующую данному

    ключу. Но в данном случае база данных должна быть открыта с соответствующим

    индексом, в противоположном случае будет выдано сообщение об ошибке и исполнение

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

    или нет.

    Чтобы узнать номер записи, на которой стоит курсор можно использовать следующую

    команду:

    $current_rec=$database->recno;

    Метод bof возвращает значение true, если курсор находится в самом начале файла.

    if ($database->bof) {

    print " At the very top of the file \n";

    }

    Аналогично действует метод eof:

    if ($database->eof) {

    print " At the very end of the file \n";

    }

    Чтобы прочитать содержимое какого-либо поля записи можно поступить так:

    print $database->get_field("NAME");

    Возвращает строку с содержимым поля. Если данная запись помечена для удаления, то

    использует псевдоимя поля _DELETED.

    Чтобы прочитать значения полей записи в массив можно поступить так:

    @fields = $database->get_record;

    В массиве они будут располагаться в такой же последовательности, как и в базе

    данных.

    Для закрытия базы данных используется метод close_dbf.

    $database->close_dbf;

    Закрывает файл с базой данных, индексами и комментариями. В завершение приведем

    небольшой пример программы, которая распечатывает статус базы данных и индексного

    файла, а также дату последнего обновления и количество записей в базе данных.

    #!/usr/bin/perl

    use Xbase;

    # подключение модуля

    $database = new Xbase;

    # создание объекта

    $d = "/home/smit/employee.dbf";

    # имя файла с базой

    $i = "/home/smit/employee.cdx";

    # имя индексного файла

    $database->open_dbf($d,$i);

    # открываем базу данных

    $database->dbf_stat;

    # печатаем статус и структуру

    # базы данных

    $database->idx_stat;

    # печатаем статус и структуру

    # индексов

    @fields = $database->get_record;

    print @fields,"\n";

    # печатаем содержимое текущей записи

    print $database->last_update, "\n";

    # печатаем дату последнего обновления

    $end = $database->lastrec;

    print $end;

    #печатаем номер последней записи

    Полная спецификация языка Perl приводиться в Приложении к отчету.

    []

    []

    []

    Обработка журналов

    Время от времени возникает необходимость уменьшить размер файлов
    статистики путем их удаления или переноса в другое место. Если
    сервер находится в режиме inetd, можно свободно удалять и переносить
    файлы статистики. Они снова создадутся по указанным в ГКФ путям.
    Если же сервер работает в режиме standalone, эти файлы постоянно
    открыты процессами - серверами. Удаление или перенос их не освободят
    место на диске и не приведут к созданию новых файлов. Для корректной
    работы с журналами в этом случае, необходима остановка работы
    сервера. Необходимо "убить" процессы - серверы, перенести
    файлы журналов и перезапустить сервер. "Убить" процессы
    - серверы можно послав команду kill процессу с номером, указанном
    в файле PidFile (см. параметры ГКФ). Пример последовательности
    команд для выполнения такой операции:

    kill `cat /usr/local/etc/httpd/logs/httpd.pid`
    mv /usr/local/etc/httpd/logs/*.log
    /otherdir

    /usr/local/sbin/httpd


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

    Обзор расширений

    Некоторые браузеры кроме поддержки базового языка HTML обладают
    также дополнительными возможностями.
    Первым браузером, имевшим действительно значительные расширения стал
    Netscape Navigator. Популярность использования расширенных возможностей
    Netscape была настолько высока, что они вошли в новый проект стандарта HTML 3.2.
    Его конкурент, Microsoft Internet Explorer, предоставляет разработчикам Web-страниц еще больший простор; но тот факт, что
    он функционирует лишь на одной платформе, делает разработку специфичных
    для него документов не очень привлекательной (если, конечно, ВСЕ
    пользователи ваших страниц не работают в Microsoft Windows и Internet
    Explorer).
    Большинство мелких расширений представляют собой дополнительные параметры
    или значения параметров различных тегов. Они обсуждались нами во время
    обсуждения тегов HTML.
    Самыми существенными расширениями, конечно, являются внутренние языки
    браузеров: JavaScript в и VBScript в .
    Обсуждение этих языков выходит за рамки данной книги, их описания могут
    быть найдены на серверах их производителей.

    Обзор различных программ просмотра

    На сегодняшний день существует множество браузеров, как коммерческих, так
    и бесплатных. Все они имеют свои особенности, и очень важно их учитывать
    при создании Web-страниц.
    Автору известны следующие браузеры для платформ Microsoft Windows
    и UNIX/XWindow:
  • LYNX - браузер, работающий в алфавитно-цифровом режиме, существует для
    абсолютного большинства UNIX-систем, а также для ОС VMS. Бесплатный,
    поставляется в исходных текстах.
  • Mosaic - один из первых графических браузеров. На сегодняшний день почти не
    используется. Существует в версиях для MS Windows, для UNIX/XWindow/Motif поставляется
    в исходных текстах. Бесплатный.
  • Arena - экспериментальный браузер комитета W3 Consortium для провалившегося
    стандарта HTML 3.0. Существует для большинства UNIX-систем. Поставляется
    бесплатно в исходных текстах.
  • Amaya - новый проект W3 Consortium, соответствующий проекту стандарта
    HTML 3.2. Находится в очень ранней стадии разработки.
  • Cello - довольно простой браузер для MS Windows.
  • Emacs W3 mode - Web-браузер для интегрированной среды Emacs. Бесплатный.
  • HotJava - браузер компании Sun Microsystems, написанный на языке Java.
  • Netscape Navigator (Рис. ) - браузер, произведший настоящую революцию в мире
    WWW. В нем впервые появились такие возможности, как фоновые цвета и
    изображения, поддержка формата JPEG, и т.д. Существует для
    MS Windows 3.xx, MS Windows95, Sun Solaris, SGI IRIX, BSDI, Linux, IBM
    RS6000, DEC Digital UNIX, HP-UX. Почти для всех систем поддерживается
    язык Java. Бесплатный для образовательных организаций, некоммерческих
    пользователей и для пробы перед покупкой.
  • Microsoft Internet Explorer (Рис. )- взгляд известной фирмы Microsoft на то, каким
    должен быть WWW браузер. Существует только для систем MS Windows95 и WindowsNT.
    Подерживает язык Java, бесплатный.
    На самом деле, браузеров очень и очень много. Поищите список на узле
    .
    Обзор различных программ просмотра

    Рис. П1.2.1: Netscape Navigator 3.0
    Обзор различных программ просмотра

    Рис. П1.2.2: Microsoft Internet Explorer 3.0

    Оценка трудоемкости обеспечения WWW доступа

    Трудоемкость обеспечения WWW-доступа к базам данных, очевидно,
    складывается из трудоемкости работ при реализации одного из вышеприведенных сценариев. Реализация
    первого сценария связана с последовательным преобразованием всех данных, находящихся в исходной
    БД. Разработка средств вывода содержимого таблицы в формате HTML с необходимым форматированием и текстовым сопровождением будет
    занимать порядка 1-3-х дней для одного разработчика. Разработка средств построения индексной структуры к выводимым
    данным является более творческой работой и может занять 1-3 недели для одного разработчика.
    Трудоемкость построения интерфейсов для сценариев 2, 3, в общем случае,
    эквивалентна трудоемкости построения этих интерфейсов при создании исходной информационной системы (т.е.
    той, для которой обеспечивается WWW-доступ) с использованием традиционных средств разработки (не-CASE). В третьем сценарии дополнительные
    трудозатраты пойдут на перегрузку данных в ИХ. При перегрузке данных без изменения структуры и имен
    можно исходить из оценки трудозатрат: 1-2 таблицы в 1-2 дня для одного разработчика,
    в зависимости от сложности и объема таблиц, при условии отладки технологии перегрузки.
    При использовании различных средств разработки интерфейсов к БД,
    представленных в отчете, трудозатраты могут существенно различаться. Ранжированный
    по уменьшению трудозатрат на разработку интерфейсов список будет выглядеть так:
  • библиотеки и функции на языке C;
  • язык Perl;
  • - 4. пакеты WOW и Cold Fusion.
    []
    []

    Однократное или периодическое преобразование содержимого БД в статические документы

    В этом варианте содержимое БД просматривает специальная программа,
    создающая множество файлов - связных HTML-документов (см.рис.1-2).
    Полученные файлы могут быть перенесены на один или несколько WWW-серверов.
    Доступ к ним будет осуществляться как к статическим гипертекстовым документам сервера.
    Однократное или периодическое преобразование содержимого БД в статические документы
    Этот вариант характеризуется минимальными начальными расходами.
    Он эффективен на небольших массивах данных простой структуры и редким обновлением, а также
    при пониженных требованиях к актуальности данных, предоставляемых через WWW.
    Кроме этого, очевидно полное отсутствие механизма поиска, хотя возможно развитое индексирование.
    В качестве преобразователя может выступать программный комплекс,
    автоматически или полуавтоматически генерирующий статические документы.
    Программа-преобразователь может являться самостоятельно разработанной программой либо
    быть интегрированным средством класса генераторов отчетов.

    Оператор чтения из файла

    В Perl есть несколько операций ввода-вывода. Для вывода из файла используется
    команда <>.
    open(STDIN,"/etc/passwd");
    while ($string = )
    {
    @a = split(/[:]/,$string);
    }
    Внутри этих скобок стоит дескриптор файла. Считывание происходит построчно.
    В конце файла принимает значение FALSE и цикл while завершается.
    По умолчанию считывание происходит в переменную $_. Нулевой дескриптор файла
    используется также как в sed и awk, то есть считывается поток из файлов перечисленных
    в командной строке.

    Оператор диапазона

    .. - оператор диапазона. Реально это два разных оператора, в зависимости
    от контекста. В списковом контексте он работает как оператор диапазона от
    левого аргумента до правого.
    for (1..10) {
    #code
    }
    В скалярном контексте он возвращает булевское
    значение. Если левый операнд TRUE, то .. принимает значение TRUE, если
    правый операнд тоже TRUE.
    if (101..200) { print 'hi;)';}
    - напечатает вторую сотню строк

    Оператор ``стрелка''

    Также, как в С и С++ ``->'' является инфиксным оператором ссылки. Если правая
    часть является [...] или {...} подпрограммой, тогда левая часть должна быть
    символьной ссылкой на массив или хэш. Если правая часть - это имя метода или
    скалярная переменная содержащая имя метода, то левая часть должна быть объектом
    или именем класса.

    Оператор замены множества символов

    tr/SEARCHLIST/REPLACEMENTLIST/cds y/SEARCHLIST/REPLACEMENTLIST/cds
    Заменяет все найденные символы из множества символов SEARCHLIST на
    соответствующие символы из множества символов REPLACEMENTLIST. Возвращает
    число символов, которые были заменены или удалены. Если посредством операторов
    =~, !~ не была указана никакая строка, то обрабатывается переменная $_.
    y является синонимом tr. Если SEARCHLIST заключен в скобки,
    то REPLACEMENTLIST тоже заключается в скобки, которые могут отличаться от тех,
    в которые заключается шаблон, например:
    tr[A-Z][a-z]
    tr(+-*/)/ABCD/
    Этот оператор употребляется со следующими опциями:
    c заменяет символы, которые не входят во множество SEARCHLIST на
    REPLACEMENTLIST, например:
    tr/a-zA-Z/ /cs;
    заменит неалфавитные символы.
    d Стирает символы, которые ни на что не заменяются.
    s Переводит последовательность символов, которые заменяются на один и тот же
    символ в один символ.
    Например:
    $a = 'CCCCCCCCC';
    $a =~ tr/C/D/s;
    теперь $a = 'D'

    Оператор замены строки

    Оператор s/PATTERN/REPLACEMENT/egimosx производит поиск строки, соответствующей
    шаблону PATTERN и если строка найдена, то подстановку на ее место текста
    REPLACEMENT. Возвращает количество произведенных подстановок.
    Если перед этим не использовался оператор =~ или !~ для определения
    переменной, которая будет обрабатываться, то будет модифицироваться переменная $_.
    Этот оператор используется со следующими опциями:
    e интерпретирует правую часть как выражение.
    g производит подстановку на место каждой строки, соответствующей шаблону.
    i производит поиск различающий большие и маленькие буквы.
    m обрабатывает строку, как состоящую из нескольких строк.
    o происходит подстановка только на место первой встреченной строки.
    s обрабатывает строку, как состоящую только из одной строки.
    x использует расширенные регулярные выражения.
    Например:
    $path =~ s|/usr/local/bin|/usr/bin|;
    ($foo = $bar) =~ s/this/that/o;
    $count = ($paragraf =~ s/Mister\b/Mr./gm);

    Оператор ``запятая''

    , - оператор запятая или comma-оператор. В скалярном контексте он
    обрабатывает левый аргумент и отбрасывает его значение, потом обрабатывает
    правый аргумент и возвращает его величину. В этом он подобен comma-оператору
    из C. В списковом контексте он играет роль разделителя аргументов и вставляет
    оба аргумента в список. => является синонимом comma-оператора.

    Операторы ++ и - -

    Эти операторы работают также как и в С. То есть, если они стоят перед
    переменной, то они увеличивают или уменьшают переменную до возвращения значения.
    Если они стоят после переменной, то увеличение или уменьшение переменной
    происходит после возврата значения. Если переменная содержит в себе число или
    употребляется в скалярном контексте, то использование ++ дает обычное
    увеличение значения. Если же переменная употреблялась только в строковом
    контексте, не является пустой строкой и содержит символы a-z,A-Z,0..9, то
    происходит строковое увеличение значения переменной:
    print ++($foo = '99'); - напечатает 100

    print ++($foo = 'a0'); - напечатает a1

    print ++($foo = 'Az'); - напечатает Ba

    print ++($foo = 'zz'); - напечатает aaa

    Операторы эквивалентности

    == возвращает TRUE, если левый аргумент численно эквивалентен правому.

    != возвращает TRUE, если левый аргумент численно неэквивалентен правому.

    <=> возвращает -1, 0 или 1 в зависимости от того, численно меньше,
    равен или больше левый аргумент правого.

    eq возвращает TRUE, если левый аргумент эквивалентен правому (в строковом контексте).

    ne возвращает TRUE, если левый аргумент неэквивалентен правому (в строковом контексте).

    cmp возвращает -1, 0 или 1 в зависимости от того, меньше равен или
    больше левый аргумент правого (в строковом контексте).

    Операторы присваивания

    = - обычный оператор присваивания. Вообще операторы присваивания работают
    также как и в C.
    $a += 2; - то же самое, что и $a = $a + 2;
    Можно использовать следующие сокращения:
    **= += *= &= <<= &&=
    -= /= |= >>= =
    .= %= ^= x=
    ($a += 2) *= 3; - то же самое, что и :
    $a = $a + 2;
    $a = $a * 3;

    Операторы сдвига

    Двоичный сдвиг осуществляется, как и во многих других языках
    программирования, с помощью операторов ``<<'' и ``>>''. При применении
    этих операторов значения левых аргументов сдвигаются в соответствующую
    сторону на количество разрядов, указанное в правых аргументах.
    Аргументы должны быть целочисленными.

    Операторы сравнения

    ``<'' - возвращает TRUE если левый аргумент численно меньше, чем правый.

    ``>'' - возвращает TRUE если правый аргумент численно меньше, чем левый.

    ``<='' - возвращает TRUE если правый аргумент численно меньше или равен левому.

    ``>='' - возвращает TRUE если левый аргумент численно меньше или равен правому.

    ``gt'' - возвращает TRUE если левый аргумент меньше (в строковом контексте), чем правый.

    ``lt'' - возвращает TRUE если правый аргумент меньше (в строковом контексте), чем левый.

    На поведение операторов lt и gt влияют установки
    системного языка, если операционная система способна работать с несколькими
    языками. По этой причине операторы должны корректно работать со строками
    на языках, отличных от US ASCII, что в системе UNIX задается указанием
    свойств LC_COLLATE системного locale.

    Операторы связки

    Знак равенства с тильдой ``=~''связывает выражение слева
    с определенным шаблоном. Некоторые операторы обрабатывают и модифицируют
    переменную $_. Эти же операции иногда желательно бывает выполнить над
    другой переменной. Правый аргумент это образец поиска, подстановки или
    трансляции, левый аргумент - это то, что должно быть подставлено вместо
    $_. Возвращаемая величина показывает успех операции.
    Бинарное ``!~'' это тоже самое, что и ``=~'', только
    возвращаемая величина является отрицательной в логическом смысле.

    Определение типа данных MIME для содержимого документа

    Cold Fusion позволяет задавать
    тип MIME для данных которые
    будут отправлены пользователю из текущего шаблона
    (по умолчанию используется text/html).
    Для этого используется тег DBCONTENT,
    имеющий единственный атрибут TYPE,
    который, собственно, и задает тип данных. Например, чтобы отправить
    клиенту VRML - документ может
    использоваться следующий шаблон:

    SQL="SELECT VRML_Script
    FROM CyberRooms WHERE
    RoomNumber=#URL.RoomNumber#">

    #VRML_Script#

    Заметим, что Cold Fusion не
    будет отправлять клиенту текст, расположенный до тега DBOUTPUT.

    Оптимизация Web-страниц

    По причине низкой пропускной способности каналов Internet возникает
    необходимость в жестком слежении за размерами элементов Web-страниц,
    особенно графики и multimedia-материалов. Для снижения размеров таких
    ресурсов существует несколько стандартных методик, но, вообще говоря,
    подход является индивидуальным. Каждое изображение или другой материал
    имеет свои особенности, и на них можно выиграть драгоценное снижение
    байтового размера. При разработке страницы на быстром компьютере
    и с высокоскоростным каналом связи не всегда заметно то, от чего
    страдают пользователи массовых модемов со скоростью 14400 бод (или даже ниже).
    Поставьте себе такой модем и посмотрите на создаваемые страницы!
    Если они плохо оптимизированы, то это откроет вам глаза.
    В этом разделе мы рассмотрим основные приемы,
    используемые при процессе оптимизации различных материалов для WWW.

    Основные функции доступа

    Мы приведем здесь пример программы, которая создает таблицу, помещает
    в нее некоторые данные и потом производит выборку строк из этой таблицы.
    #!/usr/local/bin/perl
    use Oraperl;
    # подключаем модуль Oraperl
    $system_id = 'T:bdhost.com:Base';
    $lda = &ora_login($system_id,'scott','tiger');
    # вход в систему
    $st = 'create table EMP (name varchar2(100),
    organization varchar2(100))';
    $csr = &ora_open($lda,$st) die $ora_errstr;
    &ora_close($csr);
    # создание таблицы в базе данных
    $st = 'insert into EMP values
    (\'John Smit\', \'NATO\')';
    $csr = &ora_open($lda, $st);
    &ora_close($csr);
    # помещение строки в таблицу
    В результате в базе создалась таблица из двух столбцов с одной записью:




    Name
    Organization
    John Smit NATO

    $st = 'select name from EMP
    where organization = \'NATO\'';
    $csr = &ora_open($lda,$st);
    # выбираем из таблицы значения столбца name,
    # которым сответствует значение столбца organization
    # равное 'NATO'
    @result = &ora_fetch($csr);
    # помещаем эти значения в массив @result
    &ora_close($csr);
    print @result;
    &ora_logoff($lda);
    # выход из системы
    Для взаимодействия с Oracle в Perl есть специальный модуль Oraperl.pm.
    Основными функциями для доступа к базе данных являются:

    &ora_login
    $lda = &ora_login($system_id,$username,$password)
    Для того, чтобы получить доступ к информации, хранимой в Oracle необходимо сначала
    войти в систему. Это осуществляется вызовом функции &ora_login(). Эта функция
    имеет три параметра: системный идентификатор базы данных, имя пользователя в базе
    и пароль пользователя. Возвращается идентификатор регистрации в системе (Oracle Login Data Area).
    Несколько доступов могут осуществляться одновременно. Эта функция
    эквивалентна функции OCI(Oracle Call Interface) olon или orlon.

    &ora_open
    $csr = &ora_open($lda, $statement [,$cache])
    Для определения SQL-запроса в базу данных программа должна вызывать функцию
    &ora_open. Эта функция имеет как минимум два параметра: идентификатор регистрации

    и SQL выражение. Необязательный третий параметр описывает размер буфера строк для

    SELECT оператора. Возвращается курсор Oracle. Если третий параметр опущен,

    то используется стандартный размер буфера.

    $csr = &ora_open($lda,'select ename,

    sal from emp order by ename',10);

    Эта функция эквивалентна функции OCI oopen или oparse.

    &ora_bind

    &ora_bind($csr, $var, ...)

    Если SQL выражение содержит обращение к переменным языка Perl, то необходимо подставить вместо имен

    значения переменных. Для этого используется функция &ora_bind.

    $csr = &ora_open($lda, 'insert into emp values (:1,:2)');

    &ora_bind($csr,$ename,$sal);

    - подставляет в SQL выражение вместо :1 и :2 значения переменных $ename

    и $sal.

    &ora_fetch

    $nfields = &ora_fetch($csr[, trunc]);

    @array = &ora_fetch($csr);

    Эта функция используется с оператором SQL SELECT для

    извлечения информации из базы данных и имеет только один обязательный параметр

    - идентификатор курсора, полученный в результате вызова функции &ora_open. В скалярном

    контексте она возвращает число выбранных строк, в списковом - массив выбранных

    строк. Второй необязательный параметр содержит информацию о том, можно ли обрезать

    данные типов LONG и LONG RAW или выдавать сообщение об ошибке. Если параметр

    опущен, то информация берется из переменной $ora_trunc.

    Если произошло обрезание данных, то переменная $ora_errno принимает значение

    1406. Эта функция эквивалентна функции OCI ofetch.

    &ora_close

    &ora_close($csr)

    Если открытый курсор не будет больше использоваться, то его нужно закрыть

    вызовом функции &ora_close. Это эквивалентно функции OCI oclose.

    &ora_do

    &ora_do($lda,$statement)

    Не все SQL-выражения возвращают данные или содержат переменные для подстановки.

    В таких случаях функция &ora_do выступает в качестве альтернативы &ora_open

    и &ora_close. Первым параметром является идентификатор регистрации, вторым --

    SQL выражение.

    &ora_do($lda,'drop table employee');

    это эквивалентно:

    &ora_close(&ora_open($lda, 'drop table employee'));

    &ora_logoff

    &ora_logoff($lda)

    Для выхода из системы используется

    функция &ora_logoff. Она эквивалентна функции OCI ologoff.

    Основные понятия

    Использование технологий WWW для обеспечения доступа к каким-либо информационным ресурсам подразумевает существование следующих компонент (см.рис.1-1):
  • IP - сети с поддержкой базового набора услуг по передаче данных с единой политикой нумерации и маршрутизации, работающим сервисом имен DNS.
  • Выделенного информационного сервера - WWW-сервера,
    обеспечивающего предоставление гипертекстовых документов через IP - сеть в ответ на запросы WWW - клиентов.
    Основные понятия
    Передаваемые гипертекстовые документы оформляются в стандарте HTML - языке описания гипертекстовых документов. Эти документы могут либо храниться в статическом виде (совокупность файлов на диске), либо динамически компоноваться
    в зависимости от параметров запроса специальным программным обеспечением. Для динамической компоновки HTML-документов, WWW-сервер использует специальным образом оформленные программы- CGI-программы.

    Основные типы графики для WWW

    Несмотря на то, что графическое оформление Web-страницы является довольно широким полем для фантазии, существует несколько типов наиболее употребимых графических вставок, как то:
  • разделяющие полосы (lines, rules)
  • фоновые картинки (backgrounds)
  • заглавные изображения (titles)
  • маркеры списков (bullets)
  • кнопки (buttons)
    В Internet имеются довольно обширные коллекции бесплатных изображений такого типа. Тем не менее, иногда бывает проще нарисовать их для конкретных страниц самостоятельно.

    Особенности WWW-графики

    При подготовке графического материала для WWW следует учитывать некоторую специфику, связанную с тем, что графика будет передаваться по сети, а также с тем, что он будет, в основном, отображаться на компьютерных дисплеях.
    Еще одной особенностью является тот исторически сложившийся факт, что на графических системах с глубиной цвета 8 бит (256 цветов) используется фиксированная палитра из 216-ти цветов выбранных так, чтобы в палитре равномерно присутствовали цвета спектра.

    Пакет Cold Fusion фирмы Allaire Corp

    Пакет предназначен для использования под ОС Windows и позволяет обращаться к различным базам данных,
    поддерживающим интерфейс ODBC через WWW-интерфейсы. Пакет имеет коммерческий статус,
    его "evaluation copy" является свободно-распространяемой.
    Для доступа к базам данных используются конструкции языка DBML - расширения языка HTML,
    дополненного средствами доступа к БД через ODBC. Документы на языке DBML обрабатываются
    на серверной части, в результате чего создается HTML-документ.
    Полноценная версия пакета, вместе с WWW - сервером стоит $486.
    Пакет может эффективно использоваться в качестве обработчика запросов
    WWW к исходным базам данных или информационному хранилищу (сценарии 2,3).
    Глава отчета посвящена описанию процедуры установки и использованию пакета.

    Пакет Web - Oracle - Web

    Пакет WOW является свободно-распространяемым программным средством, предназначенным
    для создания интерактивных WWW-интерфейсов с СУБД Oracle. Пакет WOW был первым и наиболее простым средством,
    выпущенным фирмой Oracle. В настоящее время существует набор продуктов, развивающих
    функциональность WOW'а - Oracle Web Server версий 1, 2, Oracle Web Arcitecture.
    Все перечисленные продукты позволяют использовать процедурное
    расширение языка SQL - PL/SQL, разработанное фирмой Oracle для динамического
    создания гипертекстовых документов. Высокая скорость разработки достигается за счет резкого
    упрощения доступа к БД - программы на PL/SQL исполняются самим сервером Oracle.
    Предлагаемый пакет WOW был переработан в Новосибирском областном центре НИТ с целью поддержки
    нескольких русскоязычных кодировок.
    Основной областью использования WOW является обработка запросов от WWW-сервера к SQL-серверу Oracle в среде Unix. В предложенных сценариях пакет WOW позволит
    организовать эффективный WWW доступ к информационному хранилищу, построенному на базе сервера баз данных Oracle (сценарий 3). Глава
    отчета посвящена описанию процедур установки и администрирования
    пакета.

    Пакеты

    Perl поддерживает механизм альтернативного именного пространства для каждого
    отдельного пакета. Обычная программа является пакетом с именем main. Можно
    ссылаться на переменные или дескрипторы файлов из других пакетов посредством
    использования префикса перед именем переменной, состоящего из имени пакета и
    двойного двоеточия: $Package::Variable. Если имя пакета нулевое, то предполагается
    использование переменной из main пакета. То есть $::sail эквивалентно
    $main::sail. Пакеты могут включать в себя другие пакеты, в таком случае
    чтобы обратиться к переменной нужно применить описанное обозначение рекурсивно:
    $OUTER::INNER::var.

    В пакете могут содержаться только переменные, чьи имена начинаются с буквы или
    подчерка, остальные переменные содержатся в пакете main. Кроме того
    зарезервированные переменные, как то STDIN, STDOUT, STDERR, ARGV, ARGVOUT, ENV,
    INC и SIG также содержатся в главном пакете.
    package mypack;
    sub main::mysub {
    ...
    }

    Передача параметров в DBML-шаблон

    Существует несколько способов передачи параметров между шаблонами.
    Можно передавать параметры непосредственно в URL,
    использовать для этого форму либо cookie.
    Если параметры передаются через URL,
    то они добавляются к адресу вызываемого шаблона через символ "&"
    (амперсант) в виде параметр
    = значение. Например, гипертекстовая ссылка,
    приведенная ниже, отправляет параметр с именем 'user_id'
    и значением 5 в шаблон 'example.dbm':

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

    NAME="user_id" VALUE="5">
    VALUE="Enter">

    Заметим, что при обращении к CGI
    - программе DBML.EXE должен
    быть определен стандартный параметр Template,
    указывающий на конкретный шаблон.
    Переменные, занесенные в cookie браузера
    и переменные окружения CGI доступны
    в любом шаблоне. Способы занесения информации в cookie
    описаны в .

    Переменные для подстановки

    Oraperl позволяет SQL выражению содержать обращение к переменным языка Perl. Они
    состоят из двоеточия и следующего за ним номера. Например:
    $csr = &ora_open($lda,"insert into tel values(:1,:2)");
    Эти два имени :1 и :2 называются переменными для подстановки. Функция
    &ora_bind() используется для привязывания переменных к их значениям.
    &ora_bind($csr, "Annette","3-222-2-22-22-22");
    &ora_bind($csr,$name,$telephone);
    Номера переменных должны следовать в порядке возрастания начиная с 1, так как
    &ora_bind выполняет подстановку именно в таком порядке.

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

    Каждый сеанс связи вызывающий CGI
    - программу имеет конкретные переменные окружения. Доступ
    к ним из шаблона осуществляется, также как и к другим параметрам,
    только используется префикс 'CGI.',
    например #CGI.REMOTE_ADDR#.

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

    Переменные окружения условно делятся на два типа:
  • общие для всех типов запросов (устанавливаются для всех типов)
  • зависящие от метода запроса
    К переменным первого типа относятся следующие переменные:
    SERVER_SOFTWARE содержит информацию о WWW сервере (название/версия)
    SERVER_NAME содержит информацию об имени машины, на которой запущен WWW сервер,
    символическое имя или IP адрес соответствующие URL.
    GATEWAY_INERFACE содержит информацию о версии CGI(CGI/версия)
    Следующие переменные являются специфичными для разных типов запросов
    и значения этим переменным присваиваются перед вызовом cgi-модуля.
    CONTENT_LENGTH значение этой переменной соответствует длине стандартного входного
    потока в символах.
    CONTENT_TYPE эта переменная специфицирована для запросов содержащих дополнительную
    информацию, таких как HTTP POST и PUT, и содержит тип данных этой информации.
    SERVER_PROTOCOL эта переменная содержит информацию об имени и версии информационного
    протокола (протокол/версия).
    SERVER_PORT значение переменной содержит номер порта, на который был послан запрос.
    REQUEST_METHOD метод запроса, который был использован "POST","GET","HEAD"
    и т.д.
    PATH_INFO значение переменной содержит полученный от клиента виртуальный путь до cgi-модуля
    PATH_TRANSLATED значение переменной содержит физический путь до cgi-модуля, преобразованный из значения PATH_INFO.
    SCRIPT_NAME виртуальный путь к исполняемому модулю, используемый для получения URL.
    QUERY_STRING значение этой переменной соответствует строке символов следующей
    за знаком "?" в URL соответствующему данному запросу. Эта информация не декодируется сервером.
    REMOTE_HOST содержит символическое имя удаленной машины, с которой был произведен
    запрос. В случае отсутствия данной информации сервер присваивает
    пустое значение и устанавливает переменную REMOTE_ADDRESS.
    REMOTE_ADDRESSсодержит IP адрес клиента
    AUTH_TYPE если WWW-сервер поддерживает аутентификацию (подтверждение подлинности)
    пользователей и cgi-модуль
    является защищенным от постороннего доступа то, значение переменной
    специфицирует метод аутотентификации.
    REMOTE_USER
    содержит имя пользователя в случае аутотентификации.
    REMOTE_IDENT содержит имя пользователя, полученное от сервера (если сервер
    поддерживает аутентификацию согласно RFC 931)
    HTTP_ACCEPT список типов MIME известных клиенту. Каждый тип в списке должен
    быть отделен запятой согласно спецификации HTTP (тип/подтип,тип/подтип
    и т.д.)
    HTTP_USER_AGENT название программы просмотра которую использует клиент при посылке
    запроса.

    Переменные

    В модуле Oraperl.pm есть шесть специальных переменных:
    $ora_cache
    $ora_long

    $ora_trunc
    $ora_errno
    $ora_errstr
    $ora_verno
    Эти переменные
    используются для определения поведения Oraperl в определенных условиях.

    $ora_cache
    Эта переменная определяет размер буфера для функции
    &ora_open() и SELECT-выражения, если точный размер буфера не указан.
    Как правило устанавливается размер буфера равный пяти. Присваивание этой
    переменной значения, равного нулю, устанавливает значение этой переменной
    равным первоначальному значению. Присваивание отрицательной величины
    приводит к ошибке.

    $ora_long
    Обычно Oraperl спрашивает базу данных о длине каждого поля и соответствующим
    образом распределяет буферное пространство. Это невозможно для полей типа
    LONG и LONGRAW. Распределение пространства в предположении максимально
    возможной длины (65535 bytes) привело бы к излишним тратам памяти. Поэтому
    когда &ora_open() определяет, что поле имеет тип LONG, память распределяется
    согласно значению переменной $ora_long. При инициализации она принимает
    значение 80 (для совместимости с продуктами Oracle), но в программе ее
    можно устанавливать произвольным образом.

    $ora_trunc
    Так как Oraperl не может точно определять длину значений
    типа LONG, возникают ситуации, когда значение $ora_long недостаточно для
    хранения полученных данных. В таком случае, если у &ora_fetch есть
    необязательный второй параметр, происходит обрезание данных. Если второй
    параметр опущен, то вместо него используется значение $ora_trunc.

    $ora_errno
    Содержит код ошибки произошедшей при последнем вызове
    какой-либо функции. Есть два интересных случая, касающихся &ora_fetch().
    В первом случае, если произошло обрезание данных типа LONG или LONGRAW и
    обрезание было разрешено, тогда выполнение этой функции полностью успешно,
    но $ora_errno принимает значение 1406, для индикации того, что произошло
    обрезание. Во втором случае, если &ora_fetch() возвратила false, то
    $ora_errno принимает значение 0 в случае конца данных или код ошибки,
    если действительно произошла ошибка.

    $ora_errstr
    Содержит сообщение об ошибке, соответствующее значению
    $ora_errno.

    $ora_verno
    Содержит версию Oraperl в формате v.ppp, где v -
    основной номер версии, а ppp - patchlevel.

    Перенаправление на другой URL (DBLOCATION & DBABORT)

    Для перенаправления пользователя на другой URL
    предназначен тег DBLOCATION. Этот
    тег обычно применяется, если в шаблоне выполняется один или более
    запросов, а затем нужно сразу же перейти к другому документу,
    либо URL, на который нужно
    отправит пользователя, зависит от параметра. Приведем пример использования
    тега, иллюстрирующий его синтаксис:
    #PasswordConfirmation#>


    В качестве значения атрибута URL
    тега DBLOCATION можно
    использовать параметры и переменные, допустимые в шаблоне. Например,
    .
    Для прерывания обработки шаблона в Cold
    Fusion используется тег DBABORT.
    Этот текст будет отправлен
    клиенту

    Этот текст не будет
    отправлен клиенту
    Обычно этот тег используется при неправильной аутентификации.

    План отчета

    В главах отчета будут подробно освещены различные этапы приведенных
    сценариев, технологические решения, используемые для поддержки этих этапов. Взаимосвязь
    глав отчета показывает схема на рис. 1-6.
    План отчета
    Во второй главе подробно описывается язык HTML. Она необходима для понимания того,
    какой вид должна иметь информация, представляемая с использованием технологий WWW.
    Третья глава посвящена описанию базовых элементов WWW-технологии,
    процедур установки и администрирования WWW-сервера.
    Четвертая глава содержит материал по корневой технологии создания
    динамических HTML-документов - интерфейсу CGI. Подробно описывается интерфейс CGI WWW-сервера
    с вызываемыми программами. Именно CGI-программы (программы, удовлетворяющие спецификации CGI)
    способны динамически обрабатывать WWW - запросы к базам данных.
    В главах , , излагается три технологических
    направления, используемых при реализации приведенных выше сценариев. Сориентировавшись на одно или несколько таких направлений,
    можно реализовывать программные комплексы с функциями "Преобразователь"
    и "Обработчик" сценариев 1-3.
    Предлагаемые технологические решения обладают универсальностью
    области применения. Одно решение может использоваться для:
  • Однократной генерации гипертекстовых документов.
  • Поддержки синхронности содержимого информационного хранилища с основной БД.
  • Обработки запросов от WWW-сервера с динамическим созданием документов на основе данных основной
    БД или информационного хранилища.

    Побитовое И, побитовое ИЛИ и Исключающее ИЛИ

    Бинарное & возвращает объединенные побитово операнды.

    Бинарное | возвращает перемноженные побитово операнды.

    Бинарное ^ возвращает исключенные побитово операнды.

    Поддержка русскоязычных кодировок

    Исторически сложилось, что
    в России распространены несколько русскоязычных кодировок, в основном
    ориентированных на разные платформы. Наиболее известные из них:
  • КОИ - 8 8 - битовая кодировка по ГОСТ
  • Microsoft Code Page 866 ("Альтернативная") - кодировка,
    используемая в MS-DOS
  • ISO-8859-5 - кодировка, утвержденная международной организацией
    по стандартизации
  • Microsoft Code Page 1251 ("Windows") - кодировка,
    используемая в Microsoft Windows.
    Специалисты утверждают что всего в России имеют хождение 11 кодировок
    русского алфавита.
    Если Ваш WWW сервер ориентирован на использование внутри организации
    или его пользователями будет являться ограниченный круг людей
    с однотипными рабочими местами, Вы можете ограничиться одной кодировкой
    русскоязычной информации на сервере.
    Сложности возникают, когда Вы захотите расширить круг клиентов
    сервера. Вам необходимо будет организовать поддержку нескольких
    кодовых страниц для русскоязычных документов. Приведенный выше
    список из четырех кодировок удовлетворит более 99% всех возможных
    абонентов сервера.
    Вообще говоря, в составе языка HTML имеются теги, определяющие
    кодировку документа и должные позволить корректно прочитать документ
    в любой кодировке. Однако в связи с тем,
    что эти теги не поддерживаются ни одним из известных броузеров,
    надеяться на них не стоит. Возможно, в будущем эта ситуация изменится,
    и проблема с кодировками будет решена.
    Для поддержки нескольких кодовых страниц применяется множество
    методов, которые можно разбить на две группы:
  • использование файлов - копий одного документа в разных кодировках
  • динамическое преобразование документов из кодировки, в которой
    они лежат на сервере, в кодировку, поддерживаемую WWW - клиентом.
    В первом случае, на сервере физически присутствуют все файлы во
    всех поддерживаемых кодировках. Документы в различных кодировках
    отличаются между собой по правилам образования путей и имен.
    Например:
    indexw.html,
    indexa.html
    - добавление суффиксов, определяющих

    кодировку. Или

    .../koi8/index.html,

    .../win/index.html

    - различные базовые каталоги для разных кодировок.

    При этом выделяется одна мастер - кодировка,

    в которой новые документы располагаются на сервере,

    а все остальные варианты документов получаются после работы

    специальной программы - перекодировщика.

    Программа - перекодировщик может запускаться вручную -

    администратором WWW сервера

    или автоматически, с использованием

    команд cron, at.

    Во втором случае, доступ к

    документам осуществляется через дополнительную программу - перекодировщик,

    динамически перекодирующую документы сервера в кодировку

    WWW - клиента. Эта программа может быть CGI

    - программой, через которую всегда осуществляется доступ

    к русскоязычной части сервера. На

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

    WWW - клиента,

    в которую нужно перекодировать указанный документ

    (см. рис.

    12.1)

    Поддержка русскоязычных кодировок

    Программа - перекодировщик может также располагаться между WWW

    - клиентом и сервером (см.рис.12.2).

    В таком варианте она называется PROXY.

    Поддержка русскоязычных кодировок

    Однако здесь возникает проблема с перекодировкой всех данных,

    включая графику, видео,

    аудио и других нетекстовых материалов.

    Для ее решения PROXY придается

    дополнительный интеллект - определять тип передаваемых данных

    по заголовку MIME и решать,

    перекодировать документ или нет,

    на основе его типа. Программы

    - перекодировщики с различными кодировками обрабатывают обращения

    к разным портам tcp сервера.

    Клиенту работа с PROXY видна

    в URL.

    Например:

    http://www.nsu.ru:80/index.html

    - для кодировки КОИ-8,

    http://www.nsu.ru:8000/index.html

    - для кодировки ISO-8859-5

    и т.д.

    []

    []

    []

    Поддержка транзакций

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

    DATASOURCE="Bank Accounts"
    SQL = "UPDATE Accounts
    SET Balance = Balance - #Amount#
    WHERE Account_ID = #AccountFrom#
    ">
    DATASOURCE="Bank Accounts"
    SQL = "UPDATE Accounts
    SET Balance = Balance + #Amount#
    WHERE Account_ID = #AccountTo#
    ">

    Заметим, что не все драйверы ODBC
    поддерживают транзакции. Например,
    драйверы для Oracle, SQL Server
    и Access поддерживают транзакции,
    а драйверы для FoxPro, dBase
    и Paradox - нет.

    Подпрограммы

    Описать и использовать подпрограмму можно несколькими способами:
  • sub NAME; - подразумевает описание в дальнейшем тела подпрограммы.
  • sub NAME BLOCK - непосредственное описание.
  • $subref = sub BLOCK - анонимное описание.
  • use PACKAGE qw(NAME1, NAME2, NAME3) - включение подпрограмм из модулей.
    Вызвать подпрограмму можно тоже несколькими способами:
  • &NAME(LIST) - скобки обязательны для & формы.
  • NAME(LIST) - & не обязательно со скобками.
  • NAME LIST - скобки можно опустить в случае предварительного описания
    или включения подпрограммы из модуля.
    Аргументы передаются подпрограмме в виде локального массива @_, его элементы
    являются ссылками на реальные скалярные параметры. Подпрограмма возвращает
    значение, полученное в результате исполнения последнего оператора подпрограммы.
    Как уже говорилось, подпрограмма вызывается использованием префикса & перед
    ее именем, в Perl 5 этот префикс не обязателен. Пример:
    sub MAX {
    my $max = pop(@_);
    foreach $foo (@_) {
    $max = $foo if $max < $foo;
    }
    $max;
    }
    ...
    $bestmark = &MAX(1,2,3,4,5);
    Подпрограмма может вызываться рекурсивно. Если подпрограмма вызывается с использованием
    & формы, то список аргументов необязателен.
    Если вы хотите создать внутри модуля его собственную, невидимую снаружи подпрограмму,
    то описание должно быть анонимным:
    my $subref = sub {...}
    &$subref(1,2,3);

    Поля формы и параметры URL

    Если в шаблон, с помощью полей формы или в URL, были переданы
    параметры, то внутри любого тега DBML к этим параметрам
    можно обращаться, используя следующий синтаксис:
    #Form.Name#, #URL.Name#. На самом деле, префиксы 'Form.'
    и 'URL.' могут опускаться,
    если заранее известно, что не может быть параметров других типов
    с такими же именами. Это правило относится ко всем типам параметров
    и переменных.

    Последовательность действий для

    Исходя из разницы методов запросов GET и POST, можно определить последовательность действий для обработки входных данных cgi-модуля
    для разных типов запросов.

    Представление цвета

    Для обозначения цветов можно использовать слова вроде красный или
    белый. Но человеческий глаз различает миллионы цветовых оттенков,
    и не хватит слов ни одного языка, чтобы точно передать каждый из них.
    По этой причине с приближением эры цветного телевидения и печати
    люди стали задумываться над тем, как можно закодировать информацию
    о цвете.
    Всем хорошо известно, что существует чистые цвета (цвета видимого спектра,
    радуги) и смешанные цвета (например, белый цвет -- смешанный).
    В видимом спектре четко выделяются три основных цветовых оттенка:
    красный, зеленый и синий. Было замечено, что, смешивая эти основные цвета,
    можно с хорошей точностью получать почти все возможные оттенки,
    наблюдаемые нами в спектре. Именно на принципе смешения красного, зеленого
    и синего цветов построены электронные лучевые трубки цветных телевизоров
    и мониторов.
    Как известно, компьютеры работают с числами, и именно с числами им
    проще всего работать. Естественно, что для обозначения яркости цветовых
    компонент (так мы будем называть интенсивности основных цветов)
    в цифровой технике стали применять числа. Подсчитано, что для корректного
    цветовоспроизведения достаточно выделить по 256 уровней интенсивности
    для каждой из компонент. За нулевой уровень принимается полное отсутствие
    яркости, за 255-й -- полная яркость. Таким образом может быть отображено
    цветов.
    Для короткого обозначения такого представления цветов используется
    аббревиатура RGB (от Red-Green-Blue, названий основных цветов на
    английском языке).
    Если представить себе цветовое пространство, соответствующее
    RGB-модели, то оно будет представлять собой куб в системе координат, где
    в качестве осей выбраны линии возрастания интенсивности компонент,
    точками которого будут являться конкретные цвета.
    Люди с хорошим пространственным воображением, представив себе такой куб,
    могут сразу примерно прикидывать RGB-разложения конкретных цветов.
    RGB-куб выглядит примерно так:
    Представление цвета
    Запись RGB-описания цвета удобно производить в виде так называемого

    RGB-триплета: тройки чисел в шестнадцатеричной системе счисления

    (тогда все числа будут двузначными). Шестнадцатеричная система счисления

    отличается от общепринятой десятичной тем, что в качестве основания

    при разложении чисел используется число 16. ``Дополнительными'' цифрами

    считаются шесть первых букв латинского алфавита: A, B, C, D, E, F.

    Для получения RGB-триплета из имеющихся десятичных значений компонент

    легко произвести с помощью научного калькулятора (если не настоящего, то

    содержащегося в системе MS Windows или аналогичного).

    Получить значения RGB-компонент какого-либо конкретного цвета

    можно с помощью некотроых графических пакетов: диалоговые окна

    выбора цветов нередко содержат подобную информацию. Хорошим примером

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

    пакет Paint Shop Pro компании Jasc Inc.

    Если вы не хотите даже иметь дело с ``ученой цифирью'', вам

    сильно поможет программа Color Manipulation Device, доступная

    в Internet.

    Для пользователей системы XWindow можно порекомендовать программы

    XColorMix и XColorSel, также доступные в Internet.

    к гл Конструкции языка HTML для построения форм

    ...

    использование: предназначен для получения информации от клиента
    и определяет начало и конец формы.
    атрибуты:
  • Обязательные
    ACTION - определяет URI (Universal Resource Identifier-адрес
    или место расположения документа) CGI-скрипта
    METHOD - определяет метод передачи информации скрипту.
    Возможные значения GET или POST.
  • Необязательные
    [ENCTYPE] - определяет тип MIME декодирования информации
    (значение этого атрибута по умолчанию - "application/x-www-form-urlencoded").
    [SCRIPT] - используется для передачи URI скрипта. Язык
    скрипта и интерфейс пользователя при этом не являются частью
    спецификации HTML 3.0
    Важно: Формы не могут быть вложенными!
    Для реализации формы используются следующие теги.

    использование: предназначен для создания различных по своей функциональности
    полей ввода.
    атрибуты:
  • Обязательные:
    TYPE - определяет тип поля формы.
    Допустимые значения:
    TEXT - позволяет символьный ввод.
    PASSWORD - предназначено для "скрытого" ввода
    символов (вводимые символы не отображаются).
    CHECKBOX - поле, позволяющее два состояния ("есть",
    "нет"). Должен применяться с атрибутами NAME и VALUE
    RADIO - поле, позволяющее выбор "один из всех"
    SUBMIT - кнопка инициирующая передачу информации из формы
    обрабатывающему скрипту, определенному в ACTION в соответствии
    с методом,
    определенным атрибутом METHOD.

    RESET - кнопка, сбрасывающая все введенные ранее значения.
    IMAGE - поле позволяющее воспроизвести событие SUBMIT при
    помощи вашего изображения, при этом
    возвращается два значения: name.x = координата
    Х и name.y = координата Y, где Х и Y
    координаты положения курсора мыши на изображении
    в момент щелчка.
    HIDDEN - поле создающее неотображаемое значение.
    RANGE - определяет поле позволяющее ввести
    цифровое значение с определенными допустимыми верхним и нижним
    пределами.

    Используется вместе с атрибутами MAX и
    MIN определяющими область допустимых значений (например: TYPE=RANGE

    MIN=1 MAX=10).

    NAME - значение этого атрибута определяет

    идентификатор поля.

    VALUE - значение этого атрибута определяет

    что будет передано в качестве значения по умолчанию для данного

    поля при инициации формы.

    SRC - определяет URI файла изображения.

    Используется только с типом поля IMAGE.

    [CHECKED] - позволяет установить начальное

    значение поля типа CHECKBOX.

    SIZE - определяет размер поля.

    [MAXLENGTH] - определяет максимальное количество

    символов, допустимое для ввода в поле.

    [ALIGN] - позволяет позиционирование

    Допустимые значения:

  • по вертикали

    TOP - выравнивание по верху.

    MIDDLE - выравнивание по середине.

    BOTTOM выравнивание по низу.

    Эти значения используются только с TYPE=IMAGE.

  • по горизонтали

    [LEFT] - выравнивание слева

    [RIGHT] - выравнивание справа

    [DISABLED] - определяет поле как "read

    only" - только для чтения. Значение в поле не может

    быть изменено пользователем.

    [ERROR] - определяет сообщение об ошибке,

    объясняющее, почему введенное значение в поле не верно.

    атрибуты>...



    использование: предназначен для определения области ввода

    текста. Размер поля определяется атрибутами.

    атрибуты:

    NAME - значение этого атрибута определяет идентификатор

    поля. Возвращается при инициации формы.

    ROWS - определяет количество строк в текстовой

    области.

    COLS - определяет количество столбцов в текстовой

    области.

    [VALUE] - задает значение по умолчанию.

    [DISABLED] - определяет поле как "read only"

    - только для чтения. Значение в поле не может быть изменено пользователем.

    [ERROR] - определяет сообщение об ошибке, объясняющее,

    почему введенное значение в поле не верно.



    использование: предназначен для определения области выбора из

    нескольких значений (меню).

    Атрибуты:

    NAME - значение этого атрибута определяет идентификатор

    поля. Возвращается при инициации формы.

    [SIZE] - определяет количество видимых возможных значений.

    [MULTIPLE] - определяет возможность множественного выбора.

    [DISABLED] - определяет меню как "read only"

    - только для чтения. Значения в меню не может быть выбрано пользователем

    и показывается серым цветом.

    значение

    использование: используется только с
    Пол: -
    мужской -женский








    После инициации формы путем нажатия кнопки "Послать запрос"
    WWW сервер обрабатывает поток
    данных от формы (заменяет все пробелы в именах и значениях на
    символ "+", заменяет все символы с десятичным кодом
    большим 128 на символ "%" и следующим за ним шестнадцатеричным
    кодом символа (например "И" в %С8)).
    Выходной поток примет следующий вид:
    RealName=%CF%E5%F2%F0%EE%E2+%C8%E2%E0%ED+%D1%E8%E4%EE%F0
    %EE%E2%E8%F7&Sex=%CC%F3%E6%F1%EA%EE%E9&Submit=%CF%EE%F1
    %EB%E0%F2%FC+%E7%E0%EF%F0%EE%F1
    В момент передачи управления модулю post-query сервер присваивает
    значения переменным окружения и аргументам командной строки:
    argc = 0. argv =

    SERVER_SOFTWARE = NCSA/1.5.1

    SERVER_NAME = iceman.cnit.nsu.ru

    GATEWAY_INTERFACE = CGI/1.1

    SERVER_PROTOCOL = HTTP/1.0

    SERVER_PORT = 80

    REQUEST_METHOD = POST

    HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,*/*

    PATH_INFO =

    PATH_TRANSLATED =

    SCRIPT_NAME = /cgi-bin/test-cgi

    QUERY_STRING =

    REMOTE_HOST = fwa.cnit.nsu.ru

    REMOTE_ADDR = 193.124.209.74

    REMOTE_USER =

    AUTH_TYPE =

    CONTENT_TYPE = application/x-www-form-urlencoded

    CONTENT_LENGTH = 142
    Результат работы post-query:

    Query Results

    You submitted the following
    name/value pairs:



  • RealName = Петров Иван Сидорович

  • Sex = Мужской

  • Submit = Послать запрос

    И на экране браузера

    Query Results

    You submitted the following name/value pairs:

    RealName = Петров Иван Сидорович

    Sex = Мужской

    Submit = Послать запрос

    Ниже приведен исходный текст программы post-query.
    #include
    #ifndef NO_STDLIB_H
    #include
    #elsechar *getenv();
    #endif
    #define MAX_ENTRIES 10000

    typedef struct {
    char *name;
    char *val;
    } entry;

    char *makeword(char *line, char
    stop);
    char *fmakeword(FILE *f, char
    stop, int *len);
    char x2c(char *what);
    void unescape_url(char *url);
    void plustospace(char *str);
    main(int argc, char *argv[])
    {
    entry entries[MAX_ENTRIES];
    register int x,m=0;
    int cl;
    printf("Content-type:
    text/html%c%c",10,10);
    if(strcmp(getenv("REQUEST_METHOD"),"POST"))
    { printf("This
    script should be referenced with a METHOD of POST.\n");
    printf("If you don't
    understand this, see this "); printf("

    forms overview
    .%c",10);
    exit(1);
    } if(strcmp(getenv("CONTENT_TYPE"),"application/x-www-form-urlencoded"))
    {printf("This script
    can only be used to decode form results. \n");


    exit(1);
    }
    cl = atoi(getenv("CONTENT_LENGTH"));
    for(x=0;cl && (!feof(stdin));x++)
    {m=x;entries[x].val
    = fmakeword(stdin,'&',&cl); plustospace(entries[x].val);
    unescape_url(entries[x].val);
    entries[x].name = makeword(entries[x].val,'=');
    }
    printf("

    Query
    Results

    ");
    printf("You submitted
    the following name/value pairs:%c",10);
    printf(" %c",10);
    for(x=0; x <= m; x++)
    printf("

  • %s = %s%c",entries[x].name,
    entries[x].val,10);
    printf("%c",10);
    }

    Надо отметить, что post- query не обрабатывает имена, поэтому в
    примере они даны на английском языке. Если Вы используете русские
    названия имен, то вы должны обработать имена также как и значения,
    т.е. заменить все символы "+" на пробелы и преобразовать
    шестнадцатеричные коды кириллических символов в сам символ.
    Приведем также исходный текст функций используемых post-query
    char *makeword(char *line,
    char stop) {
    /*
    Предназначена для выделения
    части строки, ограниченной "стоп-символами"*/
    int x = 0,y;
    char *word = (char *) malloc(sizeof(char)
    * (strlen(line) + 1));
    for(x=0;((line[x]) &&
    (line[x] != stop));x++)
    word[x] = line[x];
    word[x] = '\0';
    if(line[x]) ++x;
    y=0;

    while(line[y++] = line[x++]);
    return word;
    }

    char *fmakeword(FILE *f,
    char stop, int *cl) {
    /*
    Предназначена для выделения
    строки,
    ограниченной "стоп-символом" stop,
    из потока f
    длиной cl.
    */
    int wsize;
    char *word;
    int ll;

    wsize = 102400;
    ll=0;
    word = (char *) malloc(sizeof(char)
    * (wsize + 1));

    while(1) {
    word[ll] = (char)fgetc(f);
    if(ll==wsize) {
    word[ll+1] = '\0';
    wsize+=102400;
    word = (char *)realloc(word,sizeof(char)*(wsize+1));
    }
    --(*cl);
    if((word[ll] == stop)
    (feof(f)) (!(*cl))) {
    if(word[ll] != stop)
    ll++;
    word[ll] = '\0';
    return word;
    }
    ++ll;


    }
    }

    char x2c(char *what) {
    /* Предназначена для преобразования
    шестнадцатиричного кода символа в код символа
    */
    register char digit;

    digit = (what[0] >= 'A'
    ? ((what[0] & 0xdf) - 'A')+10 : (what[0] - '0'));
    digit *= 16;
    digit += (what[1] >= 'A'
    ? ((what[1] & 0xdf) - 'A')+10 : (what[1] - '0'));
    return(digit);
    }

    void unescape_url(char
    *url) {

    register int x,y;

    for(x=0,y=0;url[y];++x,++y)
    {
    if((url[x] = url[y])
    == '%') {
    url[x] = x2c(&url[y+1]);
    y+=2;
    }
    }
    url[x] = '\0';
    }

    void plustospace(char
    *str) {
    /*замена символов "+"
    на символ "пробел"*/
    register int x;

    for(x=0;str[x];x++) if(str[x]
    == '+') str[x] = ' ';
    }

    Для демонстрации реализации формы с методом запроса GET воспользуемся
    той же самой формой, что и для метода POST и программой query.
    Для этого изменим значение атрибутов ACTION и METHOD в теге FORM.
    METHOD=GET>
    После инициации формы сервер установит следующие значения для
    переменных окружения и аргументов командной строки:

    argc = 0. argv is =
    SERVER_SOFTWARE = NCSA/1.5.1
    SERVER_NAME = iceman.cnit.nsu.ru
    GATEWAY_INTERFACE = CGI/1.1
    SERVER_PROTOCOL = HTTP/1.0
    SERVER_PORT = 80
    REQUEST_METHOD = GET
    HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
    */*
    PATH_INFO =
    PATH_TRANSLATED =
    SCRIPT_NAME = /cgi-bin/test-cgi
    QUERY_STRING = RealName=%CF%E5%F2%F0%EE%E2+%C8%E2%E0%ED+%D1%E8
    %E4%EE%F0%EE%E2%E8%F7&Sex=%CC%F3%E6%F1%EA%EE%E9&Submit=%CF%EE
    %F1%EB%E0%F2%FC+%E7%E0%EF%F0%EE%F1
    REMOTE_HOST = fwa.cnit.nsu.ru
    REMOTE_ADDR = 193.124.209.74
    REMOTE_USER =
    AUTH_TYPE =
    CONTENT_TYPE =
    CONTENT_LENGTH =

    Как мы видим, выходной поток от формы появился в значении переменной
    QUERY_STRING.
    Результат работы query полностью совпадает с результатом работы
    post-query.

    Процедура установки сервера NCSA

    Для запуска процедуры сборки и установки сервера необходимо в
    корневом каталоге сервера, описанном в предыдущем параграфе, запустить
    утилиту make. Для сборки сервера необходимо указать
    команде make аббревиатуру операционной системы:
    aix3, aix4, sunos, sgi4, sgi5, hp-cc, hp-gcc, solaris, netbsd,
    svr4, linux, next, ultrix, osf1, aux, bsdi
    . Полный список
    поддерживаемых систем можно получить,
    выполнив команду make без параметров. Каждая аббревиатура ассоциирована
    с конкретной операционной системой. Появление дополнительных параметров
    после дефиса указывает на специфику конкретной конфигурации в
    одной и той же ОС. Например, hp-cc и hp-gcc
    указывают на общий тип ОС - HP-UX, однако ориентированы на использование
    разных компиляторов - базового C - компилятора (cc) или GNU C
    (gcc). Для сборки сервера под ОС UnixWare необходимо использовать
    команду make svr4.
    Ряд основных параметров сервера - пути файлов, режимы работы задаются
    по умолчанию на этапе сборки. В случае, если нужна их корректировка
    под конкретные условия, необходимо отредактировать файл src/config.h.
    После сборки сервера необходимо разместить его компоненты в файловой
    системе. Исполняемый модуль сервера httpd размещается
    в каталоге серверных программ - /usr/local/sbin
    или /usr/sbin. Файлы конфигурации, журналы и стандартные
    cgi-программы размещаются в подкаталогах каталога, определяемого
    параметром ServerRoot. Обычно это /usr/local/etc/httpd,
    однако его можно изменить либо изменив параметр HTTPD_ROOT файла
    src/config.h, либо указав ключ -d
    при запуске сервера.
    Например:
    /usr/local/sbin/httpd -d /var/httpd
    В каталоге, определяемом параметром ServerRoot, размещаются три
    подкаталога:
  • conf/ - содержащий файлы конфигурации сервера
  • logs/ - содержащий журналы работы сервера
  • cgi-bin/ - содержащий стандартные cgi-программы,
    поставляемые с сервером.

    Программные пакеты для Apple Macintosh

    Платформа Apple Macintosh издавна славилась своей ориентированностью на графику и настольные издательства. Пользователям доступны пакеты Adobe Photoshop и Adobe Freehand, а также многие другие. К сожалению, автор не имел возможности испытать графические программы для Mac, поэтому список остается неполным.

    Программные пакеты для MS Windows x, MS Windows и MS Windows NT

    Основная масса дизайнеров, работающих в среде MS Windows, предпочитает Adobe Photoshop как средство создания и обработки растровых изображений. Кроме ставших уже легендарными фильтров и подключаемых модулей, Photoshop умеет устранять зазубренности для всех основных примитивов, поддерживает большое количество графических форматов.
    Для создания эффектов с форматом GIF лучше всего подходит программа Gif Construction Set for Windows (GIFCON) компании Alchemy Mindworks. С ее помощью можно делать с GIF-файлами практически все что угодно! На примере GIFCON можно понять, что даже для MS Windows бывают по настоящему хорошие программы.
    Настоящим хитом является пакет CorelXARA компании Corel (Рис. ). Этот пакет использует не растровую, а векторную графику, так же, как и известный шедевр той же компании под названием CorelDRAW!. В отличие от CorelDRAW!, CorelXARA ориентирован именно на Web-дизайнеров. Он умеет устранять зазубренности, имеет множество средств для деформирования. Обладает уникальной возможностью компоновки растровых и векторных данных, позволяя создавать потрясающие эффекты. Последние версии пакета умеют даже создавать анимированные GIF-файлы.
    Программные пакеты для MS Windows x, MS Windows и MS Windows NT

    Рис. П1.1.1: CorelXARA. Потрясающие возможности для Web.
    Для работы с трехмерной графикой очень удобно использовать такие профессиональные (и сложные в изучении) пакеты, как Autodesk 3D Studio и 3D Studio MAX, равно как и более простые пакеты вроде Caligari trueSpace. Компания Caligari (http://www.caligari.com) предлагает также комплект средств для создания трехмерных сцен в формате VRML (Virtual Reality Modelling Language).
    Очень полезной при работе с изображениями в формате GIF оказывается программа gifblast, работающая в среде MSDOS и различных UNIX. Она оптимизирует GIF-файлы, уменьшая их байтовый размер. Уменьшение размера происходит из-за того, что многие производители программ, работающих с файлами в формате GIF, плохо оптимизируют свои продукты.

    Программные пакеты для ОС UNIX

    Для некоторых версий ОС UNIX, таких как SUN Solaris или SGI IRIX существуют версии пакета Adobe Photoshop. Кроме того, в Internet бесплатно доступно несколько бесплатных пакетов для работы с графикой: General Image Manipulating Package (GIMP), XPaint, и т.д. К сожалению, они по своим возможностям пока не сравнимы с коммерческими пакетами для ОС UNIX и MS Windows.

    Программы преобразования форматов

    Для многих популярных форматов данных существуют программы преобразования
    в HTML, позволяющие быстро и эффективно публиковать в Internet уже существующую
    информацию, не прибегая к медленному процессу ручного преобразования.
    Хорошим примером такого типа программ может служить серия Microsoft Internet
    Assistants для всех программ, входящих в пакет Microsoft Office.
    Microsoft Internet Assistant for Word мы уже рассматривали ранее (см. главу
    про редакторы HTML).
    Поиск конвертеров из нужного формата оставляется читателям в качестве
    упражнения на использование Web-браузера.

    Простые массивы

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

    @day = ('a','b');

    $day[3] = 'c';

    Теперь массив day содержит три элемента: ('a','b','c').

    @day = (); или, что то же самое: $#day = -1;

    Теперь массив day пуст.

    (@day, @month, &SomeSub) содержит в себе элементы массива day, за ними
    следуют элементы массива month, а за ними результат выполнения подпрограммы
    SomeSub.
    Пустой массив обозначается (). Массив ((),(),(),()) эквивалентен пустому
    массиву. Последний элемент массива может быть массивом или хэшэм:

    ($a, $b, @c)= split;

    ($a, $b, %c)= @_;

    Любой элемент массива может быть массивом.

    Простые операторы

    Последовательность простых операторов может следовать за отдельным
    модификатором. В Perl-е простыми модификаторами являются:

    if (EXPR)

    unless (EXPR)

    while (EXPR)

    until (EXPR)
    В операторах while и until проверка условия происходит перед выполнением
    тела блока, за исключением одного случая, когда используется do-оператор:

    do {
    $_ = ;
    ...
    } until $_ eq ".\n";
    в котором проверка условия происходит после выполнения блока.
    Операторы цикла, которые будут описаны далее, не будут работать в этой
    конструкции, так как отсутствует метка цикла.

    Протокол HTTP

    Протокол HTTP определяет язык запросов от WWW - клиента к WWW
    - серверу. Сам запрос состоит из следующих компонент:
    <Заголовок>
    <Метод> <Источник / Данные>
    где

    Заголовок - определяет версию
    протокола HTTP и другие служебные параметры;
    Метод - одно из ключевых слов:

    GET - для передачи запросов на выдачу документов
    PUT, POST - для передачи данных от клиента к серверу
    (например, из форм)
    Пример запроса:
    HTTP/1.1

    GET /index.html
    Описывает запрос на получение файла index.html из корневого каталога
    документов сервера.

    Протокол MIME

    Протокол MIME - многоцелевое расширение электронной почты,
    был создан как способ передачи нетекстовой информации: изображений,
    звука, видео в письмах электронной почты. Механизм оказался удачным,
    и его перенесли и в on-line сервисы, в том числе WWW. Здесь MIME
    используется для передачи документов от сервера к клиенту.
    В общем виде MIME основывается на передаче вместе с основными
    данными дополнительной информации, описывающей что это и в каком
    виде передается. Эта дополнительная информация называется заголовок
    MIME
    . Базовой частью заголовка является строка, описывающая
    тип передаваемого сообщения. Формат строки:
    Content-Type: <тип_MIME>
    Перечень типов MIME (т.е. видов передаваемых данных) постоянно
    пополняется и может быть дополнен даже пользователем для описания
    своего собственного вида данных. Формат типа MIME:
    <Тип> / <Подтип> [ ;
    <параметры> ]

    Где <Тип> - определяет общий тип данных:
    Audio - для звуковых данных

    Application - данные, являющиеся входными для какого-либо приложения
    (программы)

    Image - для графических образов
    Message - для сообщения, которое само по себе является MIME -
    документом

    Multipart - для сообщения, состоящего из нескольких MIME - документов

    Text - для текстовых данных в различном виде
    Video - для видеоданных.
    <Подтип> - указывает на специфический формат данных типа
    <Тип>
    Например:
    text/html - текстовые данные в формате HTML
    image/giff - графические данные в формате gifF
    <Параметры> - список параметров, необходимых для интерпретации
    данных.
    Для ведения специфичной обработки файлов различных типов и форматов
    на клиентской и серверной частях поддерживаются списки соответствий
    типов MIME и расширений файлов. Формат записи такого списка:
    <Тип>/<Подтип> <расширение1>
    ... <расширениеN>
    Эти списки сопоставляют всем файлам, имеющим определенные расширения,
    определенные типы MIME.
    Например:
    image/giff gif giff
    text/html html htm
    В первой строке всем файлам с расширением gif и giff приписывается
    тип содержимого image/giff. Если для типа содержимого image/giff
    определены специальные правила обработки (например,
    отображение на экране в определенной области), то так будут обрабатываться
    все файлы с расширениями gif и giff.

    Проверка корректности данных в полях формы

    В Cold Fusion предусмотрен
    механизм проверки корректности заполнения полей формы. Этот механизм
    основан на добавлении в форму дополнительных полей типа HIDDEN
    (скрытые), с именем, составленным из имени поля, значение
    которого нужно проверить и одного из допустимых в Cold
    Fusion суффиксов, задающих контекст проверки.
    В следующей таблице приведен список всех суффиксов используемых
    для проверки:

    Суффикс
    Значение атрибута VALUE
    Описание
    _required
    Текст сообщения об ошибкеПроверяется произведен ли ввод в поле формы.
    _integer
    Текст сообщения об ошибкеПроверяется, является ли значение, введенное пользователем, целым числом.
    _float Текст сообщения об ошибкеПроверяется, является ли значение, введенное пользователем, числом.
    _range MIN = Минимальное_Значение
    MAX = Максимальное_Значение
    Проверяется, находится ли введенное число в определенных границах.
    _date Текст сообщения об ошибкеПроверяется, находится ли введенная пользователем дата в одном из следующих форматов: DD/MM/YY, DD/MM/YYYY, DD/MM (используется текущий год). В качестве разделителя можно, также, использовать тире (т.е. DD-MM-YY).

    Пример
    Ниже приведен фрагмент описания формы, состоящий из двух текстовых
    полей: обязательное для заполнения
    поле FullName и поле типа
    дата Birthday, и для каждого
    из этих полей описано поле типа HIDDEN
    задающее контекст проверки.
    Фамилия Имя Отчество :

    NAME="FullName_required"
    VALUE="Фамилия Имя Отчество
    должны быть заданы!">
    Дата рождения : NAME="Birthday">
    NAME="Birtday_date"
    VALUE="Дата рождения должна
    быть в формате DD/MM/YYYY (например, 20.08.1968)">

    Рамки (фреймы)

    Мощным визуальным средством являются так называемые рамки или фреймы (frames).
    С помощью рамок область отображения браузера может быть разделена
    на отдельные части, содержащие различные документы. При этом возможно
    задание связей между рамками так, что выбор ссылки в одной рамке может
    приводить к отображению запрошенного документа в другой. Это позволяет
    создавать очень удобные в использовании документы (при неправильном
    применении можно также создать и очень неудобные).
    Рамки на сегодняшний день поддерживаются в последних версиях таких браузеров,
    как Netscape Navigator (начиная с версии 2.0) и MS Internet Explorer (версии
    3.0 и выше), но популярность применения
    рамок растет, и похоже, что вскоре к этим браузерам добавятся новые.
    Рамки описываются в специальном HTML-документе, называемом
    Документом Описания Рамок. Этот документ содержит описание
    числа, размеров и положения рамок, а также URL-и их содержимого.
    Нельзя пытаться вписать содержимое рамок в описание,
    оно должно находиться в отдельных документах.
    При описании рамок тег заменяется на тег



    ...

    описания содержимого рамок

    ...



    Тег будет игнорироваться браузером, если перед ним встретятся
    любые теги, в обычном случае встречающиеся внутри тега .
    Теги могут быть вложенными, что позволяет, как Читатель
    увидит далее, создавать очень сложные конструкции.
    Параметры тега могут быть следующими:
    ROWS=``x1,x2,... или x1%,x2%,... или x1*,x2*,...'' - этот параметр
    описывает рамки как строки различной высоты. Высоты рамок задаются
    списком разделенных запятыми значений. Высоты измеряются в точках, процентном
    отношении от общей высоты области отображения, либо как относительные величины.
    Сумма высот всех рамок должна быть равна высоте всей области отображения.
    Если этого не происходит, браузеры сами корректируют значения.
    COLS=``x1,x2,... или x1%,x2%,... или *'' - используется для
    описания рамок как столбцов различной ширины.
    Используется так же, как

    параметр ROWS.

    Примеры:



    задаст две горизонтальные рамки, причем первая (верхняя) будет в три

    раза выше второй (нижней).



    задаст три горизонтальные рамки, причем первая (верхняя) будет иметь

    высоту 100 точек, третья (нижняя) будет иметь высоту 50 точек, а вторая

    (средняя) займет все оставшееся пространство.



    задаст две вертикальные рамки, причем первая (левая) будет иметь

    ширину 70% общей ширины области отображения, а вторая (правая) -- 30%.

    Для задания содержимого рамки используется тег .

    Параметры могут быть следующими:

    SRC - указывает URL документа, который должен быть отображен в рамке. Если параметр не указан, рамка останется пустой.

    NAME - значение этого параметра определяет имя для рамки. Впоследствии по этому имени на рамку можно будет сослаться с помощью параметра TARGET тега .

    SCROLLING - показывает, можно ли проматывать содержимое документа в рамке. Может принимать следующие значения:

    YES - содержимое рамки МОЖЕТ проматываться.

    NO - содержимое рамки НЕ может проматываться.

    AUTO - браузер решает, отображать линейку прокрутки или нет (исходя из длины документа). Это значение иcпользуется по умолчанию.

    NORESIZE - если этот параметр указан, пользователь не сможет изменить размеры рамки. По умолчанию пользователь МОЖЕТ изменять размеры отображаемых рамок (например, таская границу рамки указательным устройством).

    MARGINWIPH - указывает на величину горизонтального отступа внутри рамки.

    MARGINHEIGHT - указывает на величину вертикального отступа внутри рамки.

    Пример:


    MARGINWIDTH=5>

    дает рамке имя myframe1 и отображает в ней файл file1.html,

    причем линейка прокрутки не отображается, ширина горизонтального отступа

    устанавливается в 5 точек, и пользователь может свободно менять размеры


    рамки.

    Более полный пример:























    соответствует примерно следующей раскладке рамок в области отображения:

    Рамки (фреймы)

    Рис. 2.2.2: Вот так будут располагаться рамки из примера

    Что же происходит, если браузер не понимает рамок?

    Пользователь видит абсолютно чистый экран и не может добраться до нужной

    ему информации.

    Как сделать так, чтобы такая ситуация не возникала?

    Разработчики расширений предусмотрели такую ситуацию и придумали тег,

    содержимое которого никогда не отображается в браузере, понимающем рамки,

    тогда как ``глупый'' браузер, увидя незнакомый тег, честно отобразит его

    содержимое без применения каких-либо хитростей.

    Такой тег называется
    <br> Внутри него рекомендуется<br><br> располагать ссылки на документы, не содержащие рамок.<br><br> Для организации связей между рамками разработчики предусмотрели<br><br> параметр TARGET для тега <A>. Он также может применяться<br><br> в тегах <BASE>, <AREA> и <FORM>.<br><br> []<br><br> []<br><br> []<br><br> <h1>Расширения MS Internet Explorer</h1> Компания Microsoft оснастила свой продукт очень сложными эффектами<br> и возможностями. Примеры: плавающие рамки, ``летающий текст'', встраиваемые компоненты<br> ActiveX. К сожалению, большинство дополнительных возможностей программы<br> Internet Explorer тесно связано с использованием Microsoft Windows, и являются<br> непереносимыми. Так же как и о расширениях Navigator, читайте фирменные<br> руководства по расширенному языку HTML на узле<br><br> <h1>Расширения Netscape Navigator</h1> Расширения Netscape Navigator в массе своей нашли отражение в проекте<br> стандарта HTML 3.2. Тем не менее, компания Netsacape Communications Corp<br> продолжает оснащать свой браузер все новыми<br> и новыми возможностями. Мы не будем их здесь описывать так как браузер<br> постоянно совершенствуется и меняется, поэтому рекоммендуется просто<br> получать информацию о всех новейших возможностях прямо с узла .<br><br> <h1>Редакторы HTML</h1> Хотя все без исключения HTML-документы могут быть созданы при помощи простого<br> текстового редактора, в настоящее время широко используются различные<br> специализированные программы для редактирования документов для Web.<br> Большинство существующих редакторов HTML представляет собой простые<br> ASCII-редакторы, дополненные возможностями, облегчающими жизнь создателям<br> Web-документов, например, диалоговыми окнами вставки изображений. К таким<br> редакторам относятся программы Webber, DarekWare HTML Author для системы Windows,<br> asWedit, xHTML для UNIX и другие.<br> Вторая категория, называемая ``полу-WYSIWYG'' (What You See Is What You Get),<br> включает программы, обеспечивающие просмотр конечного вида документа по мере<br> его подготовки. При этом документ отображается встроенным браузером редактора<br> в дополнительном окне. К этой категории относится, например, WebEdit для<br> Windows.<br> Третья и самая популярная среди начинающих Web-дизайнеров категория --<br> полные-WYSIWYG редакторы. Они обеспечивают полное (максимальное) приближение<br> внешнего вида редактируемого документа к его конечному виду в браузере.<br> При этом пользователю совершенно не нужно разбираться в тегах языка HTML.<br> Очень часто такие редакторы встраиваются непосредственно в Web-браузеры.<br> Примеры:<br> <li> Netscape Navigator Gold для всех систем. Позволяет набирать<br> документ прямо в окне браузера.<br> <li> Microsoft FrontPage. Решение компании Microsoft. Обеспечивает<br> создание документов в режиме WYSIWYG.<br> <li> SoftQuad HoTMetaL для Windows и Sun Solaris for Sparc. Несмотря<br> на кажущуюся бедность, очень хорошо сделаный редактор.<br> <li> Microsoft Internet Assistant for Word - продукт из серии<br> Internet Assistant компании Microsoft. Практически незаменим для<br> тех, кто привык работать с Microsoft Word или просто хочет перенести<br> в Web уже существующие документы в формате Word.<br> <li> W3 Amaya - новая разработка W3 Consortium. Представляет собой<br> спарку редактора и браузера, подобную Netscape Navigator Gold.<br> У разных подходов есть различные преимущества и недостатки.<br> <br> Знатоки и ценители системы LaTeX никогда не будут использовать<br><br> WYSIWYG-редакторы для подготовки своих страниц, также как и многие<br><br> опытные разработчики документов для Web. Дело в том, что за внешней<br><br> простотой и красотой визуальных средств разработки скрывается некоторая<br><br> недостаточность в функциональных возможностях и неоправданная избыточность<br><br> информации, добавляемой редактором в документ. Кроме того, теряется<br><br> контроль над использованием расширений.<br><br> <img src="msiaw.gif" alt="Редакторы HTML"><br><br> <b>Рис. П1.3.2:</b> Microsoft Internet Assistant for Word. Идеальное решение для любителей Word<br><br> Автор считает разумной достаточностью использование опытными пользователями<br><br> редакторов принадлежащих к первой категории, так как присущий им сервис<br><br> еще не перешел ту невидимую черту, когда он еще не кажется навязчивым.<br><br> Для тех же, кто интенсивно работает в Microsoft Word, лучшим решением<br><br> будет, несомненно, являться Microsoft Internet Assistant for Word.<br><br> <h1>Регулярные выражения</h1> Perl позволяет использовать регулярные выражения.<br> Для того чтобы пояснить, что же представляет из себя регулярное выражение<br> приведем несколько примеров:<br><br> /SWAP.*/ - соответствуют все слова начинающиеся со SWAP и заканчивающихся<br> произвольным набором символов. Точка обозначает произвольный символ, звездочка -<br> то, что символ, стоящий перед ней, входит в слово 0 и более раз. Все метасимволы,<br> которые будут описаны ниже, бозначают вхождение того, что стоит перед ними.<br><br> /\w*/ - соответствуют слова состоящие только из алфавитных, цифровых<br> символов и символа подчерк. \w - соответствует алфавитным, цифровым<br> символам и символу подчерк, звездочка - тому, что эти символы могут входить<br> произволное количество раз.<br> Здесь мы приведем<br> только основные метасимволы. Для более подробной информации смотрите<br> соответствующие страницы man по Perl.<br> ?<br> * соответствует 0 или более вхождений<br> + соответствует 1 или более вхождений<br> ? соответствует 1 или 0 вхождений<br> {n} соответствует ровно n вхождений<br> {n,} соответствует по крайней мере n вхождений<br> {n,m} соответствует по крайней мере n,<br> но не более m вхождений<br> Метасимвол * эквивалентен {0,}, + эквивалентен<br> {1,} и ? эквивалентен {0,1}. Ограничений на величину m и n<br> нет. Эта стандартная конструкция работает в ``жадном'' режиме, то есть:<br> регулярному выражению a.*b будет соответствовать всевозможный набор слов начинающихся<br> с символа a и кончающихся символом b, в том числе слова типа abcab. В таких<br> словах есть подпоследовательности символов, которые также удовлетворяют условиям<br> регулярного выражения. Если после каждого из описанных метасимволов поставить знак<br> ?, то подобные последовательности будут опускаться.<br> Шаблоны обрабатываются как строка в двойных кавычках, поэтому приведенные ниже<br> последовательности также будут обрабатываться:<br> ?<br> \l - передвижение на символ вниз<br> \u - передвижение на символ вверх<br> А также все перечисленные ранее бакслэш-последовательности.<br> В Perl-е определены также:<br> ?<br> \w - соответствуют алфавитные и цифровые<br> <br> символы а также символ подчерк<br><br> \$W - соответствуют все символы не входящие<br><br> во множество символов w<br><br> \s - символы пробела, табуляции, возврата каретки<br><br> \S - все символы не входящие во множество символов<br><br> s<br><br> \d - цифровые символы<br><br> \D - нецифровые символы<br><br> Обратите внимание, что \w отмечает только отдельные<br><br> символы, а не все слово. Чтобы отметить все слово нужно использовать \w+.<br><br> Также определены следующие команды:<br><br> ?<br><br> \b - соответствуют границы слова<br><br> \B - соответствуют не-границы слова<br><br> \A - соответствуют только начало строки<br><br> \Z - соответствуют только конец строки<br><br> При использовании конструкции типа ( ... ), \<digit> подставляет<br><br> подстроку из скобок с номером digit. Можно использовать скобки для<br><br> отделения подшаблона. Если в скобках имеется более, чем 9 подстрок, то<br><br> переменные $10, $11, ... содержат соответствующие подстроки.<br><br> $+ возвращает то, чему соответствует последняя конструкция в скобках. $&<br><br> возвращает подставленную строку. $` возвращает все перед подставленной<br><br> строкой, $' возвращает все после подставленной строки.<br><br> $_ = 'abcdefghi';<br><br> /def/;<br><br> print "$`:$&:$'\n"; - напечатает abc:def:ghi<br><br> На этом мы закончим описание регулярных выражений, для более подробной<br><br> информации читайте manual page.<br><br> <h1>Рекомендуемые графические программные пакеты</h1> При подготовке графических материалов для WWW можно применять любые программы, однако некоторые графические пакеты особенно для этих целей удобны либо имеют уникальные свойства, облегчающие работу Web-иллюстраторам.<br><br> <h1>Сценарии</h1> В состав специфики конкретной БД входят как технологические основы,<br> такие как тип СУБД, вид интерфейсов, связи между таблицами, ограничения целостности, так<br> и организационные решения, связанные с поддержкой актуальности баз данных и обеспечением доступа к ней.<br> При обеспечении WWW-доступа к существующим БД, возможен<br> ряд путей - комплексов технологических и организационных решений. Практика использования WWW-технологии<br> для доступа к существующим БД предоставляет широкий спектр технологических<br> решений, по разному связанных между собой - перекрывающих, взаимодействующих<br> и т.д. Выбор конкретных решений при обеспечении доступа зависит от специфики конкретной СУБД и от ряда других факторов,<br> как то: наличие специалистов, способных с минимальными издержками освоить определенную<br> ветвь технологических решений, существование других БД, WWW-доступ к которым<br> должен осуществляться с минимальными дополнительными затратами и т.д.<br> WWW - доступ к существующим базам данных может осуществляться по одному из трех основных сценариев.<br> Ниже дается их краткое описание и основные характеристики.<br><br> <h1>СЕРВЕР NCSA</h1> Национальный Центр по Суперкомпьютерным Приложениям (NCSA) Иллинойского<br> университета стал второй организацией после ЦЕРН, интенсивно взявшейся<br> за развитие WWW - технологии. Семейство ПО WWW - серверов NCSA<br> прошло длинный путь развития. Последние версии поддерживают все<br> современные возможности, включая виртуальные узлы, управление<br> доступом, параллельную обработку запросов и т.п.<br><br> <h1>Шрифты</h1> Другими средствами шрифтового оформления текста являются выделения<br> курсивом и <b>жирным</b> шрифтом. Таким способом очень удобно<br> выделять отдельные слова в тексте, а также, создавать заголовки. Например,<br> очень удобно заголовки первого и второго уровней оформлять с помощью тегов<br> <Hn>, а заголовки третьего уровня выделить жирным шрифтом. Выделение<br> курсивом осуществляется с помощью тега <I> (от слова Italic),<br> а жирным шрифтом -- с помощью тега <B> (от слова Bold).<br> В HTML есть также понятие emphasis - обобщенное выделение.<br> Оформляется оно с помощью тега <EM>...</EM>. Такое выделение - средство<br> описания логической структуры документа. Обычно выделенный таким способом текст отображается курсивом.<br> Другим средством логического выделения можно считать тег<br><br> <STRONG>...</STRONG><br><br> Он используется для усиления участков текста. Содержимое тега обычно отображается жирным шрифтом.<br> Изменить размеры и цвет шрифтов можно с помощью тега<br><br> <FONT параметры>...</FONT><br><br> Параметры могут быть следующими:<br> <b>SIZE=``value или value''</b> - задает абсолютный или относительный размер шрифта. Относительный размер задается по отношению к базовому размеру (см. далее). Диапазон принимаемых значений -- от одного до семи.<br> <b>COLOR</b> - указывает цвет для текста.<br> <b>FACE</b> - расширение Microsoft Internet Explorer и Netscape Navigator. Позволяет задать гарнитуру (или список гарнитур, из имеющихся в системе шрифтов будет выбран наиболее подходящий) для текста. Конечный результат зависит от количества и разнообразия шрифтов, установленных в системе. Пример:<br> <FONT FACE="Arial, Times Roman"><br> Пример выделения текста другой гарнитурой.<br> </FONT><br> Базовый размер шрифта для всего документа можно задать с помощью тега<br><br> <BASEFONT параметры>. Параметр всего один:<br> <b>SIZE</b> - задает размер шрифта.<br> Для того чтобы действительно привлечь пользователя, иногда может потребоваться<br> мигающий текст. Заставить текст мигать можно, заключив его внутрь тега<br><br> <BLINK>...</BLINK><br><br> Пользоваться этим тегом надо с некоторой осторожностью, так как не всегда приятно наблюдать мигающие объекты.<br><br> <h1>Символьные ссылки</h1> Мы рассмотрели, что происходит, если величина, используемая в качестве ссылки, не<br> была определена ранее. Что же происходит, если она уже определена и не является<br> жесткой ссылкой? В таком случае она обрабатывается как символьная ссылка. То есть<br> значение скаляра рассматривается как имя переменной, а не прямая ссылка на<br> переменную.<br> ?<br> $name = "foo";<br> $$name = 1; - то же самое, что $foo = 1;<br> ${$name} = 2; - то же самое, что $foo = 2;<br> ${$name x 2 } = 3; -то же самое, что $foofoo = 3;<br> $name->[0] = 4; -то же самое, что $foo[0] = 4;<br> @$name = (); - обнуляет массив @foo<br> &$name(); - вызывает &foo<br><br> <h1>Символьные унарные операторы</h1> Унарный ! означает логическое отрицание. Унарный минус, в случае числового<br> значения переменной, обозначает обычное арифметическое отрицание. Если операндом<br> является идентификатор, то возвращается строка, состоящая из знака минус и<br> идентификатора. Если строка начинается со знака + или -, то возвращается<br> строка, начинающаяся с противоположного знака.<br> Унарная тильда ``~'' обозначает побитовое отрицание.<br><br> Унарный плюс не имеет влияния даже на строки. Он используется для отделения<br> имя функции от выражения заключенного в скобки, которое иначе рассматривается<br> как список аргументов.<br> rand (10) * 20; - (rand10) * 20;<br> rand +(10) * 20; - rand(10 * 20);<br> Унарный бэкслэш ``'' обозначает ссылку на то, что стоит за ним.<br><br> <h1>Скалярные величины</h1> Скалярные переменные могут содержать различные простые типы данных, такие как<br> числа, строки или ссылки. Они не могут содержать сложные типы, но могут содержать<br> ссылку на массив или хэш. В булевском контексте скаляр принимает значение<br> TRUE, если он содержит не нулевое число или не пустую строку.<br> В Perl существует несколько способов записи чисел:<br> ?<br> 12345<br> 12345.67<br> .23E-10<br> 0xffff шестнадцатеричная запись<br> 0377 восьмеричная запись.<br> 1_234_567_890 подчерк для удобства чтения.<br> Строки заключаются в одинарные или двойные кавычки. Использование кавычек<br> в Perl такое же как в bourne shell-е: строка в двойных кавычках<br> обрабатывается и вместо переменных подставляются их значения, а также<br> обрабатываются бакслэш-последовательности, строки в одинарных кавычках<br> рассматривается просто как последовательности символов. Используются также:<br> ?<br> \t табуляция<br> \n перевод строки<br> \r возврат каретки<br> \b пробел<br> \e символ Escape<br> \033 восьмеричный формат<br> \x1b шестнадцатеричный формат<br> \c[ управляющая последовательность (control)<br> \a сигнал (alarm)<br> \f переход на следующую страницу<br><br> <h1>Состав дистрибутива сервера NCSA Варианты дистрибуции</h1> Сервер NCSA поставляется как в виде исходных текстов, так и в<br> виде исполняемых модулей для различных операционных систем. Распакованный<br> дистрибутив размещается в каталоге <b>httpd_<номер версии>-<модификация><br> </b>где <номер версии> - версия программного обеспечения<br> WWW сервера, <модификация> - модификация текущей версии.<br> Например:<br> <b>httpd_1.5.1-export</b><br> В этом каталоге содержатся следующие файлы и подкаталоги:<br> <b>README</b> - текстовый файл для первоначального ознакомления.<br> Содержит список всех значимых файлов и каталогов с объяснением<br> их назначения.<br> <b>COPYRIGHT</b> - текстовый файл с описанием лицензионного<br> соглашения на использование ПО WWW - сервера NCSA.<br> <b>CHANGES</b> - текстовый файл со списком изменений между<br> различными версиями ПО сервера.<br> <b>Makefile</b> - файл верхнего уровня для утилиты make.<br> Содержит список команд, которые необходимо выполнить для сборки<br> и установки ПО WWW - сервера.<br> <b>src</b> - каталог с исходными текстами ПО сервера.<br> <b>conf</b> - каталог, содержащий примеры конфигурационных<br> файлов ПО сервера.<br> <b>icons</b> - каталог, содержащий иконки, необходимые<br> для работы сервера.<br> <b>cgi-bin</b> - каталог, содержащий примеры CGI - программ.<br> <b>cgi-src</b> - каталог, содержащий исходные тексты примеров<br> CGI - программ.<br> <b>support</b> - каталог с программным обеспечением, не<br> являющимся часью ПО сервера, но полезным при работе с ним.<br><br> <h1>Состав</h1> Структурно, WOW<br> состоит из ряда исполняемых программ,<br> соответствующих спецификации CGI<br> и набора пакетов PL/SQL<br> (см. рис.<br> 7-2).<br> <img src="wow2.gif" alt="Состав"><br> Пакет <b>htp</b><br> содержит процедуры и функции,<br> облегчающие формирование HTML<br> - документа. Пакет<br> <b>htf</b><br> содержит описание различных констант<br> и функций, используемых<br> при формировании HTML - документов.<br><br> <h1>Составные операторы</h1> if (EXPR) BLOCK<br><br> if (EXPR) BLOCK else BLOCK<br><br> if (EXPR) BLOCK eslif (EXPR) BLOCK else BLOCK<br><br> LABEL: while (EXPR) BLOCK<br><br> LABEL: while (EXPR) BLOCK continue BLOCK<br><br> LABEL: for (EXPR; EXPR; EXPR;...) BLOCK<br><br> LABEL: foreach VAR(LIST) BLOCK<br><br> LABEL: BLOCK continue BLOCK<br> В отличие от C и Pascal все определяется в терминах блоков, а не операторов:<br> то есть фигурные скобки являются обязательными.<br> Метка состоит из идентификатора и двоеточия. Она ставится в начале цикла и<br> служит указателем для операторов цикла next, last и redo (их описание смотри<br> ниже). Если это continue блок, то он выполняется перед тем, как условие будет<br> проверено снова, как третья часть for оператора в C. Правильность условия<br> может зависеть от результатов выполнения блока, например:<br> $i = 1;<br> while ($i < 10){<br> ...<br> } continue {<br> $i++;<br> }<br> или, что тоже самое:<br> for ($i = 1; $i < 10; $i++;) {<br> ...<br> }<br> Foreach цикл присваивает переменной по очереди каждое значение из списка и выполняет над ней все команды из блока. Переменная является локальной и существует только в пределах данного цикла. Если список является массивом, то его<br> можно изменять в цикле, посредством операций над переменной. Если переменная<br> опускается, то по умолчанию в качестве нее используется $_.<br> foreach \$elem(@elements) \{\$elem = \$elem * 2;\}<br> -- цикл по всему содержимому<br> массива @items.<br> Пример:<br> for ((1,2,3,4,5,6,7,8,9,10,'boom')) {<br> print $_,"\n"; sleep(1); }<br> for (1..15) { print "Merry Christmas\n"; }<br> foreach $item (split(/[\/\*\\n]/,$ENV{'TERMCAP'})) {<br> print "Item: $item\n"; }<br> Блок семантически эквивалентен циклу, который исполняется один раз. Поэтому в<br> него можно включать операторы контроля цикла, чтобы выйти из него или запустить<br> его еще раз.<br><br> <h1>Создание информационного хранилища</h1> В этом варианте предлагается использование технологии,<br> получившей название "информационного хранилища" (ИХ). Для<br> обработки разнообразных запросов, в том числе и от WWW-сервера, используется промежуточная БД высокой производительности<br> (см. ). Информационное наполнение промежуточной БД осуществляется<br> специализированным программным обеспечением на основе содержимого<br> основных баз данных (см. рис.1-4).<br> <li>Этап 1 - перегрузка данных<br> <img src="classfc4.gif" alt="Создание информационного хранилища"><br> <li>Этап 2 - обработка запросов<br> <img src="classfc5.gif" alt="Создание информационного хранилища"><br> Данный вариант свободен ото всех недостатков предыдущей схемы.<br> Более того, после установления синхронизации данных информационного хранилища с основными БД<br> возможен перенос пользовательских интерфейсов на информационное хранилище, что существенно<br> повысит надежность и производительность, позволит организовать распределенные рабочие места.<br> Несмотря на кажущуюся громоздкость такой схемы, для задач обеспечения WWW-доступа<br> к содержимому нескольких баз данных накладные расходы существенно<br> уменьшаются.<br> Основой повышения производительности обработки WWW-запросов<br> и резкого увеличения скорости разработки WWW-интерфейсов является использование внутренних языков СУБД информационного<br> хранилища для создания гипертекстовых документов.<br> Для загрузки содержимого основной БД в информационное хранилище<br> могут использоваться все перечисленные решения (языки программирования, интегрированные<br> средства), а также специализированные средства перегрузки, поставляемые<br> с SQL-сервером и продукты поддержки информационных хранилищ.<br><br> <h1>Специальные символы</h1> Некоторые общеупотребимые символы не имеют своих мест на клавиатуре,<br> например значок ©. Другие же трактуются браузерами как<br> командные последовательности, как, например, угловые скобки, в которые<br> заключаются теги языка HTML. Очевидно, должен быть способ набора таких<br> символов в текст. В HTML существует набор макропоследовательностей,<br> которые превращаются браузерами в соответствующие им ``непечатные''<br> символы. Очевидно, что не во всех шрифтах есть полный набор символов,<br> и браузер не во всех ситуациях будет способен их корректно отобразить.<br> Но для полного описания документа все особые символы должны быть<br> правильно закодированы.<br> Приведем список специальных символов и соответствующие им<br> макрокоманды языка.<br> <table border=1><br> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP><br> & </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &amp; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Амперсанд </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>< </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &lt; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Левая угловая скобка </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>> </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &gt; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Правая угловая скобка </td></tr> </table><br> <br>Table 2.2.1: Специальные символы<br> Полный перечень всех специальных символов вместе с их кодами приведен<br> в Приложении П1 к отчету.<br> <br> <table border=1><br> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP><br> - </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#09; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Горизонтальная табуляция </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>- </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#10; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Перевод строки </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>- </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#13; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Возврат каретки </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP></td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#32; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Пробел </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>^ </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#94; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Крышка </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>_ </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#95; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Подчерк </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>` </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#96; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Мягкое ударение </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>{ </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#123; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Левая фигурная скобка </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#124; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Вертикальная черта </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>} </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#125; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Правая фигурная скобка </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>~ </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#126; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Тильда </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP></td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#160; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Неразрывный пробел </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &nbsp; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>? </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#161; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Перевернутый восклицательный знак </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>c </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#162; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Значок цента </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>?</td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#163; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Фунт стерлингов </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>Y</td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#165; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Йена </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>§</td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#167; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Параграф </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>? </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#168; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Умляут (dieresis) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>©</td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#169; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Символ копирайта </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &copy; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#171; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Левая кириллическая кавычка </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#172; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Значок отрицания </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>- </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#173; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Дефис </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>R </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#174; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Зарегистрированная торговая марка </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP><br> ? </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#175; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Акцент (Macron accent) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#176; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Градус </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#177; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Плюс-минус </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#178; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Квадрат </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#179; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Куб </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>? </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#180; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Акцент (Accute accent) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#181; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Микро (мю) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>¶</td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#182; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Абзац </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#183; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>? </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#184; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Цедилла </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#185; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Первая степень </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#187; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Правая кириллическая кавычка </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>1/4 </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#188; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Четверть </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>1/2 </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#189; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Половина </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>3/4 </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#190; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Три четверти </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>? </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#191; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Перевернутый знак вопроса </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>A </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#192; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> A с акцентом (grave) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Agrave; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>A </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#193; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> A с акцентом (acute) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Aacute; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>A </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#194; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> A с акцентом (circumflex) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Acirc; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>A </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#195; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> A с акцентом (tilde) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Atilde; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>A </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#196; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> A с акцентом (umlaut) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Auml; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>A</td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#197; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Ангстрем </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Aring; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>?</td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#198; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> ?дифтонг </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &AElig; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>C </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#199; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавная C с цедиллой </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Ccedil; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>E </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#200; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное E с акцентом (grave) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Egrave; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>E </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#201; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное E с акцентом (acute) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Eacute; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>E </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#202; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное E с акцентом (circumflex) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Ecirc; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>E </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#203; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное E с акцентом (umlaut) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Euml; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>I </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#204; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное I с акцентом (grave) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Igrave; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>I </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#205; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное I с акцентом (acute) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Iacute; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>I </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#206; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное I с акцентом (circumflex) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Icirc; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>I </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#207; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное I с акцентом (umlaut) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Iuml; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>N </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#209; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное N с акцентом (tilde) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Ntilde; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>O </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#210; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное O с акцентом (grave) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Ograve; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP><br> O </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#211; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное O с акцентом (acute) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Oacute; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>O </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#212; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное O с акцентом (circumflex) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Ocirc; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>O </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#213; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное O с акцентом (tilde) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Otilde; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>O </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#214; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное O с акцентом (umlaut) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Ouml; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#215; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Умножение </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>O</td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#216; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное O с акцентом (slash) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Oslash; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>U </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#217; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное O с акцентом (grave) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Ugrave; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>U </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#218; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное U с акцентом (acute) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Uacute; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>U </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#219; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное U с акцентом (circumflex) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Ucirc; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>U </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#220; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное U с акцентом (tilde) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Utilde; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>Y </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#221; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Заглавное Y с акцентом (acute) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &Yacute; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>?</td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#223; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Малое острое s (sz ligature) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &sz; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>a </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#224; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> a с акцентом (grave) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &agrave; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>a </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#225; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> a с акцентом (acute) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &aacute; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>a </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#226; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> a с акцентом (circumflex) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &acirc; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>a </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#227; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> a с акцентом (tilde) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &atilde; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>a </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#228; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> a с акцентом (umlaut) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &uml; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>a</td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#229; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> a с акцентом (ring) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &aring; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>?</td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#230; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> ?(ae ligature) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &aelig; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>c </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#231; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> c с акцентом (цедилла) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &ccedil; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>e </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#232; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> e с акцентом (grave) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &egrave; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>e </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#233; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> e с акцентом (acute) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &eacute; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>e </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#234; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> e с акцентом (circumflex) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &ecirc; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>e </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#235; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> e с акцентом (umlaut) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &euml; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>i </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#236; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> i с акцентом (grave) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &igrave; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>i </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#237; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> i с акцентом (acute) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &iacute; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>i </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#238; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> i с акцентом (circumflex) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &icirc; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>i </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#239; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> i с акцентом (umlaut) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &iuml; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>n </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#241; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> n с акцентом (tilde) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &ntilde; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>o </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#242; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> o с акцентом (grave) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &ograve; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>o </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#243; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> o с акцентом (acute) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &oacute; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>o </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#244; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> o с акцентом (circumflex) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &ocirc; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>o </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#245; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> o с акцентом (tilde) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &otilde; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>o </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#246; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> o с акцентом (umlaut) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &ouml; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#247; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> Деление </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>o</td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#248; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> o с акцентом (slash) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &oslash; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>u </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#249; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> u с акцентом (grave) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &ugrave; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>u </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#250; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> u с акцентом (acute) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &uacute; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>u </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#251; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> u с акцентом (circumflex) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &ucirc; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>u </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#252; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> u с акцентом (umlaut) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &uuml; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>y </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#253; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> y с акцентом (acute) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &yacute; </td></tr> <tr><td VALIGN=BASELINE ALIGN=LEFT NOWRAP>y </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &#255; </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> y с акцентом (umlaut) </td><td VALIGN=BASELINE ALIGN=LEFT NOWRAP> &yuml; </td></tr> </table><br> []<br> []<br> []<br><br> <h1>Спецификация CGI</h1> CGI определяет 4 информационных потока.<br> <li>Переменные окружения<br> <li>Стандартный входной поток<br> <li>Стандартный выходной поток<br> <li>Командная строка<br> <img src="cgi.gif" alt="Спецификация CGI"><br> Рисунок 4-2. CGI-интерфейс.<br><br> <h1>Спецификация процедур пакета htp</h1> <table border=1><br> <tr><td>procedure title(ctitle in varchar2)</td><td> - выводит название<br> документа (теги <u><TITLE></u>)<br> <tr><td>procedure htitle(ctitle in varchar2)</td><td> - выводит название<br> документа и повторяет его в заголовке первого уровня (теги <u><TITLE</u>>,<br> <u><H1></u>)<br> <tr><td>procedure header(nsize in integer, cheader in varchar2)</td><td>- выводит заголовок уровня nsize<br> (теги <u><H1></u><br> ... <u><H6></u>)<br> <tr><td>procedure url(curl in varchar2, cname in varchar2)</td><td>- формирует cname как гипертекстную связь, указывающую<br> на curl (теги<br> <u><A HREF></u>).<br> <tr><td>procedure gif(curl in varchar2)</td><td>- включает в документ картинку,<br> путь до которой curl (теги <u><IMG></u>).<br> <tr><td>procedure gif(curl in varchar2, calign in varchar2) </td><td>-<br> включает в документ картинку,<br> путь до которой curl с выравниванием, определяемым<br> параметром calign (теги <u><IMG></u>).<br> <tr><td>procedure bold(ctext in varchar2)</td><td>- выводит текст ctext<br> жирным шрифтом (теги<br> <u><B></u>).<br> <tr><td>procedure italic(ctext in varchar2)</td><td>- выводит текст ctext шрифтом italic (теги<br> <u><I></u>)<br> <tr><td>procedure item(cval in varchar2)</td><td>- выводит cval как элемент списка (теги <u><ITEM></u>).<br> <tr><td>procedure formOpen(curl in varchar2)</td><td> - создает форму<br> с действием curl (теги <u><FORM></u>).<br> <tr><td>procedure formHidden(cname in varchar2, cvalue in varchar2)</td><td>- создает скрытое поле формы для хранения значения cvalue<br> переменной с именем cname.<br> <tr><td>procedure formPassword(cname in varchar2),<br> procedure formPassword(cname in varchar2, cvalue in varchar2)</td><td>- создает поле формы для ввода значения переменной - пароля<br> с именем cname<br> и значением по умолчанию cvalue.<br> <tr><td>procedure formField(cname in varchar2, nsize in integer),<br>procedure formField(cname in varchar2),<br>procedure formField(cname in varchar2, cvalue in varchar2)</td><td>- создает поле формы для ввода значения переменной с именем<br> cname<br> длиной nsize<br> со значением по умолчанию cvalue.<br> <tr><td>procedure formText(cname in varchar2, nrow in integer, ncol<br> in integer)</td><td> - создает<br> многострочное поле формы (длиной ncol,<br> высотой nrow)<br> для ввода значения переменной с именем cname.<br> <tr><td>procedure formCheckbox(cname in varchar2)</td><td> - создает<br> элемент checkbox для ввода<br> значения логической переменной cname.<br> <tr><td>procedure formRadio(cname in varchar2, cval in varchar2)</td><td>- создает элемент radiobutton<br> для ввода одного из значений cval<br> переменной cname.<br> <tr><td>procedure formSelectOpen(cname in varchar2)</td><td>- создает список значений для переменной с именем cname.<br> <tr><td>procedure formSelectOption(cval in varchar2)</td><td>- добавляет значение cval<br> в список значений переменной,<br> описанной в formSelectOpen.<br> <tr><td>procedure formSelectClose</td><td>- заканчивает список значений,<br> открытый formSelectOpen.<br> <tr><td>procedure formDo(cname in varchar2)</td><td>- создает кнопку типа <u>SUBMIT</u><br> текущей формы с именем cname.<br> <tr><td>procedure formDo</td><td> -<br> создает кнопку типа <u>SUBMIT</u><br> текущей формы с именем 'Submit'.<br> <tr><td>procedure formUndo(cname in varchar2)</td><td>- создает кнопку типа <u>RESET</u><br> текущей формы с именем cname.<br> <tr><td>procedure formUndo</td><td>- создает кнопку типа <u>RESET</u><br> текущей формы с именем 'Reset'.<br> <tr><td>procedure formClose</td><td>- закрывает текущую форму.<br> <tr><td><b>Процедуры вывода:</b><br> <tr><td>procedure print (cbuf in varchar2),<br>procedure print (dbuf in date),<br>procedure print (nbuf in number)</td><td>- выводят значение различных типов.<br> <tr><td><b>Синонимы для процедуры print<br> - p:<br> <tr><td>procedure p (cbuf in varchar2),<br>procedure p (dbuf in date),<br>procedure p (nbuf in number). </td><td> </td> <tr><td><b>Процедуры, выводящие постоянные<br> значения:</b><br> <tr><td>procedure line</td><td> - разделительная<br> линия (тег <u><HR></u>).<br> <tr><td>procedure para</td><td> - начало<br> параграфа (тег <u></u>).<br> <tr><td>procedure nl</td><td> - перевод<br> строки (тег <u><BR></u>).<br> <tr><td>procedure item</td><td> - элемент списка (тег <u><LI></u>).<br> <tr><td>procedure ulistOpen</td><td>- начало ненумерованного списка (<u>тег </u>).<br> <tr><td>procedure ulistClose</td><td>- окончание ненумерованного списка (тег <u></u>).<br> <tr><td>procedure olistOpen </td><td>-<br> начало нумерованного списка (тег <u></u>).<br> <tr><td>procedure olistClose</td><td>- окончание нумерованного списка (тег <u></u>).<br> <tr><td>procedure dlistOpen</td><td>- начало списка определений (тег <u><DL></u>).<br> <tr><td>procedure dlistClose</td><td>- окончание списка определений (тег <u></DL></u>).<br> <tr><td>procedure dterm</td><td> - термин<br> списка определений (тег <u><DT></u>).<br> <tr><td>procedure ddef</td><td> - определение<br> термина (тег <u><DD></u>).<br> <tr><td>procedure preOpen</td><td> -<br> начало форматированного текста.<br> <tr><td>procedure preClose</td><td> - окончание форматированного текста.<br> </table><br> []<br> []<br> []<br><br> <h1>Списки</h1> Списки в HTML бывают трех типов: ненумерованные, нумерованные и<br> так называемые списки терминов. Ненумерованный список оформляется с помощью блока<br><br> <br><br> <LI> элемент<br><br> <LI> элемент<br><br> ...<br><br> Список будет отображен примерно так:<br> <li> Элемент 1<li> Элемент 2<li> ....<br> Нумерованный список отличается от ненумерованного тем, что около<br> пунктов вместо жирных точек вставляются порядковые номера пунктов.<br> Оформляется он в виде блока<br><br> <LI> элемент<br><br> <LI> элемент<br><br> ...<br><br> Отобразится он в таком виде:<br> <li> Элемент 1<li> Элемент 2<li> ....<br> Третим видом списка является список терминов. Он очень удобен для<br> оформления всевозможных глоссариев. Оформить такой список можно с помощью блока<br><br> <DL><br><br> <DT>Термин1 <DD>Описание1<br><br> <DT>Термин2 <DD>Описание2<br><br> ...<br><br> </DL><br><br> Вид у полученного списка будет примерно следующий:<br><br> Термин1<br><br> Описание1<br><br> Термин2<br><br> Описание2<br><br> ...<br><br> <h1>SQL - сервер фирмы Oracle</h1> При реализации сценария 3 встает вопрос о выборе качественной<br> платформы для создания информационного хранилища. Реляционная система управления базами данных фирмы Oracle<br> является лидером на рынке СУБД. По производительности, надежности<br> хранения данных, развитию семейства интерфейсов, объему серверных платформ продукты<br> Oracle возглавляют многочисленные рейтинги. Гибкость использования, развитые средства управления доступом и распределенная<br> архитектура делают сервер Oracle чрезвычайно привлекательным для технологии информационных хранилищ,<br> а возможность работы на свободно - распространяемых Unix-платформах расширяет его возможности в некоммерческой среде.<br> Существенным ограничением использование Oracle в сфере науки и образования является достаточно высокая<br> цена и низкое бюджетное финансирование. Однако с 1996 года фирма Oracle<br> объявила о специальной программе для российских университетов, что позволяет за относительно небольшие деньги приобрести<br> любой набор продуктов Oracle.<br><br> <h1>Стандартный входной поток</h1> В случае метода запроса <b>POST</b> данные передаются как содержимое HTTP запроса. И будут посланы в стандартный входной поток.<br> Данные передаются cgi-модулю в следующей форме:<br> name=value&name1=value1&...&nameN=valueN<br> где name - имя переменной,<br> value - значение переменной,<br> N - количество переменных<br> На файловый дескриптор стандартного потока ввода посылается CONTENT_LENGTH байт. Так же сервер передает cgi-модулю CONTENT_TYPE (тип данных). Сервер не посылает символ конца файла после передачи CONTENT_LENGTH байт данных или после того, как cgi-модуль их прочитает. Переменные окружения CONTENT_LENGTH и CONTENT_TYPE устанавливаются в тот момент, когда сервер выполняет cgi-модуль. Таким образом, если в результате исполнения формы с аргументом тега FORM - METHOD="POST" сформирована строка данных firm=МММ&price=100023, то сервер установит значение CONTENT_LENGTH равным 21 и CONTENT_TYPE в application/x-www-form-urlencoded, а в стандартный поток ввода посылается блок данных.<br> В случае метода <b>GET</b>, строка данных передается как часть URL.<br> Т.е. например<br> http://host/cgi-bin/script?name1=value1&name2=value2<br> В этом случае переменная окружения QUERY_STRING принимает значение<br> name1=value1&name2=value2<br><br> <h1>Стандартный вывод</h1> <b>СGI</b> - модуль выводит<br> информацию в стандартный выходной поток. Этот вывод может представлять<br> собой или документ, сгенерированный cgi-модулем, или инструкцию серверу, где получить необходимый документ. Обычно <b>cgi</b>-модуль<br> производит свой вывод. Преимущество такого подхода в том, что<br> <b>cgi</b>-модуль не должен формировать полный HTTP заголовок<br> на каждый запрос.<br> <b>Заголовок выходного потока</b><br> В некоторых случаях необходимо избегать обработки сервером вывода cgi-модуля, и посылать клиенту данные без изменений. Для отличия таких cgi-модулей, CGI требует, чтобы их имена начинались на nph-. В этом случае<br> формирование синтаксически правильного ответа клиенту cgi-модуль берет на себя.<br> <b>Заголовки с синтаксическим разбором</b><br> Вывод cgi-модуля должен начинаться<br> с заголовка содержащего определенные строки и завершаться двумя<br> символами CR(0x10).<br> Любые строки не являющиеся директивами сервера, посылаются непосредственно<br> клиенту. На данный момент, CGI спецификация определяет три директивы<br> сервера:<br> <b>Content-type</b><br> MIME или тип возвращаемого документа<br> Например:<br> <b>Content-type</b>: text/html <CR><CR><br> сообщает серверу, что следующие за этим сообщением данные - есть документ в формате HTML<br> <b>Location</b><br> указывает серверу, что возвращается не сам документ, а ссылка на него<br> Если аргументом является URL, то сервер передаст указание клиенту<br> на перенаправление запроса. Если аргумент представляет собой виртуальный<br> путь, сервер вернет клиенту заданный этим путем документ, как<br> если бы клиент запрашивал этот документ непосредственно.<br> Например: <b>Location:<br> </b>http://host/file.txt приведет к тому, что WWW сервер выдаст file.txt, как если бы он был затребован клиентом. Если cgi-модуль возвращает ссылки на gopher сервер, например на gopher://gopher.ncsa.uiuc.edu/. Вывод будет следующий:<br> <b>Location</b>: gopher://gopher.ncsa.uiuc.edu/<br><br> <b>*Status</b><br> задает серверу HTTP/1.0 строку-статус, которая будет послана клиенту в формате: nnn xxxxx<br> где: nnn - 3-х цифровой код статуса<br> ххххх - строка причины<br><br> Например: <b>HTTP/1.0 200 OK</b><br> Server: NCSA/1.0a6<br> Content-type: text/plain<br><br> <динамически генерируемый текст сообщения><br><br> В данном случае, клиенту будет сообщено об успешном выполнении запроса.<br><br> <h1>Структура HTML-документов</h1> Web-страницы описываются на специальном языке, называемом HTML (HyperText<br> Markup Language, Язык разметки гипертекстовой информации), который позволяет<br> осуществлять простое форматирование текста, вставку графики, а также<br> составление таблиц и цветовое оформление документов.<br> Будучи подмножеством языка SGML, HTML имеет теговую структуру. Это означает, что в тексте встречаются комманды, изменяющие интерпретацию<br> информации. Например, слово, напечатанное курсивом, в исходном<br> тексте выглядит так:<br> слово, напечатанное <I>курсивом</I>.<br> Теги записываются в угловых скобках и могут содержать дополнительные<br> параметры. Большинство тегов располагается в виде ``скобок'' вокруг текста (как теги<br> <I> и </I> вокруг слова ``курсивом'' в приведенном выше примере).<br> Благодаря этому свойству, теги можно подразделить на открывающие и<br> закрывающие. Не у всех тегов существуют соответствующие им закрывающие,<br> такие теги иногда называют ``пустыми''(empty). Общую структуру открывающего тега можно записать так:<br> <NNNNN Name="Value" .....><br> Соответствующий закрывающий тег быдет иметь вид<br> </NNNNN><br> Далее под словом ``тег'' мы будем понимать совокупность открывающего<br> и соответствующего ему закрывающего (если таковой существует) элементов.<br><br> <h1>Таблицы символов</h1> Таблицы символов пакета хранятся в ассоциативном массиве с тем же именем и<br> двойным двоеточием в конце. Для пакетов включенных в пакет имя символьной<br> таблицы составляется аналогичным образом: %OUTER::INNER::.<br><br> <h1>Теги HTML</h1> Рассказ о тегах языка HTML поведем на примере создания некоторой<br> Web-страницы. Пусть перед нами стоит задача сделать страницу, посвященную<br> некоторой личности (например, самому читателю), тогда такая Web-страница<br> будет называться ``домашней'' (homepage). Сейчас будут рассмотрены<br> теги языка, а применение их на странице будет оставлено Читателю<br> в качестве упражнения.<br><br> <h1>Текст</h1> Хотя текстовые файлы и занимают меньше всего места по сравнению<br> с изображениями или звуком, определенную экономию можно извлечь<br> и из них. Прежде всего -- комментарии в HTML-коде. Вы действительно<br> уверены что все они необходимы? И уверены ли вы, что все то, что<br> вставил в создаваемый документ ваш любимый редактор HTML, действительно нужно?<br> Иногда оказывается, что нет. В таких случаях лишнее лучше убрать.<br> Кроме того, лишнее присутствует даже во всех без исключения простых текстовых<br> файлах формата DOS или Windows. Это лишнее содержится в конце каждой строки.<br> Дело в том, что в системах семейства UNIX для указания перевода строки<br> используется один символ, тогда как в системах DOS и Windows -- целых два.<br> То есть, файл занимает на столько больше байт, чем может, сколько строк<br> в нем содержится. Если ваш WWW сервер работает под управлением одной из<br> разновидностей UNIX, попробуйте убрать лишнее из HTML файлов. Обычно это<br> делается с помощью утилит типа fromdos, dos2unix, dtox,<br> или им подобных (это зависит от типа используемой операционной системы).<br> Спросите у вашего системного администратора. Он должен знать. Если он не знает,<br> скажите об этом его начальнику. В любом случае, ВАМ это полезно знать, и вы<br> имеете на это право!<br><br> <h1>Термы и операторы списка</h1> Операторы в Perl-е имеют различный приоритет. Операторы, заимствованные из C,<br> сохранили между собой ту же иерархию, что и в C. Термы имеют самый большой<br> приоритет, они содержат переменные, кавычки, выражения в скобках,<br> функции с их<br> параметрами. Если за списковым оператором ( например, print()) или унарным<br> оператором ( например, chdir()) следует список аргументов, заключенный в<br> скобки, то эта последовательность имеет самый высокий приоритет, подобно<br> функции с аргументами. Аналогично термам обрабатываются последовательности<br> do{} и eval{}.<br><br> <h1>Тестирование страниц</h1> К сожалению, образ мышления пользователей, общающихся с компьютерами<br> от случая к случаю, сильно отличается от образа мышления профессиональных<br> дизайнеров Web-страниц и программистов. По этой причине, зачастую, готовые<br> и, вроде бы внешне очень привлекательные страницы не отвечают своему<br> предназначению - доносить до пользователей информацию.<br> В связи с этим имеет смысл рассматривать Web-страницы как пользовательские<br> интерфейсы к данным, которые разработчики хотят донести до конечных<br> пользователей. А у хороших пользовательских интерфейсов есть очень<br> важные особенности: они ИНТУИТИВНО ПОНЯТНЫ и УДОБНЫ.<br> Под интуитивной понятностью можно в данном контексте понимать очевидность для<br> пользователя координат той информации, которую он хотел бы получить. Например,<br> если дизайнер разместил на картрированном изображения область<br> (картрированное изображение), за которой<br> скрывается какая-либо важная информация, но не выделил ее на изображении каким-либо<br> очевидным для пользователя образом (скажем, не оформил ее в виде очень<br> привлекательной для нажатия кнопки), можете быть уверены: никто до этой информации<br> не доберется.<br> <br>Под удобством понимается количество трудозатрат пользователя по получению<br> какой-либо информации.<br> Именно для достижения максимального удобства пользователей следует<br> обращать большое внимание на тестирование<br> страниц перед их размещением в общедоступных местах.<br> Интересна методика разработки<br> и тестирования Web-страниц, применяемая в компании Sun Microsystems.<br> При создании больших WWW-документов очень важно распределить всю информацию<br> между ветками иерархии страниц. К этому имеет смысл привлечь пользователей.<br> В лаборатории Sun Microsystems, занимающейся разработкой Web-страниц,<br> пользователям предлагается набор бумажных карточек с названиями материалов.<br> Эти карточки пользователи раскладывают группами на столе в соответствии со<br> своими представлениями. Понимая, что пользователям кажется идейно близким<br> по содержанию, дизайнеры создают более удачные страницы.<br> После создания первых вариантов оформления страницы распечатываются на бумаге<br> и демонстрируются пользователям. Предлагается угадать, что стоит за ссылками и<br> рассказать общие впечатления от дизайна страниц. Если пользователям что-то<br> не нравится, страницы приходится переделывать.<br> Последняя стадия тестирования заключается в демонстрации пользователям<br> рабочего варианта страниц ``в рабочем виде''. Пользователь садится<br> за компьютер с запущенным браузером и начинает ``путешествовать'' по новым<br> страницам. Даются несколько заданий по поиску конкретной информации, а также<br> наблюдается, на что пользователь больше всего обращает внимание.<br><br> <h1>Требования к ресурсам</h1> Программное обеспечение сервера NCSA представляет собой прикладное программное обеспечение,<br> предназначенное для работы под ОС Unix.<br> В зависимости от аппаратной платформы<br> требуемый размер оперативной памяти и дискового пространства<br> существенно изменяются. Для<br> семейства "Unix для PC"<br> (Solaris, SCO, UnixWare, Linux, BSD, BSDI), необходимо<br> ориентироваться на 2 Mb оперативной<br> памяти. Дисковое пространство,<br> требуемое при установке, составляет<br> около 2Mb, однако при планировании<br> установки нужно учитывать,<br> что при интенсивном доступе к серверу<br> статистика доступа будет составлять до нескольких сот килобайт<br> в день и нескольких десятков мегабайт в месяц.<br><br> <h1>Управление доступом</h1> Сервер NCSA содержит гибкие средства управления доступом. С их<br> помощью можно централизованно или децентрализованно управлять<br> доступом, основываясь на структуре адреса WWW - клиента, создавать<br> пары имя/пароль для документов или целых подразделов, создавать<br> несколько пар имя/пароль.<br><br> <b>Управление доступом с использованием пар имя/пароль<br> </b><br> Для введения ограничений на доступ ко всем документам определенного<br> каталога необходимо создать в этом каталоге файл управления доступом.<br> Этот файл имеет фиксированное имя, определяемое параметром AccessFileName<br> файла конфигурации доступа. По умолчанию,<br> это файл <b>.htaccess</b>.<br> Пример содержимого файла <b>.htaccess</b><br> AuthUserFile /otherdir/.htpasswd<br> AuthGroupFile /dev/null<br> AuthName ByPassword<br> AuthType Basic<br><br> <Limit GET><br> require user pumpkin<br> </Limit><br><br> <b>AuthUserFile</b> указывает путь файла паролей, который<br> должен находиться вне данного каталога.<br> <b>Limit GET</b> ограничивает доступ по методу GET, предоставляя<br> его только пользователю pumpkin. Для ограничения других методов<br> доступа (например, в каталогах<br> CGI) используется перечисление всех методов:<br> <Limit GET POST PUT><br> require user pumpkin<br> </Limit><br><br> Для создания файла паролей необходимо воспользоваться утилитой<br> <b>htpasswd</b>, входящей в состав дистрибутива сервера:<br> <b>htpasswd -c /otherdir/.htpasswd<br> pumpkin<br><br> </b><br> После запуска она дважды запросит пароль для пользователя pumpkin<br> и создаст файл паролей <b>/otherdir/.htpasswd</b>.<br> <b>Использование нескольких пар имя/пароль</b><br> Использование нескольких пар имя/пароль достигается путем описания<br> группы, в которую входят несколько<br> пользователей, и указания<br> имени группы в операторе <b>Limit</b>.<br> <li>Необходимо создать несколько записей в файле паролей. Этого<br> можно достичь, не указывая<br> ключа <b>-c</b> (create) для <b>htpasswd</b>:<br> <b>htpasswd /otherdir/.htpasswd<br> peanuts</b><br> <b>htpasswd /otherdir/.htpasswd<br> almonds</b><br> <b>htpasswd /otherdir/.htpasswd<br> walnuts<br> </b><br> <li>Создать файл описания группы, назвав его,<br> например, <b>/otherdir/.htgroup</b><br> со следующим содержимым:<br> <br> <b>my-users: pumpkin peanuts almonds<br><br> walnuts<br><br> </b><br><br> где <b>my-users</b> - имя группы,<br><br> <b>pumpkin</b>, <b>peanuts</b>, <b>almonds</b>,<br><br> <b>walnuts</b> - список пользователей, входящих в группу.<br><br> <li>Изменить файл .htaccess следующим образом:<br><br> AuthUserFile /otherdir/.htpasswd<br><br>AuthGroupFile /otherdir/.htgroup<br><br> AuthName ByPassword<br><br> AuthType Basic<br><br> <Limit GET><br><br> require group my-users<br><br> </Limit><br><br> Все документы данного каталога будут доступны всем членам группы<br><br> <b>my-users</b> после проведения процедуры аутентификации<br><br> (ввода пароля).<br><br> <b>Ограничение доступа по сетевому имени</b><br><br> В этом случае управление доступом осуществляется на основе сравнения<br><br> сетевого имени машины - клиента с заранее заданным образцом. Если<br><br> выявится совпадение, начинают действовать специальные правила<br><br> доступа.<br><br> Пример ограничения доступа на чтение. Чтение разрешено всем пользователям<br><br> машин домена <b>cnit.nsu.ru</b>:<br><br> Содержимое файла <b>.htaccess</b>:<br><br> AuthUserFile /dev/null<br><br> AuthGroupFile /dev/null<br><br> AuthName ExampleAllowFromCNIT<br><br> AuthType Basic<br><br> <Limit GET><br><br> order deny, allow<br><br> deny from all<br><br> allow from .cnit.nsu.ru<br><br> </Limit><br><br> Оператор order указывает порядок определения требований к доступу:<br><br> сначала ограничения, затем разрешения.<br><br> deny from all - сначала запрещает доступ для всех,<br><br> allow from .cnit.nsu.ru - затем разрешает доступ для машин<br><br> домена cnit.nsu.ru.<br><br> Оператор AuthName задает имя данного ограничения доступа - произвольную<br><br> комбинацию букв и цифр.<br><br> Пример запрета на доступ для всех машин домена nstu.nsk.su:<br><br> Содержимое файла <b>.htaccess</b>:<br><br> AuthUserFile /dev/null<br><br> AuthGroupFile /dev/null<br><br> AuthName ExampleAllowFromCNIT<br><br> AuthType Basic<br><br> <Limit GET><br><br> order allow, deny<br><br> deny from .nstu.nsk.su<br><br> allow from all<br><br> </Limit><br><br> <h1>Условный оператор (DBIF & DBELSE)</h1> Основным средством динамического определения содержимого документа<br> являются теги DBIF и<br> DBELSE, позволяющие производить проверку некоторого условия<br> и в зависимости от этого формировать результат.<br> Тег DBIF имеет следующий синтаксис<br> (тег DBELSE может не<br> использоваться):<br> <DBIF значение оператор<br> значение><br> теги HTML и DBML<br> <DBELSE><br> теги HTML и DBML<br> </DBIF><br> В качестве элемента тега DBIF -<br> "значение",<br> могут использоваться любой параметр или переменная Cold<br> Fusion (например, #Form.Name#,<br> #CGI.User_Agent#), числовое значение, произвольная последовательность<br> символов (заключенная в кавычки).<br> Элемент тега DBIF - "оператор"<br> ограничивается следующим списком:<br> <li><b>is</b> - сравнивает<br> два значения, с учетом регистра, и возвращает значение True<br> (истина), если эти значения совпадают;<br> <li><b>is not</b><br> - оператор обратный оператору <b>is</b>;<br> <li><b>Contains</b><br> - проверяет, содержится ли значение находящееся слева от<br> оператора в значении справа и возвращает True,<br> если да;<br> <li><b>does not contain</b><br> - оператор обратный оператору <b>contains</b>;<br> <li><b>great then</b><br> - проверяет, что значение слева от оператора больше чем<br> справа и возвращает True,<br> если да;<br> <li><b>less then</b><br> - проверяет, что значение слева от оператора меньше чем<br> справа и возвращает True,<br> если да;<br> <li><b>greater then or equal<br> to</b> - оператор<br> обратный оператору <b>less then</b>;<br> <li><b>less then or equal to</b><br> - оператор обратный оператору <b>great<br> then</b>;<br> Пример<br> <DBIF #PersonSearch.RecordCount()#<br> is 0><br> Лиц, удовлетворяющих<br> заданным критериям поиска,<br> в базе данных не обнаружено!<br> <DBELSE><br> <DBOUTPUT QUERY="PersonSearch"><br> <HR><br> Фамилия Имя Отчество:<br> #FullName# <BR><br> <DBIF #Phone# is ""><br> Телефон:<br> #Phone# <BR><br> <DBIF><br> </DBOUTPUT><br> </DBIF><br><br> <h1>Условный оператор</h1> ?: также как и в C является условным оператором. Он работает подобно<br> if-then-else. Если аргумент перед ? - TRUE, то возвращается аргумент<br> перед :,<br> в противоположном случае возвращается аргумент после :.<br> Скалярный или списковый контекст второго и третьего аргументов передается<br> по наследству.<br> ($a_or_b ? $a : $b) = $c;<br><br> <h1>Установка Cold Fusion</h1> Cold Fusion запускается как CGI приложение на различных Web-серверах<br> под Windows NT и Windows 95 и должен быть совместим с любым сервером поддерживающим CGI.<br> Cold Fusion тестировался на<br> совместимость со следующими серверами:<br> <li>O'Reilly WebSite<br> <li>Microsoft Internet Server<br> <li>EMWAC HTTPS<br> <li>Process Software Purveyor<br> <li>Netscape Communications/Commerce Server<br> <li>Internet Factory Communications/Commerce Builder<br> <li>Spry Safety Web Server<br> <li>CSM Alibaba<br> Для связи с различными СУБД Cold<br> Fusion использует 32-разрядные<br> ODBC - драйвера. Для корректной<br> работы с Cold Fusion ODBC -<br> драйвер должен удовлетворять следующим требованиям:<br> <li>Это должен быть 32-разрядный драйвер.<br> <li>Он должен поддерживать Уровень 1 ODBC API.<br> <li>Должна поддерживаться базовая грамматика SQL.<br> <li>Для совместимости с функциями ввода даты/времени, драйвер<br> должен поддерживать соответствующие типы данных.<br> Для установки и использования Cold<br> Fusion система должна удовлетворять следующим требованиям:<br> <li>Операционная система Windows<br> NT 3.51(или выше) или Windows<br> 95.<br> <li>Микропроцессор 80386 или выше;<br> рекомендуется Pentium.<br> <li>10Mb свободного дискового пространства.<br> <li>24Mb RAM для Windows NT или 16Mb для Windows 95<br> <li>Установленная сетевая поддержка TCP/IP.<br> <li>Установленный WWW сервер.<br> Для установки Cold Fusion нужно запустить программу SETUP.EXE,<br> которая должна находится на инсталляционном диске 1.<br> Помимо копирования файлов, необходимых для работы Cold Fusion,<br> в процессе установки, в корневой директории с документами<br> Web сервера создается директория с именем CFPRO. Эта директория содержит:<br> <li>Тест, для проверки правильности установки системы.<br> <li>Мини-учебник, в формате HTML, помогающий освоить азы Cold Fusion.<br> <li>Примеры приложений, демонстрирующие различные способы использования Cold Fusion.<br> Чтобы проверить правильность установки Cold Fusion, нужно открыть документ, URL<br> до которого имеет вид<br> http://myserver/cfpro/getstart.htm,<br> где myserver<br> - имя или IP адрес вашего Web сервера.<br><br> <h1>Установка</h1> Для корректной работы пакета необходимо правильно провести процедуру<br> установки. Пакет WOW<br> требует около 2Mb дискового<br> пространства. На базовом сервере<br> должны быть установлены:<br> <li>операционная система семейства Unix;<br> <li>WWW - сервер;<br> <li>сервер баз данных Oracle<br> или сетевой стек Oracle SQL*Net с<br> возможностью доступа к удаленному серверу баз данных Oracle.<br><br> <h1>Верстка таблиц</h1> Таблицы являются мощнейшим средством HTML для верстки страниц.<br> До появления в языке HTML средств верстки таблиц, нельзя было<br> создать даже самый простой<br> многоколончатый текст или сводную таблицу, то после появления такой<br> возможности Web-дизайнеры стали использовать ее в полной мере и добиваться<br> сложных эффектов.<br> Создается таблица с помощью конструкции<br><br> <TABLE параметры ><br><br> <CAPTION>Заголовок</CAPTION><br><br> <TR параметры><br><br> <TD параметры><br><br> ...<br><br> </TD><br><br> ....<br> </TR><br><br> </TABLE><br><br> Тег TABLE начинает описание таблицы и может иметь следующие параметры:<br> <b>BORDER</b> - определяет толщину рамки таблицы. Если указано нулевое значение то рамка не отображается. Если этот параметр не указан, его значение считается нулевым (рамка не отображается).<br> <b>WIDTH, HEIGHT</b> - указывает размеры таблицы, если они должны быть жестко заданы.<br> <b>ALIGN</b> - определяет, как должна быть выровнена таблица: справа (RIGHT), слева (LEFT) или в центре (CENTER) страницы.<br> <b>CELLSPACING</b> - число точек между отдельными ячейками в таблице.<br> <b>CELLPADDING</b> - число точек между рамкой и содержимым ячейки.<br> С помощью тега <TR параметры>...</TR> оформляются строки таблиц.<br> Он может иметь следующие параметры:<br><br> <b>ALIGN</b> - используется для задания способа горизонтального форматирования данных внутри<br> ячеек: они могут прижиматься к правому (RIGHT), левому (LEFT) краям или<br> центрироваться (CENTER).<br> <b>VALIGN</b> - используется для задания способа вертикального форматирования данных внутри<br> ячеек: они могут прижиматься к верхнему (TOP), нижнему (BOTTOM) краям,<br> центрироваться (MIDDLE) или иметь общую базовую линию (BASELINE).<br> Конкретные ячейки задаются с помощью тега <TD параметры>...</TD>,<br> где параметры могут быть следующими:<br> <b>WIDTH</b> - задает ширину ячейки.<br> <b>COLSPAN</b> - определяет, сколько колонок таблицы ячейка будет перекрывать.<br> <b>ROWSPAN</b> - определяет, сколько строк таблицы ячейка будет перекрывать.<br> <b>NOWRAP</b> - если этот параметр указан, содержимое ячеек не будет переноситься, чтобы влезать в ширину ячейки.<br> <br> <b>BGCOLOR</b> - параметр, поддерживаемый современными браузерами: указывает цвет фона ячейки в виде RGB-триплета или символьного имени.<br><br> Еще один тег для оформления ячеек таблиц - тег <TH>...</TH> - нужен для<br><br> задания заголовочных ячеек. Он во всем совпадает с тегом <TD>, но<br><br> в отличие от него, содержимое выдается жирным шрифтом и центрируется.<br><br> Если нужно задать заголовок ВСЕЙ таблицы, используйте тег<br><br> <CAPTION параметры>...</CAPTION>. Он должен быть внутри тега <TABLE>,<br><br> но вне описания ячеек. Тег имеет один параметр:<br><br> <b>ALIGN</b> - указывает положение заголовка: он может быть в верхней (TOP) или нижней (BOTTOM) части таблицы.<br><br> Пример:<br><br> <TABLE BORDER=1 CELLSPACING=2 CELLPADDING=1 WIDTH=500><br><br> <TR><br><br> <TD COLSPAN=3 ALIGN=CENTER>A</TD><br><br> </TR><br><br> <TR><br><br> <TD ROWSPAN=2 ALIGN=CENTER WIDTH="30%">B</TD><br><br> <TD ROWSPAN=2 ALIGN=CENTER WIDTH="40%">C</TD><br><br> <TD ALIGN=CENTER WIDTH="30%">D</TD><br><br> </TR><br><br> <TR><br><br> <TD ALIGN=CENTER>E</TD><br><br> </TR><br><br> </TABLE><br><br> <h1>Включение в шаблон других шаблонов</h1> По мере усложнения приложений, разрабатываемых с использованием<br> Cold Fusion, появляется необходимость<br> упростить используемые шаблоны.<br> Одним из способов решения этой проблемы, предлагаемых в Cold<br> Fusion, является выделение из шаблонов часто используемых<br> блоков, таких как запросы и области вывода, и их многократное<br> использование в других шаблонах. Для включения часто используемых<br> шаблонов в другой шаблон, используется тег DBINCLUDE.<br> Тег DBINCLUDE может быть расположен<br> в любом месте шаблона, кроме как в тегах DBQUERY,<br> DBOUTPUT и DBTABLE. Тег<br> DBINCLUDE имеет атрибут TEMPLATE<br> который задает путь до файла с шаблоном. Этот шаблон будет<br> обработан Cold Fusion как<br> часть основного шаблона (то есть, в нем могут использоваться запросы,<br> уже запущенные в основном шаблоне, а также ссылки на параметры<br> формы, URL и CGI).<br> Приведем пример включения в шаблон шаблона с именем 'test.dbm':<br> <DBINCLUDE TEMPLATE="test.dbm"><br><br> <h1>Вложенные области вывода и группирования</h1> Теги DBOUTPUT могут вкладываться<br> друг в друга, с целью сгруппировать области вывода. Группирование<br> достигается с помощью использования атрибута GROUP<br> в теге DBOUTPUT, который<br> содержит другой тег DBOUTPUT.<br> Этот атрибут определяет поле по которому будет производится группирование.<br> Внешний тег DBOUTPUT обычно<br> используется для вывода заголовка группы , а внутренний - для<br> вывода записей содержащихся в группе.<br> Приведем пример вывода сотрудников организации сгруппированных<br> по отделам:<br> <DBQUERY NAME="ListEmployees"<br> DataSource="Employees"<br> SQL="SELECT * FROM Emp ORDER<br> BY Department"><br> <DBOUTPUT QUERY="ListEmployees"<br> GROUP="Department"><br> <H2>#ListEmployees.Department#</H2><br> <br> <DBOUTPUT><br> <LI> #FullName# ##<br> </DBOUTPUT><br> <br> </DBOUTPUT><br> Обратим внимание на то, если поле используется для группирования,<br> то результат запроса должен быть отсортирован по этому полю. Если<br> используется многоуровневое группирование (ограничений на количество<br> уровней вложенности тегов DBOUTPUT<br> нет), то соответственно в SQL<br> - выражении должна быть задана многоуровневая сортировка<br> (например, ORDER BY Country, Region).<br><br> <h1>Вставка иллюстраций в HTML-документы</h1> Для вставки изображений в документ служит тег <IMG>. Это пустой тег, следовательно, закрывающего тега для него не существует. У тега есть несколько параметров:<br> <b>SRC</b> - обязательный параметр, указывающий URL файла с изображением.<br> <b>ALT</b> - рекомендуемый параметр, строка, заменяющая изображение при загрузке и в браузерах без поддержки графики.<br> <b>WIDTH, HEIGHT</b> - рекомендуемые параметры, горизонтальный размер растра изображения. При загрузке изображения браузер может отображать на его месте в документе рамку соответствующего размера.<br> <b>BORDER</b> - толщина рамки вокруг изображения, если изображение является частью активной зоны ссылки. Если BORDER=0, то рамка не будет отображаться.<br> <b>HSPACE, VSPACE</b> - позволяют задать свободное пространство вокруг изображения.<br> <b>ALIGN</b> - (TOP или BOTTOM или MIDDLE) положение текста относительно изображения. (LEFT или RIGHT) Положение изображения относительно окна браузера.<br> <b>USEMAP</b> - указывает, что изображение имеет активные зоны, описанные с помощью тега MAP в самом документе.<br> <b>ISMAP</b> - указывает, что изображение имеет активные зоны, и информацию о координатах выбранной точки следует передавать серверу.<br><br> <h1>Встроенные функции</h1> <b>abs VALUE</b><br> Возвращает абсолютное значение аргумента.<br> <b>accept NEWSOCKET, GENERICSOCKET</b><br> подобно системному вызову accept(2) ждет соединения.<br> Возвращает запакованный адрес, если соединение произошло успешно и FALSE в<br> противоположном случае.<br> <b>atan2 Y,X</b><br> Возвращает arctg(Y/X).<br> <b>bind SOCKET, NAME</b><br> Привязывает сетевой адрес к сокету,<br> также как системный вызов bind в OS UNIX или любой другой<br> системе, поддерживающей BSD Sockets. Если привязка произошла<br> успешно, возвращает TRUE, в противном случае - FALSE. Переменная NAME должна<br> содержать запакованный адрес, соответствующего для сокета типа.<br> Тип адреса для разных видов сокетов определяется в терминах языка C структурой<br> sockaddr, которая представляет собой абстрактный тип, содержащий<br> все данные, необходимые для сокета.<br> <b>binmode FILEHANDLE</b><br> Позволяет читать или писать файл с соответствующим<br> дескриптором в бинарном режиме.<br> <b>bless REF, PACKAGE</b><br> Эта функция присоединяет объект на который указывает<br> ссылка REF, к пакету PACKAGE, если он определен, если же он опущен, то к текущему<br> пакету. Для удобства возвращает ссылку, так как bless() часто является последним<br> оператором в конструкторе.<br> <b>caller EXPR</b><br> Возвращает контекст текущего вызова подпрограммы. В скалярном<br> контексте возвращает TRUE, если мы находимся внутри подпрограммы, eval() или<br> require(). FALSE в противоположном случае. В списковом контексте возвращает:<br> ($package, $filename, $line) = caller;<br> С аргументом EXPR возвращает более сложную информацию, которая используется<br> отладчиком для печати карты стека. Значение EXPR отмечает глубину стека до<br> текущей записи.<br> ($package, $filename, $line,<br> $subroutine, $hasargs, $wantargs) = caller($i);<br> <b>chdir EXPR</b><br> Изменяет текущую директорию на указанную в EXPR, если это<br> возможно. Если EXPR опущено, то устанавливает в качестве текущей директории<br> домашнюю директорию. Возвращает TRUE в случае успеха и FALSE иначе.<br> <b>chmod LIST</b><br> Изменяет права доступа к файлам указанным в LIST. Первым<br> аргументом должна быть маска доступа в цифровом формате. <br> Возвращает число<br><br> файлов права доступа к которым были успешно сменены.<br><br> $cnt = chmod 0700 'foo','bar';<br><br> chmod 700 @executables;<br><br> <b>chown LIST</b><br><br> Изменяет хозяина или группу, которой принадлежит список файлов.<br><br> Первыми двумя аргументами должны быть uid и gid. Возвращает количество успешных<br><br> изменений.<br><br> <b>chr NUMBER</b><br><br> Возвращает символ, представленный номером NUMBER в наборе<br><br> символов. Например, chr(65) вернет A.<br><br> <b>close FILEHANDLE</b><br><br> Закрывает файл с дескриптором FILEHANDLE. Для более подробной<br><br> информации читайте manual page.<br><br> open(OUTPUT '/usr/home/petrov');<br><br> ...<br><br> close OUTPUT;<br><br> <b>closedir DIRHANDLE</b><br><br> Закрывает каталог открытый вызовом opendir().<br><br> <b>connect SOCKET,NAME</b><br><br> Пытается соединиться с удаленным сокетом (по аналогии с системным вызовом).<br><br> Возвращает TRUE в случае успешного соединения и FALSE в противоположном случае.<br><br> Переменная NAME должна содержать запакованный адрес соответствующего данному<br><br> сокету типа.<br><br> <b>cos EXPR</b><br><br> Возвращает косинус EXPR, выраженного в радианах. Если EXPR опущено,<br><br> возвращает косинус $_.<br><br> <b>dbmopen ASSOC, DBNAME, MODE</b><br><br> Связывает dbm(3) или ndbm(3) файл с<br><br> ассоциативным массивом. ASSOC - имя ассоциативного массива. DBNAME - имя базы данных<br><br> (без .dir или .pag расширения). Если база данных не существует, то она создается<br><br> с правами доступа указанными в MODE.<br><br> dbmopen(%HIST,'/usr/lib/news/history', 0600);<br><br> while (($key, $val) = each %HIST){<br><br> print $key, '=', unpack('L',$val),\n;}<br><br> dbmclose(%HIST);<br><br> <b>dbmclose ASSOC</b><br><br> Прерывает связь между файлом и ассоциативным массивом.<br><br> <b>defined EXPR</b><br><br> Возвращает TRUE или FALSE, в зависимости от того определено<br><br> значение EXPR или нет. Многие операции возвращают неопределенное значение в<br><br> случае конца файла, неинициализированной переменной, системной ошибки или при<br><br> подобной ситуации. Если речь идет о хэше, то defined покажет только определены ли<br><br> ли величины, ничего не говоря о существовании ключей. Для определения существования<br><br> ключей используется функция exists().<br><br> <b>delete EXPR</b><br><br> Стирает указанную величину. Возвращает удаленную величину<br><br> <br> или значение не определено в случае, если удаление не произошло.<br><br> foreach $key (keys %array) {<br><br> delete $array{$key};<br><br> }<br><br> Но более быстро то же самое можно сделать используя функцию undef().<br><br> <b>die LIST</b><br><br> Вне eval() печатает значение LIST в STDERR и выходит из программы с<br><br> текущим значением $!. Если значение $! есть ноль, то принимает значение $? >> 8.<br><br> Если значение $? >> 8 есть ноль, то принимает значение 255. Внутри eval()<br><br> сообщение об ошибке помещается в переменную $@ и eval() прерывается с<br><br> неопределенным значением.<br><br> open(FL, "/root/rm-rf") die "Can't open file.\n";<br><br> <b>do BLOCK</b><br><br> Функцией не является. Возвращает значение последней операции<br><br> внутри блока.<br><br> <b>do EXPR</b><br><br> Использует величину EXPR как имя файла и далее запускает содержимое<br><br> этого файла, как программу на Perl. Обычно это используется для включения<br><br> библиотечных подпрограмм.<br><br> do 'stat.pl';<br><br> Это то же самое, что:<br><br> eval 'cat stat.pl';<br><br> Однако подключать библиотечные модули более удобно используя use и require.<br><br> <b>each ASSOC_ARRAY</b><br><br> Возвращает массив из двух элементов, содержащий ключ<br><br> и значение из хэша, причем по очереди перебирает все пары ($key, $value).<br><br> while (($key,$value) = each %ENV){<br><br> print " $key = $value \n";<br><br> }<br><br> <b>eof FILEHANDLE</b><br><br> Возвращает 1, если следующее считывание возвращает конец<br><br> файла или если FILEHANDLE не был открыт. При опущении аргумента eof обрабатывает<br><br> последний файл, из которого происходило считывание. Но на практике эта функция<br><br> редко используется, так как в Perl-е операторы чтения возвращают неопределенное<br><br> значение в конце файла.<br><br> <b>eval EXPR</b><br><br> EXPR выполняется как маленькая программа в контексте основной<br><br> программы. Определенные переменные и подпрограммы остаются определенными и в<br><br> дальнейшем. Возвращается значение, которое возникает при обработке последнего<br><br> выражения. Если EXPR опущено, то обрабатывается $_.<br><br> <b>exec LIST</b><br><br> Исполняет внешнюю программу и НИКОГДА не возвращает управление.<br><br> На самом деле (в UNIX) производится системный вызов семейства exec, который<br><br> <br> подменяет программу, исполняющуюся в рамках текущего процесса.<br><br> Если LIST представляет собой список из более, чем одного аргумента, то вызывается execvp(3)<br><br> с аргументами из LIST. Если аргумент только один, то он проверяется на метасимволы<br><br> shell. Если они присутствуют, то он далее передается /bin/sh -c для обработки.<br><br> Если же их нет, то аргумент передается напрямую execvp, который более эффективен.<br><br> <b>exists EXPR</b><br><br> Возвращает TRUE, если в хэше есть ключи и даже в том случае,<br><br> когда значения VALUE не определены.<br><br> <b>exit EXPR</b><br><br> Обрабатывает EXPR и осуществляет немедленный выход с полученной<br><br> величиной.<br><br> $ans = <STDIN>;<br><br> exit 0 if $ans =~ /^[Xx]/;<br><br> Если EXPR опущено, то осуществляет выход с нулевым статусом.<br><br> <b>exp EXPR</b><br><br> Возвращает е (основание натурального логарифма e = 2.718281828...)<br><br> в степени EXPR. По умолчанию обрабатывается $_.<br><br> <b>fork</b><br><br> Делает системный вызов fork(2). Возвращает pid (идентификатор<br><br> процесса) дочернего процесса родительскому процессу и 0 дочернему процессу.<br><br> Значение не определено в случае неуспешного завершения команды. Неуспех может<br><br> произойти, например, в случае установки в системе ограничения на количество<br><br> процессов данного пользователя. Вот небольшой пример использования этой<br><br> функции.<br><br> unless ($pid = fork) {<br><br> unless (fork) {<br><br> exec "what you really wanna do";<br><br> die "no exec";<br><br> some_perl_code_here;<br><br> exit 0;<br><br> }<br><br> exit 0;<br><br> }<br><br> waitpid($pid,0);<br><br> <b>getc FILEHANDLE</b><br><br> Возвращает следующий символ из файла чтения,<br><br> присоединенный к FILEHANDLE или пустую строку в случае конца файла. Если<br><br> FILEHANDLE опущен, то считывание происходит из STDIN.<br><br> <b>goto LABEL</b><br><br> Эта функция осуществляет переход на точку программы LABEL и<br><br> продолжает выполнение программы с этой точки. Точка не может находиться внутри<br><br> подпрограммы или foreach цикла, так как в этих случаях требуется предварительная<br><br> инициализация.<br><br> Использовать в качестве LABEL выражение не рекомендуется, хотя такая возможность<br><br> и предоставляется.<br><br> <b>grep BLOCK, LIST</b><br><br> <b>grep EXPR, LIST</b><br><br> Обрабатывает BLOCK или EXPR для каждого элемента LIST<br><br> <br> и возвращает список элементов для которых значение выражения TRUE. В скалярном<br><br> контексте возвращает число элементов для которых EXPR TRUE.<br><br> <b>hex EXPR</b><br><br> Возвращает десятичное значение EXPR, интерпретируемого как<br><br> шестнадцатеричная строка. По умолчанию обрабатывает переменную $_.<br><br> <b>kill LIST</b><br><br> Посылает сигнал списку процессов LIST, первым элементом списка<br><br> должен быть номер сигнала. Возвращает число процессов, которым сигнал был<br><br> послан успешно. В отличие от shell, если номер сигнала отрицателен, то он посылается<br><br> группе процессов.<br><br> <b>int EXPR</b><br><br> Возвращает целую часть EXPR, если EXPR опущено, то<br><br> обрабатывает переменную $_.<br><br> <b>join EXPR,LIST</b><br><br> Соединяет в единую строку строки из LIST. При этом<br><br> в качестве разделителей между элементами LIST ставит значение EXPR. Например:<br><br> $_ = join( ':',$login,$passwd,<br><br> $uid,$gid,$gcos,$home,$shell);<br><br> <b>keys ASSOC_ARRAY</b><br><br> Возвращает обычный массив, состоящий из ключей<br><br> ассоциативного массива ASSOC_ARRAY. В скалярном контексте возвращает число<br><br> ключей.<br><br> @keys = keys %ENV;<br><br> <b>length EXPR</b><br><br> Возвращает длину EXPR в символах. По умолчанию обрабатывает<br><br> переменную $_.<br><br> <b>link OLDFILE,NEWFILE</b><br><br> Создает файл NEWFILE, присоединенный к файлу<br><br> OLDFILE. (В OS UNIX создание нескольких имен для одного файла) Возвращает 1<br><br> в случае успеха и 0 иначе.<br><br> <b>listen SOCKET, QUEUESIZE</b><br><br> Делает то же самое, что и одноименный системный<br><br> вызов. Возвращает TRUE в случае успеха, FALSE иначе.<br><br> <b>local EXPR</b><br><br> На самом деле гораздо эффективнее использовать функцию my.<br><br> Функция local делает перечисленные переменные локальными в блоке, подпрограмме,<br><br> eval или do. Если переменных более, чем одна, то они должны объединяться скобками.<br><br> sub RANGEVAL{<br><br> local($min,$max,$thunk) = @_;<br><br> local $result = '';<br><br> local $i;<br><br> for ($i = $min; $i < $max; $i++) {<br><br> $result = eval $thunk;<br><br> }<br><br> $result;<br><br> }<br><br> <b>log EXPR</b><br><br> Возвращает натуральный логарифм EXPR, по умолчанию обрабатывает<br><br> переменную $_.<br><br> <b>map EXPR,LIST</b><br><br> Подставляет каждый элемент из списка LIST в EXPR (которое<br><br> может быть блоком) и возвращает список полученных после обработки величин.<br><br> <br> @chars = map(chr, @nums);<br><br> <b>mkdir FILENAME,MODE</b><br><br> Создает директорию с именем FILENAME и правами доступа<br><br> указанными в переменной MODE. В случае успеха возвращает 1, в противном случае<br><br> возвращает 0 и устанавливает значение переменной $!(errno).<br><br> <b>my EXPR</b><br><br> Эта функция (так же как и описанная ранее функция local) делает<br><br> перечисленные переменные локальными в пределах блока, подпрограммы, eval или do.<br><br> Если список состоит более чем из одного элемента, то он должен быть заключен в<br><br> скобки. Все элементы в списке должны быть фактическими параметрами. В отличие от local,<br><br> переменные локализованные функцией my не видны снаружи блока, подпрограммы или<br><br> другой конструкции, внутри которой my употребляется.<br><br> <b>next LABEL</b><br><br> Употребляется подобно continue оператору в C - запускает<br><br> следующую итерацию цикла.<br><br> line: while (<STDIN>) {<br><br> next line if /^#/;<br><br> ...<br><br> }<br><br> <b>oct EXPR</b><br><br> Возвращает десятичное значение EXPR, интерпретируемого как<br><br> строка в восьмеричном формате. (Если строка начинается с 0x, то интерпретируется,<br><br> как строка в шестнадцатеричном формате.)<br><br> <b>open FILEHANDLE,EXPR</b><br><br> Открывает файл, имя которого описано в переменной<br><br> EXPR и привязывает его к FILEHANDLE. Если EXPR опущено, то переменная с таким<br><br> же именем как FILEHANDLE содержит имя файла. Если имя файла начинается со знака:<br><br> ?<br><br> < файл открывается на чтение.<br><br> > файл открывается на запись.<br><br> >> файл открывается для добавления.<br><br> | имя файла расценивается как команда,<br><br> с которой будет организован программный канал,<br><br> то есть вывод в дескриптор FILEHANDLE будет<br><br> передаваться на вход программе EXPR.<br><br> Если знак | указывается после имени команды, то вывод этой команды<br><br> будет ассоциирован с дескриптором FILEHANDLE, из которого будет производиться<br><br> чтение. Интересно, что<br><br> нельзя открыть двойной программный канал, то есть ассоциировать ввод и вывод<br><br> команды с дескриптором файла (что соответствовало бы системному вызову popen в<br><br> UNIX).<br><br> В случае, когда имя файла оканчивается вертикальной чертой, оно расценивается<br><br> как имя команды, вывод которой будет интерпретироваться как ввод из файла<br><br> <br> (аналог функции popen(3)).<br><br> open(LOG, '>>/usr/spool/news/twitlog');<br><br> <b>open DIRHANDLE,EXPR</b><br><br> Открывает директорию с именем EXPR, возвращает TRUE<br><br> в случае успеха.<br><br> <b>ord EXPR</b><br><br> Возвращает числовое значение в таблице ASCII первого символа EXPR.<br><br> По умолчанию обрабатывает переменную $_.<br><br> <b>print FILEHANDLE,LIST</b><br><br> Печатает строку или несколько строк, разделенных<br><br> запятой. FILEHANDLE может быть именем скалярной переменной, содержащей дескриптор<br><br> файла. Если эта переменная опущена то печать идет в выбранный канал вывода.<br><br> Если переменная LIST тоже опущена, то печатает переменную $_ в STDOUT.<br><br> <b>printf FILEHANDLE, LIST</b><br><br> Эквивалентно print FILEHANDLE, sprintf(LIST).<br><br> Первый аргумент LIST интерпретируется как формат печати.<br><br> <b>rand EXPR</b><br><br> Возвращает выбранное случайным способом значение между 0 и EXPR.<br><br> EXPR должно быть положительным. По умолчанию производит выборку в диапазоне между<br><br> 0 и 1. (Замечание: если ваша функция постоянно возвращает слишком большие или<br><br> слишком малые значения, то скорее всего была допущена ошибка при компиляции<br><br> вашей версии Perl. Было установлено неверное значение RANDBITS.)<br><br> <b>read FILEHANDLE,SCALAR,LENGTH,OFFSET</b><br><br> Считывает LENGTH байт<br><br> данных из FILEHANDLE в переменную SCALAR. Возвращает число считанных байт или неопределенное значение<br><br> в случае ошибки. Если вы хотите считать данные не с начала строки,<br><br> то для этого нужно установить значение переменной OFFSET.<br><br> <b>readlink EXPR</b><br><br> Возвращает значение символьной ссылки, если она существует.<br><br> Если же ее нет, то выдает fatal error и устанавливает значение переменной $!.<br><br> По умолчанию обрабатывает переменную $_.<br><br> <b>redo LABEL</b><br><br> Перезапускает цикл без повторной обработки условия. Блок continue,<br><br> если он есть не исполняется. Если LABEL опущена, то команда выполняется для внутреннего<br><br> цикла.<br><br> line: while(<STDIN>) {<br><br> while ($_ ne '\') {<br><br> if (ord $_ < 86) {<br><br> ...<br><br> }<br><br> redo line;<br><br> }<br><br> print;<br><br> }<br><br> <b>ref EXPR</b><br><br> Возвращает TRUE, если EXPR является ссылкой и FALSE в противоположном<br><br> случае. Полученное значение зависит от типа объекта на который указывает ссылка.<br><br> <br> Существует несколько встроенных типов данных:<br><br> <li> REF<li> SCALAR<li> ARRAY<li> HASH<li> CODE<li> GLOB<br><br> Если объект, на который указывает ссылка, находится в пакете (package), то в таком<br><br> случае возвращается имя пакета.<br><br> if (ref($r) eq "HASH") {<br><br> print " Это ссылка на ассоциативный массив.\n";<br><br> }<br><br> if (!ref($r)) {<br><br> print " А это не ссылка вовсе! \n";<br><br> <b>require EXPR</b><br><br> Используется для подключения модулей.<br><br> require "oraperl.pm";<br><br> <b>reset EXPR</b><br><br> Обычно используется в continue блоке в конце цикла для<br><br> переустановки значений переменных. EXPR интерпретируется как список отдельных<br><br> символов. Значения переменных и массивов, имена которых начинаются с одного из этих<br><br> символов списка переустанавливаются. Например:<br><br> ?<br><br> reset 'X' переустановит все X переменные<br><br> reset 'a-z' переустановит все переменные,<br><br> имена которых состоят из маленьких букв.<br><br> <b>rm FILENAME</b><br><br> Удаляет файл или директорию с заданным именем. Возвращает<br><br> 1 в случае успеха, 0 в противоположном случае и устанавливает значение переменной<br><br> $!. По умолчанию обрабатывает аргумент $_.<br><br> <b>scalar EXPR</b><br><br> Выражение будет трактоваться в скалярном контексте. Возвращает<br><br> значение EXPR.<br><br> <b>seek FILEHANDLE, POSITION, WHENCE</b><br><br> Позволяет установить курсор<br><br> в файле, определенном в переменной FILEHANDLE, на позицию POSITION в режиме,<br><br> указанном в переменной WHENCE. Если переменная WHENCE содержит значение 0, то<br><br> позиция отсчитывается от начала файла, если 1 то от текущей позиции и если 2, то<br><br> от конца файла. Возвращает 1 в случае успеха и 0 иначе.<br><br> <b>select FILEHANDLE</b><br><br> Возвращает текущий выбранный FILEHANDLE. Направляет<br><br> вывод в FILEHANDLE.<br><br> <b>select RBITS,WBITS,EBITS,TIMEOUT</b><br><br> Вызывает системный вызов select(2) с<br><br> определенной аргументами битовой маской.<br><br> <b>shift ARRAY</b><br><br> Сдвигает массив ARRAY влево с удалением первого элемента и<br><br> возвращает удаленный элемент.<br><br> Если в массиве нет элементов, то возвращает неопределенное значение. Если ARRAY<br><br> опущен, то обрабатывает массив @ARGV в главной программе и массив @_ в подпрограммах.<br><br> <b>sin EXPR</b><br><br> Возвращает синус выражения EXPR (выраженного в радианах). <br><br> <br> Если<br><br> аргумент опущен, то обрабатывается переменная $_.<br><br> <b>sleep EXPR</b><br><br> Дает процессу команду остановки на EXPR секунд. Если аргумент<br><br> опущен, то процесс зависает навсегда. В таком случае ``сон'' можно прервать, послав ему<br><br> сигнал. Возвращает число секунд, в течение которых процесс был в состоянии остановки.<br><br> <b>socket SOCKET,DOMAIN,TYPE,PROTOCOL</b><br><br> Создает сокет и привязывает его к<br><br> дескриптору файла SOCKET. Остальные параметры описываются так же, как и в одноименном<br><br> системном вызове. В начале программы необходимо написать use Socket;.<br><br> <b>sort SUBROUTINE,LIST</b><br><br> Сортирует аргументы из LIST и возвращает отсортированный список.<br><br> Если список является массивом, то несуществующие элементы массива не учитываются<br><br> и не возвращаются. Ниже приведено несколько примеров.<br><br> @articles = sort @files;<br><br> - Лексическая сортировка без использования подпрограммы.<br><br> @articles = sort{$a cmp $b} @files;<br><br> - То же самое, но с использованием подпрограммы.<br><br> @articles = sort{$a <=> $b} @files;<br><br> - Численная сортировка по возрастанию.<br><br> <b>splice ARRAY,OFFSET,LENGTH,LIST</b><br><br> Удаляет из массива ARRAY элементы,<br><br> отмеченные в переменных OFFSET и LENGTH и заменяет их элементами списка LIST,<br><br> если таковые имеются. Возвращает удаленные из массива элементы. Длина массива<br><br> растет или уменьшается, если это необходимо. Если переменная LENGTH опущена, то<br><br> удаляет все, начиная с OFFSET.<br><br> <b>split /PATTERN/,EXPR,LIMIT</b><br><br> Разбивает строку на массив строк и возвращает<br><br> его. В скалярном контексте возвращает число полученных полей и помещает<br><br> полученный массив в @_. Если EXPR опущено то разбивается строка $_. Если PATTERN<br><br> тоже опущен, то разбиение происходит по символу пробел. Символы, указанные в<br><br> PATTERN, служат разделителями для полей. Разделители могут быть длиннее, чем один<br><br> символ. Если переменная LIMIT задана и имеет неотрицательное значение, то разбиение<br><br> будет происходить на число полей не более указанного в LIMIT. Если переменная<br><br> не определена, то пустые поля отбрасываются, если имеет отрицательное значение,<br><br> то это интерпретируется Perl-ом, как отсутствие ограничения на длину возвращаемого<br><br> <br> массива. Если шаблону соответствует пустая строка, то EXPR будет разбито на<br><br> отдельные символы. Например:<br><br> print join(':',split(/ */,'hi there'));<br><br> напечатает строку h:i:t:h:e:r:e.<br><br> <b>sqrt EXPR</b><br><br> Возвращает корень квадратный из значения EXPR. По умолчанию<br><br> обрабатывает переменную $_.<br><br> <b>system LIST</b><br><br> Делает то же самое, что и функция exec LIST, за одним исключением:<br><br> вместо того, чтобы просто начать выполнять программу , как это делает exec, system<br><br> делает fork и порождает еще один процесс, причем родительский процесс ждет завершения<br><br> дочернего.<br><br> <b>tell FULEHANDLE</b><br><br> Возвращает текущую позицию курсора в файле FILEHANDLE.<br><br> Если аргумент опущен, то обрабатывает файл, который читался последним.<br><br> <b>tie VARIABLE,PACKAGENAME,LIST</b><br><br> Привязывает переменную к пакету, который будет заносить<br><br> значения в эту переменную. Переменная VARIABLE содержит имя переменной, переменная<br><br> PACKAGENAME содержит имя пакета. Дополнительные аргументы передаются методу new<br><br> этого пакета. Обычно это такие аргументы, которые в дальнейшем могут быть переданы<br><br> в качестве параметров dbm_open() функции из C.<br><br> tie(%HIST, NDBM_File,'/usr/lib/news/history', 1, 0);<br><br> while(($key,$val) = each %HIST) {<br><br> print $key, '= ', unpack('L',$val),"\n";<br><br> }<br><br> untie(%HIST);<br><br> Пакет, реализующий ассоциативный массив, должен содержать следующие методы: <br><br> TIEHASH objectname, LIST <br><br> DESTROY this <br><br> FETCH this, key <br><br> STORE this, key, value <br><br> DELETE this, key <br><br> EXISTS this, key <br><br> FIRSTKEY this <br><br> NEXTKEY this, lastkey<br><br> Пакет, реализующий обычный массив, должен содержать следующие методы: <br><br> TIEARRAY objectname, LIST <br><br> DESTROY this <br><br> FETCH this, key <br><br> STORE this, key, value <br><br> Пакет, реализующий скаляры, должен содержать следующие методы : <br><br> TIESCALAR objectname, LIST <br><br> DESTROY this <br><br> FETCH this <br><br> STORE this, value <br><br> <b>truncate FILEHANDLE, LENGTH</b><br><br> Обрезает файл FILEHANDLE до заданной длины.<br><br> <b>undef EXPR</b><br><br> Делает значение EXPR неопределенной величиной, в случае,<br><br> когда аргумент опущен ничего не меняет. Не следует пытаться применять эту<br><br> функцию к зарезервированным переменным, потому что результат может оказаться<br><br> <br> непредсказуемым.<br><br> <b>unlink LIST</b><br><br> Удаляет список файлов и возвращает число удачно удаленных<br><br> файлов. Если вы не являетесь суперпользователем, то эта функция не может<br><br> удалять каталоги. Даже в случае, когда программа запускается с привилегиями<br><br> суперпользователя, будьте осторожны, лучше использовать функцию rmdir.<br><br> <b>untie VARIABLE</b><br><br> Разрывает связь между переменной и пакетом.<br><br> <b>unshift ARRAY, LIST</b><br><br> Производит действие противоположное действию функции<br><br> shift. Присоединяет LIST к началу массива ARRAY и возвращает новое количество<br><br> элементов в массиве.<br><br> <b>use Module LIST</b><br><br> Осуществляет присоединение модуля к программе.<br><br> use strict qw(subs,vars,refs);<br><br> <b>values ASSOC_ARRAY</b><br><br> Возвращает обычный массив, состоящий из значений<br><br> ассоциативного массива ASSOC_ARRAY. В скалярном контексте возвращает число<br><br> элементов полученного массива. Элементы массива могут располагаться в произвольном<br><br> порядке.<br><br> <b>wantarray</b><br><br> Возвращает TRUE, если контекст исполняющейся подпрограммы<br><br> списковый, FALSE в противоположном случае.<br><br> <b>write</b><br><br> создает запись (возможно состоящую из нескольких строк) в<br><br> соответствующем файле, используя формат ассоциированный с этим файлом. Формат<br><br> для текущего канала вывода может быть установлен посредством присваивания<br><br> переменной $~{ } имени формата.<br><br> <h1>Выполнение запросов к базам данных</h1> Для выполнения запросов к базе данных используется тег DBQUERY.<br> Этот тег имеет следующий синтаксис:<br> <DBQUERY NAME="имя запроса"<br> DATASOURCE="имя источника данных odbc"<br> SQL="sql выражение"<br> TIMEOUT=n MAXROWS=n DEBUG><br> Атрибут NAME определяет имя<br> запроса, которое используется далее для отображения результата<br> выполнения запроса. Имя запроса должно начинаться с буквы и может<br> содержать буквы и цифры (пробелов быть не должно).<br> Атрибут DATASOURCE задает<br> имя источника данных ODBC,<br> который должен быть создан с помощью интерфейса администратора<br> Cold Fusion.<br> Ключевым атрибутом тега DBQUERY,<br> является атрибут SQL, который<br> собственно и определяет запрос к базе данных на языке SQL<br> (для улучшения читабельности, допускается расположение значения<br> атрибута SQL на нескольких<br> строках).<br> Создавая SQL запрос, следует<br> помнить, что конкретная база данных может иметь свои особенности<br> в синтаксисе SQL, использование<br> которых ограничивается этой базой данных. Чтобы проверить, является<br> ли конкретное SQL выражение<br> совместимым с ODBC и независимым<br> от конкретной базы данных, лучше всего использовать Microsoft<br> Query, входящий в состав Microsoft<br> Office. Для этого нужно в меню Microsoft<br> Query выбрать "Файл/Выполнить<br> SQL", в появившемся<br> окне диалога ввести предложение SQL,<br> выбрать источник данных ODBC,<br> нажав на кнопку "Источники...",<br> после чего нажать на кнопку "Выполнить".<br> Этот продукт можно также использовать и для создания SQL<br> - выражений, используя для этого визуальные средства создания<br> запросов. Получить SQL - выражение<br> созданного таким образом запроса можно нажав на кнопку "SQL"<br> в панели инструментов.<br> Атрибут MAXROWS является необязательным<br> и определяет максимальное количество записей, которые могут быть<br> возвращены в результате выполнения запроса.<br> Атрибут TIMEOUT также является<br> необязательным и определяет максимальное количество миллисекунд<br> для выполнения запроса, до выдачи сообщения об ошибке. <br> Заметим,<br><br> что этот атрибут поддерживается только некоторыми ODBC<br><br> - драйверами (например, драйвером<br><br> для MS SQL Server 6.0).<br><br> Атрибут DEBUG используется<br><br> для отладки запросов. При наличии этого атрибута пользователю<br><br> отправляется дополнительная информация о выполнении этого запроса,<br><br> такая как текст выполненного SQL<br><br> - запроса, число возвращенных записей и др.<br><br> Приведем пример запроса с именем 'AllPersons',<br><br> который возвращает все записи таблицы 'Persons'<br><br> из базы данных, с которой связан источник данных ODBC<br><br> с именем 'Person DB':<br><br> <DBQUERY NAME="AllPersons"<br><br> DATASOURCE="Person DB"<br><br> SQL="select * from Persons"><br><br> Для динамической настройки SQL -<br><br> выражения можно использовать параметры, переданные в шаблон. Это<br><br> могут быть параметры, переданные из формы, URL,<br><br> а также переменные CGI. Параметры,<br><br> используемые внутри SQL -<br><br> выражения, должны быть обрамлены символом "#"<br><br> (например #Name#).<br><br> При обработке запроса Cold<br><br> Fusion ищет параметр с таким именем среди параметров, полученных<br><br> из формы, в URL или среди<br><br> переменных CGI. При нахождении<br><br> подходящего параметра его значение подставляется вместо соответствующей<br><br> ссылки на параметр.<br><br> <b>Примеры использования параметров в SQL<br><br> -выражении</b><br><br> Пример 1<br><br> Предположим что обрабатывается URL<br><br> "/cgi-shl/dbml.exe?Template=prs.dbm&Id=22",<br><br> а атрибут SQL в DBQUERY<br><br> имеет вид<br><br> SQL="select * from Persons<br><br> where Id = #Id#",<br><br> тогда в базу данных будет передано следующее SQL - выражение:<br><br> select * from Persons where Id<br><br> = 22 .<br><br> Пример 2<br><br> Предположим, что в шаблон передан параметр FirstLetters<br><br> и нужно найти в таблице Persons<br><br> записи, в которых первые<br><br> буквы в поле FullName совпадают<br><br> со значением этого параметра. Значение атрибута SQL<br><br> в этом случае будет следующим:<br><br> SQL="select * from Persons<br><br> where FullName like '#FirstLetters#%'"<br><br> Следует обратить внимание на то, что маска, состоящая из параметра<br><br> и символа '%', в отличие от<br><br> предыдущего примера, обрамлена одинарными кавычками.Это связано<br><br> с тем, что поле Id из примера<br><br> 1 имеет числовой тип, а поле<br><br> FullName - текстовый тип (синтаксис<br><br> SQL требует, чтобы текстовые<br><br> значения всегда были обрамлены одинарными кавычками).<br><br> Для того чтобы задать маску, в примере использовался символ '%',<br><br> который в SQL - запросах соответствует<br><br> произвольной последовательности символов. Также для определения<br><br> маски может использоваться символ '_'<br><br> (подчерк), соответствующий одному<br><br> произвольному символу.<br><br> <h1>Вывод результата выполнения запроса в виде таблицы</h1> Теги DBTABLE и DBCOL<br> всегда употребляются вместе для отображения результата выполнения<br> запроса в виде таблицы.<br> Атрибуты тега DBTABLE:<br> <table border=1><br> <tr> <td><li>QUERY</td> <td>- имя DBQUERY, для которого нужно отобразить данные;</td> </tr> <tr> <td><li>MAXROWS</td> <td>- максимальное количество записей, которое может быть отображено в таблице;</td> </tr> <tr> <td><li>COLSPACING</td> <td>- количество пробелов, которые будут вставлены между колонками (по умолчанию 2);</td> </tr> <tr> <td><li>HEADERLINES</td> <td>- количество строк, которые будут отведены для заголовка (по умолчанию 2);</td> </tr> <tr> <td><li>HTMLTABLE</td> <td>- при наличие этого тега результат запроса будет отображен в виде HTML - таблицы, в противном случае будет использован тег HTML <PRE>.</td> </tr> <tr> <td><li>BORDER</td> <td>- используетя только вместе с атрибутом HTMLTABLE для отображения рамки в таблице.</td> </tr> </table><br> Атрибуты тега DBTABLE:<br> <table border=1><br> <tr> <td><li>HEADER</td> <td>- текст, который будет выводиться как заголовок колонки;</td> </tr> <tr> <td><li>WIDTH</td> <td>- ширина колонки в символах (по умолчанию 20);</td> </tr> <tr> <td><li>ALIGN</td> <td>-выравнивание содержимого колонки (LEFT, RIGHT и CENTER);</td> </tr> <tr> <td><li>TEXT</td> <td>-заключенный в кавычки текст, определяющий содержимое колонки, в котором могут находиться те же теги, ссылки на параметры и др., что и в теге DBOUTPUT.</td> </tr VALIGN="TOP"><br> </table><br> Приведем пример использования тегов DBTABLE<br> и DBCOL:<br> <DBTABLE QUERY "AllPersons"<br> MAXROWS=20><br> <DBCOL HEADER="Фамилия<br> Имя Отчество" WIDTH="30" TEXT="#FullName#"><br> <DBCOL HEADER="Телефон"<br> WIDTH="10" TEXT="#Phone#"><br> <DBCOL HEADER="Дата рождения"<br> WIDTH="9" TEXT="# DateFormat(Birthday)#"><br> </DBTABLE><br><br> <h1>Вызов метода</h1> Существует два способа обратиться к методу. Во-первых, можно вызвать его просто<br> как подпрограмму. Но в таком случае не работает механизм наследования. Второй способ<br> лучше просто проиллюстрировать примерами.<br> $fred = find Critter "Fred";<br> display $fred, 'Height', 'Weight';<br> Это можно записать так:<br> display {find Critter "Fred"} 'Height', 'Weight';<br><br> <h1>Взаимодействие Cold Fusion с базами данных</h1> Cold Fusion позволяет динамически<br> генерировать HTML документы<br> основанные на запросах пользователя. Эти запросы передаются в<br> Cold Fusion CGI - скрипт (DBML.EXE),<br> который пересылает данные в Cold<br> Fusion Engine обрабатывающий эти данные в соответствии<br> с заданным шаблоном, выполняя необходимые запросы и генерируя<br> HTML документ, который отправляется<br> пользователю.<br> Основой динамического создания документов являются специальные<br> теги, входящие в язык разметки DBML,<br> ориентированные на работу с базами данных.<br> Почти все основные возможности Cold<br> Fusion сосредоточены в четырех тегах:<br> <li>DBQUERY - выполнение SQL<br> - запроса к базе данных;<br> <li>DBINSERT & DBUPDATE - создание<br> и модификация записей в базе данных;<br> <li>DBOUTPUT - отображение<br> результата запроса, допускающее его произвольное размещение среди<br> HTML - тегов.<br> Шаблон, на основе которого генерируется HTML<br> - документ, представляет собой комбинацию тегов<br> HTML и DBML:<br> <li>HTML - теги используются<br> для форматирования как постоянной части документа, так и результатов<br> запросов. Например, можно определить полужирный шрифт для каждого<br> поля и разделительные линии между записями.<br> <li>DBML - теги используются<br> для формирования запроса к базе данных, а также определяют где<br> и как будут отображены результаты запросов.<br> На рисунке 5-1 показывается, как Cold<br> Fusion обрабатывает запрос, полученный от клиента:<br> <img src="coldfusi.gif" alt="Взаимодействие Cold Fusion с базами данных"><br>Рисунок 5-1<br> <li>Когда пользователь нажимает кнопку типа "Submit"<br> в форме или выбирает гипертекстную ссылку в документе,<br> Web - браузер отправляет запрос<br> на Web - сервер.<br> <li>Web - сервер, если в запросе<br> указан DBML - шаблон, запускает<br> процесс Cold Fusion, отправляя<br> ему данные полученные от клиента.<br> <li>Cold Fusion принимает<br> данные полученные от клиента обрабатывает теги DBML<br> в шаблоне, включая подготовку запроса к базе данных и форматирование,<br> которое будет использоваться в результирующем документе.<br> <li>Cold Fusion взаимодействует<br> с базой данных используя ODBC.<br> <li>Cold Fusion динамически<br> генерирует HTML - документ<br> содержащий результат выполнения запросов к базе данных и возвращает<br> его Web - серверу. Cold<br> Fusion может также динамически генерировать почтовое сообщение<br> и отправлять его через почтовый SMTP<br> - сервер.<br> <li>Web - сервер возвращает<br> сгенерированный HTML - документ<br> Web - клиенту.<br><br> <h1>Взаимодействие с СУБД</h1> Perl позволяет осуществлять доступ к различным СУБД. Здесь будет освещен вопрос<br> доступа к СУБД Oracle.<br><br> <h1>WWW и анимация</h1> Существует несколько способов ``оживления'' WWW-документов с помощью анимации,<br> из которых наиболее употребительными являются так называемые ``анимированные GIF-<br> файлы'' и программы на языке Java.<br> Спецификация формата GIF от 1989-го года позволяет хранить в одном файле<br> несколько изображений и задавать порядок их отображения. На этом свойстве<br> строится механизм, называемый ``animated-GIFs'', позволяющий ``оживить''<br> статические WWW-страницы. Последние версии таких браузеров, как Netscape<br> Navigator и Microsoft Internet Explorer корректно отображают анимированные<br> GIF-файлы. Фирмы-производители этих браузеров даже предоставляют небольшие<br> анимированные рекламные изображения для тех, кто желает отметить на своих<br> страницах, что они оптимизированы для просмотра в их браузерах.<br> Для создания анимированных GIF-файлов на платформе MS Windows можно<br> применять ранее упоминавшуюся программу Gif Construction Set for Windows.<br> Последние версии многих иллюстративных пакетов (например, CorelXARA) имеют<br> встроенные возможности для создания анимаций в GIF-файлах.<br><br> <h1>WWW - сервер NCSA HTTPD</h1> Как было сказано ранее, одним из ключевых элементов технологии WWW<br> является WWW-сервер. Стандартом де-факто для Unix-систем стало программное обеспечение (ПО) WWW-сервера<br> Национального Центра по Суперкомпьютерным Приложениям (NCSA) Иллинойского Университета. Все вновь создаваемые продукты поддерживают полную совместимость<br> с ПО NCSA по режимам работы и форматом данных. Cервер NCSA является постоянно совершенствуемым<br> продуктом, отражающим последние веяния WWW-технологии.<br> Созданная относительно недавно "Apache Group" разрабатывает свое программное обеспечение<br> WWW - сервера на базе продукта NCSA HTTPD.<br> Глава данного отчета посвящена установке и администрированию<br> WWW-сервера NCSA HTTPD.<br><br> <h1>WWW (World Wide Web) и средства интерактивного взаимодействия</h1> Цель данной главы познакомить пользователя с той частью WWW-технологий<br> которая связана с созданием интерактивных интерфейсов и предполагается<br> что пользователь знаком с основами WWW, HTML и С/С++.<br> В общем случае, интерактивный интерфейс пользователя представляет собой систему, обеспечивающую взаимодействие пользователя и программы.<br> Для WWW, интерактивный интерфейс можно определить как последовательность HTML-документов, реализующих<br> интерфейс пользователя. Можно также условно классифицировать принципы построения интерфейса по типу формирования HTML-документа:<br> <li>статический<br> <li>динамический<br> В первом случае источником интерфейса является HTML-документ, созданный в каком-либо текстовом или HTML-ориентированном редакторе.<br> Следовательно, данный документ остается неизменным в течение использования. Во втором случае источником интерфейса является HTML-документ<br> сгенерированный cgi-модулем. Следовательно, появляется некоторая гибкость в видоизменении интерфейса во время использования.<br> Таким образом, можно ввести понятие интерактивного интерфейса<br> для WWW.<br> Интерактивный интерфейс для WWW представляет собой последовательность статических или динамически формируемых HTML-документов,<br> реализующих интерфейс пользователя.<br> Практически любая задача, решающая проблему получения данных от клиента, связана с построением интерфейса. Наиболее интересным<br> является построение интерфейсов к различным базам данных, доступ к SQL-серверу, получение информации от периферийных устройств, создание клиентских рабочих мест. Все это возможно посредством<br> CGI(Common Gateway Interface).<br> Common Gateway Interface (CGI)<br> является стандартом интерфейса внешней прикладной программы с<br> WWW сервером.<br> Задача построения вышеназванных интерфейсов делится на две части:<br> <li>Клиентская часть<br> <li>Серверная часть<br> <img src="twopart.gif" alt="WWW (World Wide Web) и средства интерактивного взаимодействия"><br> Рисунок 4-1. Две части интерактивного интерфейса.<br><br> <h1>Заглавные теги</h1> Начиная писать HTML-документ, имеет смысл идентифицировать его как<br> таковой. Такая идентификация достигается путем вставления в самое начало<br> документа тегов <!DOCTYPE HTML PUBLIC ``-//W3C//DTD HTML 3.2//EN''> и<br> <HTML> (соответственно, в конец документа, закрывающего тега </HTML>; никогда не забывайте закрывать скобки!).<br> Тег DOCTYPE является тегом языка SGML и объявляет, что документ будет<br> описан в соответствии со спецификацией HTML 3.2. Тег HTML указывает на начало<br> документа. Теперь пора подумать об информационном наполнении. Начнем, естественно, с заголовка.<br> Заголовок HTML-файла находится в обязательной секции <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/>,<br>   которая должна находиться в самом начале, то есть сразу после тега <HTML>. Оформляется заголовок с помощью<br> тега <TITLE>. Назовем наш документ ``The first homepage''. Ниже приведен листинг получившегося HTML-документа:<br> <HTML><br> <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/><br> <TITLE>The first homepage</TITLE><br> </HEAD><br> </HTML><br> Попробуем просмотреть этот файл с помощью какой-нибудь программы просмотра,<br> например, Navigator фирмы Netscape Communications Corp. После загрузки<br> экран программы остался пустым. ``А где же заголовок?'',- спросит возмущенный<br> читатель. Присмотритесь повнимательней к ЗАГОЛОВКУ ОКНА программы просмотра<br> в оконной системе и убедитесь, что заголовок отображен именно там. Тег <TITLE><br> позволяет задавать название для всего документа.<br> Это название будет появляться в заголовке окна программы просмотра, а<br> также будет появляться в списке закладок (bookmarks, shortcuts в различных<br> терминологиях) при создании таковых.<br> Другими элементами секции <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/>...</HEAD> являются:<br> <BASE параметры> - тег для указания URL документа. Тег имеет такие параметры:<br> <b>HREF</b> - указывает базовый URL<br> для документа. Замечание: URL должен быть указан в полной форме.<br> <b>TARGET</b> - указывает окно для отображения документов, на которые ссылается данный документ.<br> <STYLE> - тег, зарезервированный для использования в будущем для<br> <br> так называемых ``стилей'' (stylesheets). Точный синтаксис тега пока<br><br> недокументирован.<br><br> <META параметры> - тег, который теоретически должен использоваться для включения в документ некой специфичной информации для программ-индексаторов,<br><br> каталогизаторов и т.д. Кроме того, у него есть несколько<br><br> полезных параметров, позволяющих страницам сменять друг друга по прошествии<br><br> определенных промежутков времени.<br><br> Тег имеет следующие параметры:<br><br> <b>HTTP-EQUIV=``refresh''</b> - указывает программе просмотра, что нужно перепрыгнуть на страничку, указанную в параметре CONTENT по прошествии указанного там же промежутка времени.<br><br> <b>CONTENT=``number; url=URL''</b> - задает временной интервал number и URL для команды HTTP-EQUIV=``refresh''.<br><br> <b>NAME=``description'' или NAME=``keywords''</b> - указывает серверу, как интерпретировать параметр CONTENT - как описание документа или как список ключевых слов.<br><br> <b>CONTENT=``text или список значений''</b> - это не опечатка. У параметра CONTENT два смысла: один для команды HTTP-EQUIV=``refresh'', другой для команды NAME. В последнем случае значение параметра определяет либо описание документа (если параметр NAME=``description''), либо список разделенных запятыми ключевых слов (если параметр NAME=``keywords'').<br><br> Теперь перейдем к оформлению содержимого документа. В терминах HTML содержимое документа называется его ТЕЛОМ, или по-английски - BODY. Именно так и называется<br><br> тег, в поле действия которого находится все содержимое (то есть, оно заключено между внутри тега <BODY>...</BODY>). Тег <BODY>...</BODY> может<br><br> содержать дополнительные параметры, позволяющие изменить цвета,<br><br> используемые в документе или назначить фоновую картинку:<br><br> <b>BGCOLOR</b> - определяет цвет фона документа. Цвет может быть задан как RGB-триплет (см. Приложение П1 к отчету) (например, BGCOLOR="#FFFFFF"--белый цвет), или быть одним из предопределенных символьных имен:<br><br> aquablackbluefuchsia<br><br> gray green lome maroon<br><br> navy olive purple red<br><br> silver teal white yellow<br><br> <b>BACKGROUND</b> - позволяет задать фоновую картинку для документа.Картинка будет размножена (tiled) и покроет всю видимую площадь области отображения окна программы просмотра.<br><br> <b>TEXT</b> - задает цвет текста документа. Цвет задается так же как и для параметра BGCOLOR.<br><br> <b>LINK</b> - задает цвет для текста и рамок изображений в активных зонах документа, содержащих ссылки (anchors).<br><br> <b>VLINK</b> - (Visited LINKs color) задает цвет для ранее выбранных ссылок.<br><br> <b>ALINK</b> - (Active LINKs color) задает цвет для ссылок <b>в момент</b> выбора.<br><br> <h1>Заголовки</h1> Если посмотреть на получившуюся к этому моменту страницу, то она<br> покажется однотонной и малопривлекательной. С первого взгляда даже<br> непонятно, о чем она (если не смотреть на заголовок окна). Странице не<br> хватает ``настоящего'' заголовка, то есть, заголовка в теле самого<br> документа. HTML различает шесть различных видов заголовков. Для<br> их создания используются теги <H1>...</H1>,...,<H6>...</H6>.<br> Название тегов происходит от английского слова Heading (то есть,<br> заголовок) что определяет их использование. Размер 1 соответствует<br> самому крупному шрифту, размер 6 самому мелкому. Итак, озаглавим нашу<br> страницу, напишем перед основным текстом строчку<br> <H1>Welcome to my homepage!</H1><br> Теперь просмотрим нашу страницу в браузере. Теперь страница смотрится<br> гораздо лучше чем раньше. Теги <Hn> являются блочными: в месте их применения происходит<br> разрыв абзацев.<br><br> <h1>Занесение и модификация данных с использованием тегов DBINSERT и DBUPDATE</h1> При использовании тегов DBINSERT и DBUPDATE для занесения<br> или модификации данных, параметры должны быть переданы в шаблон<br> обязательно из формы, используя метод POST.<br> Для создания новой записи в базе данных используется тег DBINSERT,<br> а для модификации существующей записи используется тег DBUPDATE.<br> При использовании этих тегов необходимо определить атрибуты DATASOURCE<br> и TABLENAME. DATASOURCE это название источника данных ODBC,<br> содержащего редактируемую таблицу, а TABLENAME - имя этой таблицы.<br> Например, если источник данных ODBC<br> называется 'Person DB', а<br> таблица, в которой требуется создать запись - 'Person',<br> то тег DBINSERT в шаблоне<br> будет иметь следующий вид:<br> <DBINSERT DATASOURCE="Person<br> DB" TABLENAME="Person"><br> Параметры, переданные в шаблон должны совпадать с именами полей<br> таблицы, в которой создается (модифицируется) запись. В том случае,<br> если не все передаваемые параметры должны участвовать в этой процедуре,<br> используется атрибут FORMFIELDS,<br> в котором через запятую перечисляются имена полей таблицы, для<br> которых должны существовать одноименные параметры.<br> Особо следует отметить, что для того, чтобы использовать тег DBUPDATE<br> для модификации записи, в таблице должен быть определен<br> первичный ключ, а для всех полей включенных в первичный ключ из<br> обрабатываемой HTML-формы<br> обязательно должны быть переданы соответствующие параметры.<br> Теги DBINSERT и DBUPDATE<br> могут иметь также еще два необязательных атрибута:<br> <li>TABLEOWNER - для тех источников<br> данных которые поддерживают права собственности на таблицы (например,<br> SQL Server, Oracle и др.),<br> этот атрибут можно использовать, чтобы указать собственника таблицы.<br> <li>TABLEQUALIFIER - для различных<br> источников данных этот атрибут может иметь разный смысл. Так,<br> для SQL Server и Oracle<br> - это имя базы данных, в которой содержится таблица, а<br> для Intersolv dBase - это<br> директория в которой расположены DBF<br> файлы.<br> Пример<br> Пусть определена HTML -<br> форма для ввода данных:<br> <HTML><br> <br> <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/><br><br> <TITLE>Пример ввода данных<br><br> для создания записи</TITLE><br><br> </HEAD><br><br> <BODY><br><br> <FORM ACTION="/cgi-shl/dbml.exe?Template=example.dbm"<br><br> METHOD="POST"><br><br> ФИО : <INPUT TYPE="Text"<br><br> NAME="FullName"><br><br> Телефон : <INPUT TYPE="Text"<br><br> NAME="Phone"><br><br> Дата рождения : <INPUT TYPE="Text"<br><br> NAME="Birthday"><br><br> </FORM><br><br> </BODY><br><br> </HTML><br><br> Следующий шаблон, example.dbm,<br><br> которому будут переданы данные из формы создает запись в таблице<br><br> и выдает подтверждающее сообщение:<br><br> <DBINSERT DATASOURCE="Person<br><br> DB" TableName="Persons"<br><br> FORMFIELDS="FullName,Phone,Birthday"><br><br> <HTML><br><br> <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/><TITLE>Подтверждение</TITLE></HEAD><br><br> <BODY><br><br> <H1>Запись создана!</H1><br><br> </BODY><br><br> </HTML><br><br> <h1>Зарезервированные переменные</h1> В Perl есть имена имеющие специальное значение. Многие из них аналогичны<br> зарезервированным именам в shell. <br> Если вы хотите использовать длинные имена<br> переменных, в заголовке программы требуется сказать: <br><br> use English; <br><br> Многие переменные доступны только для чтения, то есть при попытке присвоения<br> такой переменной какого-либо значения напрямую или по ссылке происходит ошибка.<br> <b>$_</b><br> В эту переменную по умолчанию происходит ввод, присваивание, в нее<br> складываются результаты поиска по заданному образцу.<br> while(<>){...}<br> или, что то же самое:<br> while($_= <>) {...}<br> <b>$<digit></b><br> Эта переменная была описана в предыдущем параграфе. Она<br> доступна только для чтения, так же как и переменные $&, $`, $' и $+.<br> <b>$.</b><br> Эта переменная содержит номер строки, которая была почитана<br> последней из файла, который был прочитан последним. Она также доступна только<br> для чтения.<br> <b>$/</b><br> Содержит символ по которому разделяются вводимые записи. По умолчанию<br> содержит символ перевода строки. Она похожа на переменную RS из awk.<br> <b>$|</b><br> По умолчанию имеет значение 0. Если содержит ненулевое значение,<br> то происходит сброс буферов каждый раз после осуществления вывода<br> (на печать, на экран и т.д.).<br> <b>$,</b><br> Содержит символ-разделитель полей для оператора печати. Подобна<br> переменной OFS в awk.<br> <b>$</b><br> Содержит символ-разделитель записей для оператора печати.<br> Подобна переменной ORS в awk. (Вы можете определить $ вместо того,<br> чтобы печатать n в конце печати.)<br> <b>$"</b><br> Подобна переменной $,. Но используется при обращении к списку величин<br> в двойных кавычках (или другой строке, которая требует интерпретации). По<br> умолчанию содержит символ пробел.<br> <b>$;</b><br> Содержит символ-разделитель для эмуляции многомерных хэшей. Если<br> ссылаться на такой элемент хэша как $foo{$a,$b,$c} то реально это будет<br> происходить так: $foo{join($;,$a,$b,$c)}. Не путайте с @foo{$a,$b,$c},<br> так как это тоже самое, что($foo{$a},$foo{$b},$foo{$c}). По умолчанию<br> содержит значение \034 такое же как переменная SUBSEP в awk.<br> <b>$#</b><br> Формат для печати чисел. <br> Подобна переменной OFMT в awk. Первоначально<br><br> содержит значение %.20g.<br><br> <b>$%</b><br><br> Содержит номер текущей выводимой страницы.<br><br> <b>$=</b><br><br> Содержит длину текущей страницы (количество печатных срок), обычно<br><br> содержит значение 60.<br><br> <b>$-</b><br><br> Содержит значение, определяющее количество оставшихся на странице строк,<br><br> например количество еще не напечатанных строк для печатного канала вывода.<br><br> <b>$~ </b><br><br> Содержит имя текущего формата сообщений. Обычно имя дескриптора файла.<br><br> <b>$^</b><br><br> Содержит имя текущего формата заголовка страницы. Обычно содержит имя<br><br> дескриптора файла с добавлением в конце _TOP<br><br> <b>$:</b><br><br> Содержит множество символов после которых вывод сроки может быть<br><br> прерван и начат снова после перевода строки.<br><br> <b>$!</b><br><br> Если эта переменная используется в числовом контексте, то содержит<br><br> текущее значение errno (номер ошибки) со всеми обычными сообщениями. В строковом<br><br> контексте содержит соответствующее системное сообщение об ошибке.<br><br> <b>$@</b><br><br> Содержит сообщение о синтаксической ошибке, допущенной во время<br><br> исполнения последней команды eval(). Если содержит значение 0, то команда<br><br> была исполнена корректно. Но заметьте, что сообщения не накапливаются в этой<br><br> переменной.<br><br> <b>$$</b><br><br> Содержит идентификатор текущего процесса.<br><br> <b>$<</b><br><br> Содержит идентификатор пользователя (UID), которому принадлежит текущий<br><br> процесс.<br><br> <b>$></b><br><br> Содержит эффективный UID текущего процесса.<br><br> <b>$(</b><br><br> Содержит идентификатор группы (GID) пользователя, которому принадлежит<br><br> текущий процесс.<br><br> <b>$)</b><br><br> Содержит эффективный GID текущего процесса.<br><br> <b>$0</b><br><br> Содержит имя файла, в котором находится исполняемая программа.<br><br> <b>$ARGV</b><br><br> Содержит имя текущего файла, из которого происходит чтение.<br><br> <b>@ARGV</b><br><br> Содержит массив аргументов командной строки, которые были переданы<br><br> программе.<br><br> <b>@INC</b><br><br> Содержит список точек входа в программу, в которых используются<br><br> конструкции do EXPR, require и use.<br><br> <b>%INC</b><br><br> Содержит входы для каждого файла, который включается посредством<br><br> использования операторов do или require. Ключами являются имена файлов, а значениями<br><br> места их расположения.<br><br> <b>%ENV</b><br><br> Содержит текущее окружение процесса.Изменением содержимого<br><br> хэша можно изменить окружение порожденного (дочернего) процесса.<br><br> <b>%SIG</b><br><br> Этот хэш используется для установки обработчиков различных<br><br> сигналов. Например:<br><br> sub handler {<br><br> local($sig) = @_;<br><br> print "Caught a SIG$sig - shutting down\n";<br><br> close(LOG);<br><br> exit(0);<br><br> }<br><br> $SIG{'INT'} = 'handler';<br><br> $SIG{'QUIT'} = 'handler';<br><br> ...<br><br> $SIG{'INT'} = 'DEFAULT';<br><br> $SIG{'QUIT'} = 'IGNORE';<br><br>  <br> <a name="47"><h1>&nbsp;&nbsp;<img src="/8.gif">&nbsp;&nbsp;Базы данных: Разработка - Управление - Excel</h1> <ul> <li><a href="/578-1/index.htm">Базы данных</a><br> <li><a href="/579-1/index.htm">Разработка баз данных</a><br> <li><a href="/580-1/index.htm">СУБД и базы данных</a><br> <li><a href="/581-1/index.htm">Управление базами данных</a><br> <li><a href="/582-1/index.htm">Классика баз данных</a><br> <br> <li><a href="/583-1/index.htm">Софт для создания базы данных</a><br> <li><a href="/584-1/index.htm">SQL</a><br> <li><a href="/585-1/index.htm">Access</a><br> <li><a href="/586-1/index.htm">FoxProо</a><br> <li><a href="/587-1/index.htm">Расширенная оптимизация подзапросов в Oracle</a><br> <br> <li><a href="/588-1/index.htm">Informix</a><br> <li><a href="/589-1/index.htm">Линтер</a><br> <li><a href="/590-1/index.htm">Postgres</a><br> <li><a href="/591-1/index.htm">СУБД DB2</a><br> <li><a href="/592-1/index.htm">InterBase</a><br> <br> <li><a href="/593-1/index.htm">Excel</a><br> <li><a href="/594-1/index.htm">Таблицы Excel</a><br> <li><a href="/595-1/index.htm">Справка Excel</a><br> <li><a href="/596-1/index.htm">Программирование в Excel</a><br> <li><a href="/597-1/index.htm">Деньги в Excel</a><br> <br> <li><a href="/598-1/index.htm">Задачи Excel</a><br> </ul> <br> </div></div> </body></html>