4 Контрольные работы (только для ЗО).

advertisement
ИНСТИТУТ УПРАВЛЕНИЯ, БИЗНЕСА И ПРАВА
УЧЕБНО-МЕТОДИЧЕСКИЙ КОМПЛЕКС
СД.ДВ.03
«Высокоуровневые методы информатики и
программирования»
(индекс)
(наименование)
СПЕЦИАЛЬНОСТЬ(И)
080802.51
ПРИКЛАДНАЯ ИНФОРМАТИКА (по
отраслям)
(шифр)
(наименование)
СПЕЦИАЛИЗАЦИЯ(И)
Колледж
(шифр)
(наименование)
КАФЕДРА
«Информационные технологии»
(код)
(наименование)
Ростов-на-Дону 2011 г.
Авторы УМК : ________________________
(подпись)
Кузнецова И.С.
(Ф.И.О.)
УМК СОСТАВЛЕН НА ОСНОВАНИИ:
1.
Государственного образовательного стандарта высшего профессионального образования 30.01.2004г
(дата утверждения)
2.
Типовой программы
(дата утверждения)
3.
Учебного плана
___30.06.2010
(дата утверждения)
УМК ОБСУЖДАЛСЯ И СОГЛАСОВАН
КАФЕДРОЙ:
«Информационные технологии»
(наименование)
Строцев А.А.
(подпись зав. каф)
Протокол заседания кафедры _____№
от __________.2010
УМС по экономике и управлению
(наименование)
Протокол УМС _____№
(Ф.И.О.)
Киянова Л.Д.
(подпись председателя УМС)
(Ф.И.О.)
от ______.2010
2
СОДЕРЖАНИЕ
C.
РАБОЧАЯ ПРОГРАММА .............................................................................. 4
1
1.1 Цели и задачи дисциплины .......................................................................... 4
1.2 Требования к уровню усвоения дисциплины ............................................. 4
1.3 Аудиторная работа ........................................................................................ 4
1.4 Самостоятельная работа ............................................................................... 6
1.5 Темы курсовых работ и учебных проектов .............................................. 10
1.6 Учебно-методическое обеспечение дисциплины .................................... 10
1.7 Информационно-методическое обеспечение ........................................... 10
2
ЛЕКЦИИ ........................................................................................................ 12
3
ПЛАН САМОСТОЯТЕЛЬНОЙ РАБОТЫ СТУДЕНТОВ. ........................ 68
4
КОНТРОЛЬНЫЕ РАБОТЫ (ТОЛЬКО ДЛЯ ЗО). ...................................... 69
4.1 Методические рекомендации по выполнению и оформлению контрольных
работ; 69
4.2 Перечень рекомендуемой литературы; ..................................................... 69
4.3 Темы (варианты) контрольных работ. ...................................................... 69
КУРСОВЫЕ РАБОТЫ (УЧЕБНЫЕ ПРОЕКТЫ) ....................................... 70
5
5.1 Тематика; ...................................................................................................... 70
5.2 Методические рекомендации по выполнению; ....................................... 70
5.3 Указания по оформлению; ......................................................................... 70
5.4 Перечень рекомендуемой литературы. ..................................................... 70
МОДУЛИ (ТОЛЬКО ДЛЯ ДНЕВНОГО ОБУЧЕНИЯ). ............................ 72
6
6.1 Модульная структура.................................. Error! Bookmark not defined.
6.2 Описание дисциплины ................................ Error! Bookmark not defined.
6.3 План изучения дисциплины ....................... Error! Bookmark not defined.
6.4 План аттестации дисциплины .................... Error! Bookmark not defined.
КОНТРОЛЬ .................................................................................................... 73
7
7.1 Структура и бальная оценка каждого модуля .......................................... 73
7.2 Тестовые задания: ....................................................................................... 73
8
Контактная информация преподавателя:.................................................. 73
3
Рабочая программа
1.1 Цели и задачи дисциплины
Целью дисциплины является ознакомление студентов с высокоуровневыми
языками программирования, основными подходами к разработке программного
обеспечения на примере создания веб-приложений.
Задачами дисциплины являются усвоение студентами фундаментальных
понятий
процедурного
и
объектно-ориентированного
программирования
(«подпрограмма», «модуль», «класс», «объект», «наследование»), понимание
основных концепций объектной модели, применение современных технологий
программирования на примере создания веб-приложений, усвоение студентами
приемов создания активных веб-приложений, интегрированных с базами данных,
получение навыков написания PHP-скриптов, проектирования нормализованных
баз данных, реализация средствами СУБД MySQL и обеспечение доступа к базам
данных из PHP-сценариев
1.2 Требования к уровню усвоения дисциплины
В процессе изучения дисциплины студенты должны:
Иметь представление: о тенденциях развития компьютерной техники и
программных средств, технических средств информатизации; о способах
представления текстовой и нетекстовой информации в информационных
системах, использовании средств мультимедиа и тенденциях их развития;
новейших направлениях в области создания технологий программирования, о
законах эволюции программного обеспечения, особенностях программирования в
средах современных информационных систем, о создании модульных программ,
об элементах теории модульного программирования, об основах объектноориентированного
проектирования
и
программирования,
визуального
программирования, о способах размещения нового компонента, реакции на
события, о назначении компонентов, способах использования компонентов.
Знать:
современные
достижения
вычислительной
техники
(вычислительные машины, системы и сети телекоммуникаций); об общей
характеристике процессов сбора, передачи, обработки и накопления информации;
4
о технических и программных средствах реализации информационных процессов;
современные операционные среды и области их и эффективного применения;
сущность объектно-ориентированного подхода к проектированию и разработке
программ, понятие объектного типа данных, понятие переменной объектного
типа, понятие наследования, полиморфизма, инкапсуляции, определения классов
и объектов, характеристики объекта: состояние и поведение, понятия интерфейса
и реализации, разделы интерфейса, определение конструктора и деструктора,
особенности программирования в оконных операционных средах, основные
стандартные модули, обеспечивающие работу в оконной операционной среде,
понятие и примеры сред разработки, понятие и функциональность системы окон
разработки, системы меню, элементы теории отладки и тестирования программ,
типы данных языка PHP, управляющие конструкции и логические операторы
языка,
оператор
множественного
выбора,
операторы
управления
последовательностью действий, способы задания массивов, функции работы со
строками, особенности динамического создания страниц, структуру типовой webстраницы, приемы создания шаблона, функции включения файлов в сценарии
PHP, общие сведения о форма, элементы форм, ориентированные на ввод с
клавиатуры, элементы форм, ориентированные на ввод с мыши, обработку формы
при помощи PHP, стандартные функции PHP для работы с MySQL (MS SQL),
функции соединения с сервером, функции выбора базы данных, функции
формирования запроса, функции обработки результатов запроса, функции
закрытия соединения с сервером, структуру среды, особенности интерфейса
СУБД, основные приемы работы со средой, примеры языков манипулирования
данными, характерные особенности языка SQL, правила построения выражений,
основные операторы, допустимые идентификаторы, понятие запроса, типы
данных языка, управляющие конструкции и логические операторы языка
Уметь:
разработку
использовать
программного
инструментальные
обеспечения
средства,
поддерживающие
профессионально-ориентированных
информационных систем; иметь опыт современного программирования и
использования
возможностей
обеспечения;
классифицировать
декомпозицию системы на
вычислительной
языки
техники
и
программного
программирования,
проводить
объекты и процессы, выделять этапы объектно5
ориентированного
проектирования.
задавать
одномерные
и
многомерные
массивы, осуществлять поиск элементов массива, добавление и удаление
элементов, перебор элементов, сортировку массивов, использовать операции со
строками, создавать шаблоны, создавать динамические страницы, включать
файлы в сценарии PHP, создавать формы, динамически конструировать формы,
обрабатывать формы при помощи PHP, применять стандартные функции PHP для
работы с MySQL (MS SQL), создавать базу данных, использовать интерактивные
оболочки для создания и редактирования БД, создавать БД, создавать и удалять
таблицы, осуществлять выборку данных, производить вставку, изменение и
удаление данных средствами запросов.
Овладеть компетенциями IT-менеджера: начального уровня по созданию
веб-приложения, взаимодействующего с базой данных
1.3 Аудиторная работа
Лекции
Кол-во часов
№
Тема занятия
1
Языки
программиро
вания
высокого
уровня
2
Технологии
программирования.
Краткое содержание
Новейшие направления в области
создания технологий программирования.
Законы
эволюции
программного
обеспечения.
Поколения
языков
программирования.
Языки
программирования высокого уровня.
Грамматика языков программирования.
Обзор
современных
языков
программирования. Топология языков
первого, второго и третьего поколений.
Топология объектно-ориентированных
языков.
Программирование в средах современных
информационных систем: создание модульных
программ, элементы теории модульного
программирования, объектно-ориентированное
проектирование и программирование.
О
З
С
4
-
-
2
-
-
Декомпозиция сложных систем. Объектная
декомпозиция. Алгоритмическая
декомпозиция.
Методы проектирования программ как
средство борьбы со сложностью систем.
6
3
Объектноориентированный
подход к
проектированию и
разработке
программ
Объектно-ориентированный подход к
проектированию и разработке программ.
Сущность объектно-ориентированного
подхода. Объектный тип данных. Переменные
объектного типа. Абстрагирование.
Инкапсуляция. Интерфейс, реализация.
Модульность. Иерархия. Наследование.
Типизация. Полиморфизм. Параллелизм.
Сохраняемость. Преимущества объектной
модели. Классы и объекты.
4
Особенности
программирования
в оконных
операционных
средах.
Особенности программирования в оконных
операционных средах. Основные стандартные
модули, обеспечивающие работу в оконной
операционной среде. Понятие
интегрированной среды программирования.
Среда разработки, система окон разработки,
система меню. Редакторы, компиляторы,
трансляторы, интерпретаторы, отладчики,
компоновщики, библиотеки.
5
Основы
визуального
программирования
Основы визуального программирования.
Размещение нового компонента. Реакция на
события. Компоненты; использование
компонентов.
4
-
-
2
-
-
2
-
-
2
-
-
6
-
-
Понятие и состав интегрированной среды
программирования
6
Введение в
Интернет технологии
Основы работы сервера Web. Принципы
работы HTTP-протокола. Обзор технологий
Интернета
7
Введение в PHP
8
Работа с формами.
Передача данных
Динамическое создание форм. Основные
приемы. Скрытые переменные. Сеансы. Куки.
2
-
-
9
Дополнительные
Функции работы с файлами и каталогами.
4
-
-
Введение в PHP. Переход в HTML.
Переменные
и
типы
данных.
Выражения, операторы и управляющие
конструкции. Проверка условий. Блоки.
Циклические
структуры
(цикл
с
предусловием, цикл с постусловием,
цикл
со
счетчиком).
Оператор
множественного выбора. Операторы
управления
последовательностью
действий. Работа с массивами и
строками (основы). Массивы. Создание
массивов. Многомерные массивы. Поиск
элементов массива. Добавление и
удаление элементов. Перебор элементов.
Сортировка
массивов.
Строки.
Функции работы со строками.
7
10
11
возможности PHP
Функции работы с датой и временем.
Поддержка баз
данных в PHP
Стандартные функции PHP для работы с
MySQL (MS SQL). Соединение с сервером.
Выбор базы данных. Формирование запроса.
Функции обработки результатов запроса.
Закрытие соединения с сервером.
Объектная модель в Классы.
Объекты.
Констукторы.
Поля.
в PHP
Методы. Реализация объектной модели в в
PHP 4 и в PHP 5.
Итого:
4
-
-
4
-
-
36
-
-
Практические занятия
Кол-во часов
№
1
2
Тема занятия
HTML. Работа с
формами.
Основы PHP
Краткое содержание
Основные HTML – теги. Общие сведения о
формах. Элементы форм, ориентированные на
ввод с клавиатуры. Элементы форм,
ориентированные на ввод с мыши. Создание
форм.
О
З
С
2
-
-
2
-
-
2
-
-
2
-
-
Типы переменных Константы
Синтаксические конструкции PHP
Передача данных из формы
3
4
Методы
обработки данных
в форме
Передача данных формы из одного сценария в
другой. Обработка формы в одном сценарии
Формы с
проверкой
заполнения
Проверка данных на стороне клиента
(JavaScript)
Проверка данных на стороне сервера (PHP)
5
6
Динамическое
создание форм
Работа с формами в PHP. Работа с
индексированным массивом. Динамическое
конструирование форм.
2
-
-
Работа с файлами
Основные функции работы с файлами.
Счетчик обращений
2
-
8
7
Программировани
е гостевой книги
Обработка введенных пользователем данных.
Применение функций работы с файлами.
Определение текущей даты.
2
-
-
8
Загрузка файлов
на сервер
Загрузка файлов на сервер. Получение свойств
файла. Ограничение размера загружаемого
файла. Защита скриптов загрузки файлов на
сервер.
2
-
-
Сохранение
информации о
состоянии
Использование скрытых переменных. HTTP
cookie. Работа с сессиями
2
-
-
Работа с СУБД
MySQL
Подключение к БД. Вывод на страницу списка
таблиц. Создание таблицы. Удаление таблицы.
2
-
-
20
-
-
9
10
Итого:
1.4 Самостоятельная работа
№
Содержание
самостоятельной работы
Кол-во часов
Форма контроля
О
З
С
1
Типы данных в РНР
2
-
-
Отчет
2
Регулярные выражения в РНР
2
-
-
Отчет
3
Инициализационный файл
РНР
2
-
-
4
Суперглобальные переменные
2
-
-
5
Учебный проект
«Персональная страница»
10
-
-
6
Работа с СУБД MySQL.
Решение типовых задач
2
-
-
20
-
-
Отчет
Отчет
Отчет
Отчет
9
1.5 Темы курсовых работ и учебных проектов
В рамках курса студенты реализуют самостоятельно индивидуальный
учебный проект «Персональная страница» с описанием собственного портфолио.
Проект основывается на создании динамического веб- приложения,
осуществляющего взаимодействие с базой данных, позволяющего обновлять
ресурс при помощи административной оболочки без изменения программного
кода.
1.6 Учебно-методическое обеспечение дисциплины
Основная литература
№ п/п
1.
Перечень литературы
Е. П. Истомин, В. В. Новиков, М. В. Новикова. Высокоуровневые
методы
информатики
и
программирования.
Андреевский
Издательский дом, 2008, 228 с.
2.
Веллинг Л. Разработка Web- приложений с помощью PHP и MySQL:
пособие / Л. Веллинг, Л. Томсон - Москва : Питер, 2008. 800 c.
3
Веллинг Л. Разработка Web- приложений с помощью PHP и MySQL
: пособие / Л. Веллинг, Л. Томсон - Москва : Питер, 2004. 800 c.
Дополнительная литература
№
п/п
1
2
Перечень литературы
Гилмор В. PHP4: учебный курс / В. Гилмор - Санкт-Петербург :
Питер, 2001. 352 c.
Григин И.Е. PHP 5.1 : руководство / И.Е. Григин - Санкт-Петербург :
Питер, 2006. 490 c.
3
Ратшиллер Т. PHP 4. Разработка Web-приложений : пособие / Т.
Ратшиллер, Т. Геркен - Санкт-Петербург : Питер, 2001. 384 c.
4
Гаевский А. Ю. Самоучитель по созданию Web- страниц (HTML,
JavaScript, Dynamic HTML) : самоучитель / А.Ю. Гаевский, В.А.
Романовский - Киев : А.С.К., 2002. 472 c.
10
1.7 обеспечение
Информационно методическое обеспечение дисциплины включает УМК,
компьютерные
программы,
электронные
учебники,
Интернет-ресурсы
приведенные в таблице 1.
Таблица 1 – Обеспечение дисциплины
№
п/п
Перечень
1.
IE
2.
PHP 5
3.
My SQL 5
4.
Материалы сервера ИУБиП
11
2 ЛЕКЦИИ
Лекция 1. Языки программирования высокого уровня
План.
1. Понятие о языках программирования высокого уровня. Грамматика языков
программирования. Обзор современных языков программирования.
2. Примеры языков программирования.
Содержание.
Трансляторы переводят программу с языка программирования в машинные коды.
Виды трансляторов:
Интерпретатор – построчный перевод программы в машинные коды и исполнение
программы
Компилятор– перевод всей программы в коды с последующим исполнением.
Классификация языков программирования
Различают языки:
- низкого уровня (машинно-ориентированные),
- высокого уровня (на зависят от типа ЭВМ).
Языки программирования, имитирующие естественные языки, обладающие
укрупненными командами, ориентированные на решение прикладных
содержательных задач, называют языками «высокого уровня».
Языки программирования высокого уровня существенно отличаются от машинноориентированных:
1. машинно-ориентированная программа к конечном счете записывается только с
помощью символов 1 и 0.
2. команда на машинном языке содержит ограниченный объем (минимальный)
информации и определяет простейший обмен содержимого ячеек памяти,
элементарные арифметические операции.
Языки программирования высокого уровня имеют ряд достоинств:
12
1. алфавит языка значительно шире машинного
2. набор операций, допустимых для использования, не зависит от набора
машинных операций
3. конструкции операторов отражают содержательные виды обработки данных
4. используется аппарат переменных и действий с ними
5. поддерживается широкий набор типов данных.
Языки высокого уровня:
- процедурно-ориентированные (Паскаль),
- проблемно-ориентированные (MathCAD),
- объектно-ориентированные (С++).
Каждый язык программирования имеет алфавит, словарный запас, синтаксис,
семантику.
Алфавит – фиксированный для данного языка набор основных символов,
допускаемых для составления текста программы на этом языке.
Синтаксис – система правил, определяющих допустимые конструкции языка
программирования из букв алфавита.
Семантика – система правил однозначного толкования отдельных языковых
конструкций, позволяющих воспроизвести процесс обработки данных.
В настоящее время насчитывается несколько сотен таких языков, а если считать
их диалекты, то несколько тысяч.
Примеры языков высокого уровня:
Fortran = Formula
Translator
Для математических расчетов. От
слов - транслятор формул.
----------------------------------------BASIC =
Beginner’s
All-purpose
Универсальный простой язык.
Symbolic
Многоцелевой мнемокод для
Instruction
начинающих.
Code
13
---------------------------------------COBOL = Common
Business
Язык для бизнеса. По первым буквам
Oriented
слов английской фразы - язык,
Language
ориентированный на обычный
-----------------------------------------
бизнес.
Algol = Algorithmic
Language
-------------------------------
Язык для описания алгоритмов.
Pascal
Универсальный современный
структурированный язык. Назван в
честь Блеза Паскаля.
-------------------------------
Языки для системного
С,
программирования.
С++
------------------------------Для решения задач в реальном
Ada
времени. Назван в честь
программистки Ады Лавлейс.
------------------------------Lisp = List
Programming
Язык обработки списков в системах
искусственного интеллекта.
------------------------------Prolog =
Programming
Logically
Язык логического программирования
для систем искусственного
интеллекта.
Объектно-ориентированные языки программирования
Наиболее удобными для реализации программных систем, разработанных в
рамках
объектно-ориентированного
подхода,
являются
объектно-
ориентированные языки программирования, хотя возможна реализация и на
обычных (не объектно-ориентированных) языках (например, на языке C и на
языке Fortran).
14
Объектно-ориентированные языки программирования пользуются в последнее
время большой популярностью среди программистов, так как они позволяют
использовать преимущества объектно-ориентированного подхода не только на
этапах проектирования и конструирования программных систем, но и на этапах
их реализации, тестирования и сопровождения.
Первый объектно-ориентированный язык программирования Simula 67 был
разработан в конце 60-х годов в Норвегии. Авторы этого языка очень точно
угадали перспективы развития программирования: их язык намного опередил
свое время. Однако современники (программисты 60-х годов) оказались не готовы
воспринять ценности языка Simula 67, и он не выдержал конкуренции с другими
языками программирования (прежде всего, с языком Fortran). Прохладному
отношению к языку Simula 67 способствовало и то обстоятельство, что он был
реализован как интерпретируемый (а не компилируемый) язык, что было
совершенно неприемлемым в 60-е годы, так как интерпретация связана со
снижением эффективности (скорости выполнения) программ.
Но достоинства языка Simula 67 были замечены некоторыми программистами, и в
70-е годы было разработано большое число экспериментальных объектноориентированных языков программирования: например, языки CLU, Alphard,
Concurrent Pascal и др. Эти языки так и остались экспериментальными, но в
результате
их
исследования
были
разработаны
современные
объектно-
ориентированные языки программирования: C++, Smalltalk, Eiffel и др.
Наиболее
распространенным
объектно-ориентированным
языком
программирования безусловно является C++. Свободно распространяемые
коммерческие системы программирования C++ существуют практически на
любой платформе. Широко известна свободно распространяемая система
программирования G++, которая дает возможность всем желающим разобрать
достаточно хорошо и подробно прокомментированный исходный текст одного из
образцовых компиляторов языка C++. Завершается работа по стандартизации
языка C++: последний Draft стандарта C++ выпущен в июне 1995 г. (он доступен
по Internet).
Разработка
новых
объектно-ориентированных
языков
программирования
продолжается. С 1995 года стал широко распространяться новый объектно15
ориентированный язык программирования Java, ориентированный на сети
компьютеров и, прежде всего, на Internet. Синтаксис этого языка напоминает
синтаксис
языка
C++,
однако
эти
языки
имеют
мало
общего.
Java
интерпретируемый язык: для него определены внутреннее представление
(bytecode) и интерпретатор этого представления, которые уже сейчас реализованы
на
большинстве платформ.
Интерпретатор
упрощает отладку программ,
написанных на языке Java, обеспечивает их переносимость на новые платформы и
адаптируемость к новым окружениям. Он позволяет исключить влияние
программ, написанных на языке Java, на другие программы и файлы, имеющиеся
на новой платформе, и тем самым обеспечить безопасность при выполнении этих
программ. Эти свойства языка Java позволяют использовать его как основной
язык программирования для программ, распространяемых по сетям (в частности,
по сети Internet).
Лекция
2.
Объектно-ориентированный
подход к проектированию
и
разработке программ
План.
1. Составные части объектного подхода.
2. Абстрагирование.
3. Инкапсуляция.
4. Модульность.
5. Иерархия.
6. Типизация.
7. Параллелизм.
8. Сохраняемость.
Содержание
1. Составные части объектного подхода.
Объектно-ориентированное
программирования,
совокупности
программирование
основанная
объектов,
на
каждый
-
представлении
из
которых
это
методология
программы
является
в
виде
экземпляром
определенного класса, а классы образуют иерархию наследования.
Каждый стиль программирования имеет свою концептуальную базу. Каждый
стиль требует своего умонастроения и способа восприятия решаемой задачи. Для
16
объектно-ориентированного стиля концептуальная база - это объектная модель.
Она имеет четыре главных элемента:
абстрагирование; инкапсуляция; модульность; иерархия.
Эти элементы являются главными в том смысле, что без любого из них модель не
будет
объектно-ориентированной.
Кроме
главных,
имеются
еще
три
дополнительных элемента:
типизация; параллелизм; сохраняемость.
Называние их дополнительными, означает, что они полезны в объектной модели,
но не обязательны.
2. Абстрагирование. Абстракция выделяет существенные характеристики
некоторого объекта, отличающие его от всех других видов объектов.
Выбор правильного набора абстракций для заданной предметной области
представляет
собой
главную
задачу
объектно-ориентированного
проектирования.
Примеры абстракции. В тепличном хозяйстве, растения выращиваются на
питательном
растворе
без
песка,
гравия
или
другой
почвы.
Нужно
контролировать ряд факторов: температуру, влажность, освещение, кислотность
(показатель рН) и концентрацию питательных веществ. В больших хозяйствах
для решения этой задачи часто используют автоматические системы, которые
контролируют и регулируют указанные факторы.
Одна из ключевых абстракций в такой задаче - датчик. С внешней точки зрения
датчик температуры - это объект, который способен измерять температуру там,
где он расположен.
Что такое температура? Это числовой параметр, имеющий ограниченный
диапазон значений и определенную точность, означающий число градусов по
Фаренгейту, Цельсию или Кельвину.
Местоположение датчика. Это некоторое идентифицируемое место в теплице,
температуру в котором нам необходимо знать.
Обязанности датчика температуры. Датчик должен знать температуру в своем
местонахождении и сообщать ее по запросу.
17
Какие же действия может выполнять по отношению к датчику клиент? Клиент
может калибровать датчик и получать от него значение текущей температуры.
Описания, задающие абстрактный датчик температуры на C++.
typedef float Temperature; // Температура по Фаренгейту
typedef unsigned int Location; //Число, однозначно определяющее положение
датчика
class TemperatureSensor {
public:
TemperatureSensor (Location);
~TemperatureSensor();
void calibrate(Temperature actualTemperature);
Temperature currentTemperature();
private:
...};
Здесь два оператора определения типов Temperature и Location вводят удобные
псевдонимы для простейших типов, и это позволяет нам выражать свои
абстракции на языке предметной области Temperature - это числовой тип данных
в формате с плавающей точкой для записи температур в шкале Фаренгейта.
Значения типа Location обозначают места фермы, где могут располагаться
температурные датчики.
Класс TemperatureSensor это еще не объект. Собственно датчики - это его
экземпляры, и их нужно создать, прежде чем с ними можно будет оперировать.
Например, можно написать так:
TemperatureSensor Sensor1(1);
TemperatureSensor Sensor2(2);
3. Инкапсуляция. Клиенту нет никакого дела до реализации класса, который его
обслуживает, до тех пор, пока тот соблюдает свои обязательства. На самом деле,
абстракция объекта всегда предшествует его реализации. А после того, как
18
решение о реализации принято, оно должно трактоваться как секрет абстракции,
скрытый от большинства клиентов.
Абстракция и инкапсуляция дополняют друг друга: абстрагирование направлено
на наблюдаемое поведение объекта, а инкапсуляция занимается внутренним
устройством. Чаще всего инкапсуляция выполняется посредством скрытия
информации, то есть маскировкой всех внутренних деталей, не влияющих на
внешнее поведение. Обычно скрываются и внутренняя структура объекта и
реализация его методов.
Практически это означает наличие двух частей в классе: интерфейса и
реализации. Интерфейс отражает внешнее поведение объекта, описывая
абстракцию поведения всех объектов данного класса. Внутренняя реализация
описывает представление этой абстракции и механизмы достижения желаемого
поведения объекта. Принцип разделения интерфейса и реализации соответствует
сути вещей: в интерфейсной части собрано все, что касается взаимодействия
данного объекта с любыми другими объектами; реализация скрывает от других
объектов все детали, не имеющие отношения к процессу взаимодействия
объектов.
Инкапсуляция - это процесс отделения друг от друга элементов объекта,
определяющих его устройство и поведение; инкапсуляция служит для того,
чтобы изолировать абстракцию от реализации.
Инкапсуляция – это сведение записи (структуры) с процедурами и функциями в
тип данных – объект, позволяющий его рассматривать его как единое целое
данных и поведения.
4. Модульность. Модульность - это разделение программы на фрагменты,
которые компилируются по отдельности, но могут устанавливать связи с
другими модулями.
В
большинстве
языков,
поддерживающих
принцип
модульности
как
самостоятельную концепцию, интерфейс модуля отделен от его реализации.
Таким образом, модульность и инкапсуляция ходят рука об руку.
Например, в C++ модулями являются раздельно компилируемые файлы. Для
C/C++ традиционным является помещение интерфейсной части модулей в
19
отдельные файлы с расширением .h (так называемые файлы-заголовки).
Реализация, то есть текст модуля, хранится в файлах с расширением .с (в
программах на C++ часто используются расширения .ее, .ср и .срр). Связь между
файлами объявляется директивой макропроцессора #include.
В некоторых языках программирования, например в Smalltalk, модулей нет, и
классы составляют единственную физическую основу декомпозиции. В других
языках, включая Object Pascal, C++, Ada, CLOS, модуль - это самостоятельная
языковая конструкция. В этих языках классы и объекты составляют логическую
структуру системы, они помещаются в модули, образующие физическую
структуру системы.
В традиционном структурном проектировании модульность - это искусство
распределять подпрограммы по модулям так, чтобы в один модуль попадали
подпрограммы, использующие друг друга или изменяемые вместе. В объектноориентированном программировании необходимо физически разделить классы
и объекты, составляющие логическую структуру проекта.
5. Иерархия. Абстракция - вещь полезная, но всегда, кроме самых простых
ситуаций, число абстракций в системе намного превышает наши умственные
возможности. Инкапсуляция позволяет в какой-то степени устранить это
препятствие, убрав из поля зрения внутреннее содержание абстракций.
Модульность
также
упрощает
задачу,
объединяя
логически
связанные
абстракции в группы. Но этого оказывается недостаточно.
Иерархия - это упорядочение абстракций, расположение их по уровням.
Пример иерархии: наследование. Наследование означает такое отношение между
классами
(отношение
родитель/потомок),
когда
один
класс
заимствует
структурную или функциональную часть одного или нескольких других классов
(соответственно, одиночное и множественное наследование). Иными словами,
наследование создает такую иерархию абстракций, в которой подклассы
наследуют строение от одного или нескольких суперклассов. Часто подкласс
достраивает или переписывает компоненты вышестоящего класса.
20
6. Типизация. Понятие типа взято из теории абстрактных типов данных. Дойч
определяет тип, как "точную характеристику свойств, включая структуру и
поведение, относящуюся к некоторой совокупности объектов" Для наших целей
достаточно считать, что термины тип и класс взаимозаменяемы.
Идея согласования типов занимает в понятии типизации центральное место.
Например, возьмем физические единицы измерения. Деля расстояние на время,
мы ожидаем получить скорость, а не вес. В умножении температуры на силу
смысла нет, а в умножении расстояния на силу - есть. Все это примеры сильной
типизации, когда прикладная область накладывает правила и ограничения на
использование и сочетание абстракций.
Конкретный язык программирования может иметь сильный или слабый механизм
типизации,
и
даже
не
иметь
вообще
никакого,
оставаясь
объектно-
ориентированным.
Преимущества строго типизированных языков:
1. Отсутствие контроля типов может приводить к непонятным сбоям в
программах во время их выполнения.
#include <iostream.h>
void main()
{ int a = 2;
float g = 3.8;
a = g;
cout << g ;}
2. В большинстве систем процесс редактирование-компиляцияотладка
утомителен,
и
раннее
обнаружение
ошибок
просто
незаменимо.
3. Объявление типов улучшает документирование программ.
4. Многие компиляторы генерируют более эффективный объектный
код, если им явно известны типы"
Полиморфизм – возможность присвоения одинаковых имен свойствам различных
классов.
21
7. Параллелизм. Есть задачи, в которых автоматические системы должны
обрабатывать много событий одновременно. В других случаях потребность в
вычислительной мощности превышает ресурсы одного процессора. В каждой из
таких ситуаций естественно использовать несколько компьютеров для решения
задачи или задействовать многозадачность на многопроцессорном компьютере.
Процесс (поток управления) - это фундаментальная единица действия в системе.
Каждая программа имеет по крайней мере один поток управления, параллельная
система имеет много таких потоков: век одних недолог, а другие живут в течении
всего сеанса работы системы. Реальная параллельность достигается только на
многопроцессорных системах, а системы с одним процессором имитируют
параллельность за счет алгоритмов разделения времени.
Каждый объект (полученный из абстракции реального мира) может представлять
собой отдельный поток управления (абстракцию процесса). Такой объект
называется активным. Для систем, построенных на основе OOD, мир может быть
представлен, как совокупность взаимодействующих объектов, часть из которых
является активной и выступает в роли независимых вычислительных центров. На
этой основе дадим следующее определение параллелизма: Параллелизм - это
свойство, отличающее активные объекты от пассивных.
Примеры параллелизма. Во-первых, параллелизм - это внутреннее свойство
некоторых
языков
программирования.
Так,
для
языка
Ada
механизм
параллельных процессов реализуется как задача. В Smalltalk есть класс process,
которому наследуют все активные объекты. Есть много других языков со
встроенными механизмами для параллельного выполнения и синхронизации
процессов - Actors, Orient 84/K, ABCL/1, которые предусматривают сходные
механизмы параллелизма и синхронизации. Во всех этих языках можно создавать
активные объекты, код которых постоянно выполняется параллельно с другими
активными объектами.
8. Сохраняемость. Любой программный объект существует в памяти и живет во
времени. Существуют объекты, которые присутствуют лишь во время вычисления
выражения, но есть и такие, как базы данных, которые существуют независимо от
программы. Этот спектр сохраняемости объектов охватывает:
22

"Промежуточные результаты вычисления выражений.

Локальные переменные в вызове процедур.

глобальные переменные и динамически создаваемые данные.

Данные,
сохраняющиеся
между
сеансами
выполнения
программы.

Данные, сохраняемые при переходе на новую версию программы.

Данные, которые вообще переживают программу.
Традиционно, первыми тремя уровнями занимаются языки программирования, а
последними - базы данных. Этот конфликт культур приводит к неожиданным
решениям: программисты разрабатывают специальные схемы для сохранения
объектов в период между запусками программы, а конструкторы баз данных
переиначивают свою технологию под короткоживущие объекты.
Языки
программирования,
как
правило,
не
поддерживают
понятия
сохраняемости; примечательным исключением является Smalltalk, в котором есть
протоколы для сохранения объектов на диске и загрузки с диска.
Сохраняемость - это не только проблема сохранения данных, имеет смысл
сохранять и классы, так, чтобы программы могли правильно интерпретировать
данные.
Сохраняемость - способность объекта существовать во времени, переживая
породивший его процесс, и (или) в пространстве, перемещаясь из своего
первоначального адресного пространства.
Лекция 4-5. Особенности программирования в оконных операционных
средах. Основы визуального программирования
План.
1. Среды программирования Windows-приложений.
2. Модель программирования в Windows.
1. Среды программирования Windows-приложений.
На сегодняшний день, Windows является лидирующей операционной
системой на рынке персональных компьютеров. Поэтому успех современного
23
программиста напрямую зависит от его умения разрабатывать качественные и
эффективные приложения Windows. В связи с тем, что сегодня уровень
сложности программного обеспечения очень высок, разработка приложений
Windows с использованием только какого-либо языка программирования
(например, языка C или Pascal) значительно затрудняется. Программист должен
затратить массу времени на решение стандартных задач по созданию
многооконного интерфейса. Реализация технологии связывания и встраивания
объектов - OLE - потребует от программиста еще более сложной работы.
Чтобы облегчить работу программиста практически все современные
компиляторы содержат специальные библиотеки классов. Такие библиотеки
включают в себя практически весь программный интерфейс Windows и позволяют
пользоваться при программировании средствами более высокого уровня, чем
обычные вызовы функций. За счет этого значительно упрощается разработка
приложений, имеющих сложный интерфейс пользователя, облегчается поддержка
технологии OLE и взаимодействие с базами данных.
Современные интегрированные средства разработки приложений Windows
позволяют
автоматизировать
процесс
создания
приложения.
Для
этого
используются генераторы приложений. Программист отвечает на вопросы
генератора приложений и определяет свойства приложения - поддерживает ли оно
многооконный режим, технологию OLE, справочную систему. Генератор
приложений, создаст приложение, отвечающее требованиям, и предоставит
исходные тексты. Пользуясь им как шаблоном, программист сможет быстро
разрабатывать свои приложения.
Прежде чем приступить к созданию Windows-приложений, необходимо
выбрать подходящую среду программирования. Разработчики ПО предлагают
RAD-среды (Rapid Application Development – среды быстрой разработки Windowsприложений), такие как Microsoft Visual Basic или Borland Delphi.
Однако, на настоящий момент язык С является фактически мировым
стандартом, поэтому, многие программисты останавливают свой выбор Visual
C++. Но, даже после выбора среды программирования на базе С, у разработчика
остается несколько вариантов:

программировать на С, применяя Win 32 API,
24

задействовать каркас приложений на базе библиотеки MFC

воспользоваться другим каркасом приложений (например, OWL
фирмы Borland(Inprise)).
2. Модель программирования в Windows.
Рассмотрим наиболее важные моменты работы Windows и принципы
взаимодействия программ с ней.
Интерфейс вызовов функций в Windows. Благодаря данному интерфейсу
доступ к системным ресурсам осуществляется через целый ряд системных
функций. Совокупность таких функций называется прикладным программным
интерфейсом, или API (Application Programming Interfase). Для взаимодействия с
Windows
приложение
запрашивает
функции
API,
с
помощью
которых
реализуются все необходимые системные действия, такие как выделение памяти,
вывод на экран, создание окон и т.п.
Библиотеки динамической загрузки (DLL). Поскольку API состоит из
большого числа функций, может сложиться впечатление, что при компиляции
каждой программы, написанной для Windows, к ней подключается код довольно
значительного объема. В действительности это не так. Функции API содержатся в
библиотеках динамической загрузки (Dynamic Link Libraries, или DLL), которые
загружаются в память только в тот момент, когда к ним происходит обращение,
т.е. при выполнении программы. Динамическая загрузка обеспечивает ряд
существенных преимуществ. Во-первых, поскольку практически все программы
используют
API-функции,
то
благодаря
DLL-библиотекам
существенно
экономится дисковое пространство, которое в противном случае занималось бы
большим количеством повторяющегося кода, содержащегося в каждом из
исполняемых
файлов.
Во-вторых, изменения
и
улучшения
в
Windows-
приложениях сводятся к обновлению только содержимого DLL-библиотек. Уже
существующие тексты программ не требуют перекомпиляции.
Интерфейс прикладных программ Win32. Существуют две версии API.
Первая называется Win16 и представляет собой 16-разрядную версию,
используемую в Windows 3.1. Вторая, 32-разрядная версия, называется Win32 и
используется в ОС, начиная с Windows 95 и Windows NT. Win32 является
25
надмножеством для Win16 (т.е. фактически включает в себя этот интерфейс), так
как большинство функций имеет то же название и применяется аналогичным
образом. Однако, будучи в принципе похожими, оба интерфейса все же
отличаются друг от друга. Win32 поддерживает 32-разрядную линейную
адресацию, тогда как Win16 работает только с 16-разрядной сегментированной
моделью памяти. Это привело к тому, что некоторые функции были
модифицированы таким образом, чтобы принимать 32-разрядные аргументы и
возвращать 32-разрядные значения. Часть из них пришлось изменить с учетом 32разрядной
архитектуры.
Была
реализована
поддержка
потоковой
многозадачности, новых элементов интерфейса и прочих нововведений Windows.
Интерфейс GDI. Многие MS DOS программы записывали данные прямо в
видеопамять и порт принтера. Недостаток этого метода состоит в том, что
разработчику приходилось создавать отдельные драйверы множества моделей
видеоплат и принтеров. Одним из подмножеств API является GDI (Graphics
Device Interfase – интерфейс графического устройства). GDI – это та часть
Windows, которая обеспечивает поддержку аппаратно-независимой графики.
Благодаря функциям GDI Windows-приложение может выполняться на самых
различных компьютерах. Теперь, вместо того, чтобы обращаться к оборудованию,
Ваша программа вызывает GDI-функции, ссылающиеся на структуру данных –
контекст устройства (dc – device context). Windows сопоставляет структуру
контекста устройства с физическим устройством и выдает соответствующие
команды ввода/вывода.
Программирование, основанное на ресурсах. Программируя в MS DOS,
Вы определяли данные при помощи инициализирующих констант, либо путем
считывания из отдельных файлов. При работе в Windows Вы храните данные в
файле ресурсов. Файлы ресурсов могут включать растровые изображения, иконки,
определения меню, описания структуры диалоговых окон и т.д. Программу Вы
набираете
и
редактирования
модифицируете
ресурсов
при
тоже
помощи
существуют
текстового
редактора,
специальные
для
редакторы,
обеспечивающие режим WYSIWYG – «что видишь, то и получаешь».
26
Многозадачность в Windows. Как известно, все версии Windows
поддерживают многозадачность. Начиная с Windows 95, поддерживается два типа
многозадачности: основанный на процессах и основанный на потоках.
Процесс – это программа, которая выполняется. При многозадачности
такого типа две или более программы могут выполняться параллельно. Конечно,
они по очереди используют ресурсы центрального процессора и с технической
точки зрения, выполняются неодновременно, но благодаря высокой скорости
работы компьютера это практически незаметно.
Поток – это отдельная часть исполняемого кода. Название произошло от
понятия “направление протекания процесса”. В многозадачности данного типа
отдельные
потоки
внутри
одного
процесса
также
могут
выполняться
одновременно. Все процессы имеют, по крайней мере, один поток.
Следовательно, при работе в этих операционных системах возможно
параллельное выполнение, как программ, так и отдельных частей самих
программ. Это позволяет писать очень эффективные программы.
В Windows 3.1 использовалась неприоритетная многозадачность. Это
означает, что процесс, выполняющийся в данный момент, получает доступ к
ресурсам центрального процессора и удерживает их в течение необходимого ему
времени. Таким образом, неправильно выполняющаяся программа может
захватить все ресурсы процессора и не давать выполняться другим процессам. В
отличие от этого, начиная с Windows 95, используется приоритетная
многозадачность. В этом случае каждому активному потоку предоставляется
определенный промежуток времени работы процессора. По истечению данного
промежутка управление автоматически передается следующему потоку. Это не
дает возможность программам полностью захватывать ресурсы процессора.
Взаимодействие программ и Windows. Во многих операционных системах
взаимодействие между системой и программой инициализирует программа.
Например, в DOS программа запрашивает разрешение на ввод и вывод данных.
Говоря другими словами, не-Windows-программы сами вызывают операционную
систему. Обратного процесса не происходит. В Windows все совершенно
наоборот: именно система вызывает программу. Это осуществляется следующим
образом: программа ожидает получения сообщения от Windows. Когда это
27
происходит, то выполняется некоторое действие. После его завершения
программа ожидает следующего сообщения.
Windows может посылать программе сообщения множества различных
типов. Например, каждый раз при щелчке мышью в окне активной программы
посылается соответствующее сообщение. Другой тип сообщений посылается,
когда необходимо обновить содержимое активного окна. Сообщения посылаются
также при нажатии клавиши, если программа ожидает ввода с клавиатуры.
Необходимо запомнить одно: по отношению к программе сообщения появляются
случайным образом. Вот почему Windows-программы похожи на программы
обработки прерываний: невозможно предсказать, какое сообщение появиться в
следующий момент.
Лекция 5. Введение в Интернет –технологии
План.
1. Основы работы сервера Web
2. Принципы работы HTTP-протокола
3. Обзор технологий Интернета
1. Основы работы сервера Web
Серверы Web хранят информацию в виде текстовых файлов, называемых
также страницами сервера Web. Помимо текста, такие страницы могут содержать
ссылки на другие страницы (расположенные на том же самом или другом сервере
Web), ссылки на графические изображения, аудио- и видеоинформацию,
различные объекты ввода данных (поля, кнопки, формы и т. д.), а также другие
объекты. Фактически страницы Web представляют собой некоторое связующее
звено между объектами различных типов. Их проектируют с применением
специального языка разметки гипертекстов Hyper Text Markup Language, или
сокращенно — HTML. Для доступа к информации, расположенной на серверах
Web, пользователи применяют специальные клиентские программы — браузеры.
Каждая страница сервера Web имеет свой так называемый универсальный
адрес ресурса Universal Resource Locator (URL). Для того чтобы получить доступ
к той или иной странице, пользователь должен указать ее адрес URL программе
28
браузера. Как правило, любой сервер Web имеет одну главную страницу, содержащую ссылки на все другие страницы этого сервера. Поэтому просмотр содержимого сервера Web обычно начинается с его главной страницы.
Когда пользователь указывает браузеру адрес страницы сервера Web, она
начинает загружаться с сервера. При этом браузер устанавливает соединение с
сервером Web, применяя протокол передачи данных Hyper Text Transfer Protocol
(HTTP), получает нужную страницу и разрывает соединение. Принятая страница
отображается в окне браузера.
Различают пассивные и активные серверы Web. Если страницы сервера содержат только статическую текстовую и мультимедийную информацию, а также
гипертекстовые ссылки на другие страницы, то сервер называется пассивным.
Когда же страницы сервера ведут себя аналогично окнам обычных интерактивных
приложений, вступая в диалог с пользователем, мы имеем дело с активным
сервером.
Очевидно, статический сервер Web не может служить основой для создания
интерактивных приложений в сети Интернет с базами данных, так как он не
предусматривает никаких средств ввода и обработки запросов.
2. Принципы работы HTTP-протокола
Протокол передачи гипертекста (HTTP) - протокол прикладного уровня
распределенных, совместных, многосредных информационных
для
систем. HTTP
используется в World Wide Web (WWW) начиная с 1990 года.
Все HTTP-транзакции имеют один общий формат. Каждый запрос клиента и
ответ сервера состоит из трех частей: строки запроса (ответа), раздела заголовка и
тела. Клиент инициирует транзакцию следующим образом:
1. Клиент устанавливает связь с сервером по назначенному номеру порта (по
умолчанию - 80). Затем клиент посылает запрос документа, указав HTTP-команду,
называемую методом, адрес документа и номер версии HTTP. Например, в
запросе
GET /index.html HTTP/1.0
используется метод GET, которым с помощью версии 1.0 HTTP запрашивается
документ index.html. Методы HTTP более подробно рассматриваются ниже.
29
2. Клиент посылает информацию заголовка (необязательную), чтобы сообщить
серверу информацию о своей конфигурации и данные о форматах документов,
которые он может принимать. Вся информация заголовка указывается построчно,
при этом в каждой строке приводится имя и значение. Например, приведенный
ниже заголовок, посланный клиентом, содержит его имя и номер версии, а также
информацию о некоторых предпочтительных для клиента типах документов:
User-Agent: Mozilla/4.05 (WinNT; 1)
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Завершается заголовок пустой строкой.
3. Послав запрос и заголовки, клиент может отправить и дополнительные
данные. Эти данные используются главным образом теми CGI-программами,
которые применяют метод POST. Клиенты (например, Netscape Navigator-Gold),
также могут использовать их для помещения отредактированной страницы
обратно на Web-сервер.
Сервер отвечает на запрос клиента следующим образом:
1. Первая часть ответа сервера - строка состояния, содержащая три поля:
версию HTTP, код состояния и описание. Поле версии содержит номер версии
HTTP, которой данный сервер пользуется для передачи ответа.
Код состояния - это трехразрядное число, обозначающее результат обработки
сервером
запроса
клиента.
Описание,
следующее
за
кодом
состояния,
представляет собой просто понятный для человека текст, поясняющий код
состояния. Например, строка состояния
НТТР/1.0 200 OK
говорит о том, что сервер для ответа использует версию HTTP 1.0. Код
состояния 200 означает, что запрос клиента был успешным и затребованные
данные будут переданы после заголовков.
2. После строки состояния сервер передает клиенту информацию заголовка,
содержащую данные о самом сервере и затребованном документе. Ниже приведен
пример заголовка:
Date: Fri, 10 Jan 1998 08:17:58 GMT
Server: Apache/1.2.6
Last-modified: Mon, 12 Jun 1997 21:53:08 GMT
30
Content-type: text/html
Content-length: 2482
Завершает заголовок пустая строка.
3. Если запрос клиента успешен, то посылаются затребованные данные. Это
может быть копия файла или результат выполнения CGI-программы. Если запрос
клиента удовлетворить нельзя, передаются дополнительные данные в виде
понятного для пользователя разъяснения причин, по которым сервер не смог
выполнить данный запрос.
В HTTP 1.0 за передачей сервером затребованных данных следует
разъединение с клиентом, и транзакция считается завершенной, если не передан
заголовок Connection: Keep Alive. В HTTP 1.1 сервер по умолчанию не разрывает
соединение и клиент может посылать другие запросы. Поскольку во многие
документы встроены другие документы - изображения, кадры, апплеты и т.д., это
позволяет сэкономить время и затраты клиента, которому в противном случае
пришлось бы для получения всего одной страницы многократно соединяться с
одним и тем же сервером. Таким образом, в HTTP 1.1 транзакция может
циклически повторяться, пока клиент или сервер не закроет соединение явно.
HTTP не сохраняет информацию по транзакциям, поэтому в следующей
транзакции приходится начинать все заново. Преимущество состоит в том, что
HTTP сервер может обслужить в заданный промежуток времени гораздо больше
клиентов, ибо устраняются дополнительные расходы на отслеживание сеансов от
одного соединения к другому. Есть и недостаток: для сохранения информации по
транзакциям более сложные CGI-программы должны пользоваться скрытыми
полями ввода или внешними средствами, например "ключиками" (cookies)
Netscape.
Методы
Метод - это HTTP-команда, с которой начинается первая строка запроса
клиента. Метод сообщает серверу о цели запроса. Для HTTP определены три
основных метода: GET, HEAD и POST. Определены и другие методы, но они не
так широко поддерживаются серверами, как три перечисленных (хотя эти другие
методы в будущем будут использоваться более часто). При задании имен методов
учитывается
регистр,
поэтому
GET
и
get
различаются.
31
Метод GET
GET - это запрос информации, расположенной на сервере по указанному
URL. GET - наиболее распространенный метод поиска с помощью броузеров
документов для визуализации. Результат запроса GET может представлять собой,
например, файл, доступный для сервера, результат выполнения программы или
CGI-сценария, выходную информацию аппаратного устройства и т.д.
Если клиент пользуется в своем запросе методом GET, сервер отвечает
строкой состояния, заголовками и затребованными данными. Если сервер не
может обработать запрос вследствие ошибки или отсутствия полномочий, он, как
правило, посылает в информационном разделе ответа текстовое пояснение.
Тело информационного содержимого запроса GET всегда пустое. GET в
переводе на человеческий язык означает примерно следующее: "Дайте мне этот
файл". Для идентификации указанных в запросе клиента файла или программы
обычно используется полное имя этого объекта на сервере.
Ниже приведен пример успешного запроса GET на получение файла. Клиент
посылает запрос:
GET /index.html HTTP/1.О
Connection: Keep-Alive
User-Agent: Mozilla/4.05 (WinNT; 1)
Host: www.ora.com
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Сервер отвечает:
HTTP/1.0 200 Document follows
Date: Fri, 20 Jan 1998 08:17:58 GMT
Server: Apache/1.2.6
Last-modified: Mon, 20 Jun 1997 21:53:08 GMT
Content-type: text/html
Content-length: 2482
(далее следует тело документа)
Метод GET используется также для передачи входной информации в CGIпро- граммы посредством тегов форм. Поскольку тело запроса GET пусто,
32
входные данные присоединяются к URL в строке GET запроса. Если в теге
<form> задано значение атрибута method="GET", то пары ключ-значение,
представляющие собой введенные данные из формы, присоединяются к URL
после вопросительного знака. Пары отделяются друг от друга амперсандом (&).
Например, по запросу
GET /cgi-bin/birthday.pl?month=august&date=24 HTTP/1.О
сервер передаст в CGI-программу birthday.pl значения month и date,
указанные в форме, созданной на клиенте. Входные данные в конце URL
кодируются
в
спецификации
CGI.
Чтобы
специальные
символы
интерпретировались обычным образом, используются их шестнадцатиричные
коды.
Аналогичным образом в методе GET может передаваться информация о
дополнительных путях. При этом дополнительный путь указывается после URL,
т.е. /cgi-bin/display.pl/cgi/cgi_doc.txt. Сервер определяет, где заканчивается имя
программы (display.pl). Все данные, которые следуют за именем программы,
интерпретируются
как
дополнительный
путь.
Метод HEAD
Метод HEAD аналогичен методу GET, за исключением того, что сервер
ничего не посылает в информационной части ответа. Метод HEAD запрашивает
только информацию заголовка о файле или ресурсе. Информация заголовка
запроса HEAD должна быть такой же, как в запросе GET.
Этот метод используется, когда клиент хочет найти информацию о
документе, не получая его. Для метода HEAD существует множество
приложений. Например, клиент может затребовать следующую информацию:
 время
изменения документа (эти данные полезны для запросов, связанных с
кэш-памятью);
 размер
документа (необходим для компоновки страницы, оценки времени
передачи, определения необходимости запроса более компактной версии
документа);
 тип
документа
(позволяет
клиенту
изучать
документы
только
определенного типа);
33
 тип
сервера (позволяет создавать специализированные запросы).
Следует отметить, что большая часть информации заголовка, которую
посылает сервер, не является обязательной и может предоставляться не всеми
серверами. Рекомендуемый вариант для Web-клиентов - учитывать гибкость
ответов сервера и предусматривать определенные меры по умолчанию, если
сервер не передал необходимую информацию заголовка.
Ниже приведен пример HTTP-транзакции с использованием запроса HEAD.
Клиент посылает запрос:
HEAD /index.html HTTP/1.0
Connection: Close
User-Agent: Mozilla/4.05 (WinNT; 1)
Host: www.ora.com
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Сервер отвечает:
HTTP/1.0 200 Document follows
Date: Fri, 20 Jan 1998 08:17:58 GMT
Server: Apache/1.2.6
Last-modified: Mon, 17 Jun 1996 21:53:08 GMT
Content-type: text/html
Content-length: 2482
(Тело содержимого в ответе на запрос HEAD не передается.)
Метод POST
Метод POST позволяет посылать на сервер данные в запросе клиента. Эти
данные направляются в программу обработки данных, к которой сервер имеет
доступ (например, в CGI-сценарий). Метод POST может использоваться во
многих приложениях. Например, его можно применять для передачи входных
данных для:
 сетевых
служб (таких как телеконференции);
 программ
с интерфейсом в виде командной строки;
 аннотирования
 выполнения
документов на сервере;
операций в базах данных.
34
Данные, посылаемые на сервер, находятся в теле содержимого запроса
клиента. По завершении обработки запроса POST и заголовков сервер передает
тело содержимого в программу, заданную URL. В качестве схемы кодирования с
методом
POST
используется
URL-кодирование,
которое
позволяет
преобразовывать данные форм в список переменных и значений для CGIобработки.
Ниже приведен небольшой пример запроса клиента с использованием метода
POST. Клиент посылает на сервер данные о дне рождения, введенные в форму:
POST /cgi-bin/birthday.pl HTTP/1.0
User-Agent; Mozilla/4.05 (WinNT; 1)
Accept: image/gif, iinage/x-xbj.tmap, image/jpeg, J.mage/pjpeg, */*
Host: www.ora.com
Content-type: application/x-www-form-ur.lencoded
Content-Length: 20
nionth=august&date=24
Другие методы
Приведенные ниже методы также определены, хотя и используются не столь
часто:
LINK Связывает информацию заголовка с документом на сервере.
UNLINK Отменяет связь информации заголовка с документом на сервере.
PUT Помещает тело содержимого запроса по указанному URI.
DELETE Удаляет данные, находящиеся на сервере по заданному URI.
OPTIONS Запрашивает информацию о коммуникационных параметрах
сервера. Чтобы запросить данные обо всем сервере в целом, вместо URI запроса
следует использовать символ *.
TRACE Требует, чтобы тело содержимого запроса было возвращено без
изменений. Используется для отладки.
Ответы сервера
Ответ сервера на запрос клиента состоит из трех частей. Первая строка - это
строка ответа сервера, которая содержит номер
версии HTTP, число,
35
обозначающее состояние запроса, и краткое описание состояния. После строки
ответа следует информация заголовка и тело содержимого, если таковое имеется.
Коды ответов HTTP сервера
В первой строке ответа HTTP-сервера содержится информация о том, был
запрос клиента успешным или нет, а также данные о причинах успешного либо
неуспешного завершения запроса. Эта информация обозначается трехразрядным
кодом ответа сервера (иногда его называют кодом состояния) и сопровождается
описательным сообщением.
Коды состояний обычно генерируются Web-серверами, но иногда это могут
делать и CGI-сценарии, CGI-сценарии генерируют собственные заголовки вместо
тех, которые должен выдавать сервер. Коды состояний группируются следующим
образом:
Диапазон кодов
Значение ответа
100-199
Информационный
200-299
Запрос клиента успешен
300-399
Запрос
клиента
переадресован,
необходимы
дальнейшие действия
400-499
Запрос клиента является неполным
500-599
Ошибки сервера
В HTTP в каждом диапазоне определены лишь несколько кодов, хотя для
сервера при необходимости могут определяться собственные коды. Клиент при
получении кода, который он не может распознать, интерпретирует его в
соответствии с диапазоном, к которому этот код принадлежит. Коды в диапазонах
100-199, 200-299 и 300-399 большинство Web-броузеров обрабатывают без
извещения пользователя, а некоторые коды ошибок из диапазонов 400-499 и 500599
отображаются
для
пользователя
(например,
404
Not
Found).
Примеры
Информационные ответы
36
Ответы в диапазоне 100-199 - информационные; они показывают, что запрос
клиента принят и обрабатывается.
100 Continue
Начальная часть запроса принята, и клиент может продолжать передачу
запроса.
Успешные запросы клиента
Ответы в диапазоне 200-299 означают, что запрос клиента обработан
успешно.
200 OK
Запрос клиента обработан успешно, и ответ сервера содержит затребованные
данные.
203 Non-Authoritative Information
Информация в заголовке содержимого взята из локальной копии или у
третьей стороны, а не с исходного сервера.
Переадресация
Код ответа в диапазоне 300-399 означает, что запрос не выполнен и клиенту
нужно предпринять некоторые действия для удовлетворения запроса.
301 Moved Permanently
Затребованный URI уже не используется сервером, и указанная в запросе
операция не выполнена. Новое местонахождение затребованного документа
указывается в заголовке Location. Во всех последующих запросах данного
документа следует указывать новый URI.
Неполные запросы клиента
Коды ответов в диапазоне 400-499 означают, что запрос клиента неполный.
Эти коды могут также означать, что от клиента требуется дополнительная
информация.
400 Bad Request
Означает, что сервер обнаружил в запросе клиента синтаксическую ошибку.
404 Not Found
Документ по указанному URI не существует.
37
Ошибки сервера
Коды ответов в диапазоне 500-599 показывают, что сервер столкнулся с
ошибкой и, вероятно, не сможет выполнить запрос клиента.
500 Internal Server Error
При обработке запроса на сервере один из его компонентов (например, CGIпрограмма) выдал аварийный отказ или столкнулся с ошибкой конфигурации.
505 HTTP Version not supported
Сервер не поддерживает версию протокола HTTP, использованную в запросе.
2.1.1
3. Обзор технологий Интернета
При создании приложений Web применяется множество технологий.
Расскажем кратко о том, что нужно знать, чтобы успешно создавать приложения
для Интернета.
Язык разметки гипертекстов HTML.
Этот язык широко используется для создания страниц сервера Web. Несмотря на изобилие визуальных средств проектирования документов HTML, глубокое
знание языка HTML. В частности, оно нужно для создания приложений Web,
хорошо совместимых с различными браузерами и по-настоящему эффективных.
Динамический язык гипертекстовой разметки DHTML. Он позволяет
создавать динамические интерактивные страницы. Несмотря на то, что объектные
модели наиболее популярных браузеров сильно различаются, интенсивное
применение DHTML оправдано в первую очередь в тех случаях, когда на
компьютере пользователя установлен браузер Microsoft Internet Explorer. Это
возможно в интрасетях или при создании административных приложений Web,
когда разработчик может установить на компьютере пользователя заранее
выбранный браузер.
Языки сценариев JavaScript и VB Script.
Сценарии, написанные на языках JavaScript и VB Script, применяются как на
стороне клиента, так и на стороне сервера Web. Клиентские сценарии встроены в
документы HTML (или DHTML), загружаемые пользователем в окно браузера.
Эти интерпретируемые программы, исполняемые браузером, способны оживить
38
статические
документы
HTML;
они
связывают
различные
объекты,
расположенные внутри таких документов. Серверные сценарии исполняются на
сервере и служат для динамического формирования документов HTML,
отправляемых пользователю.
К сожалению, клиентские сценарии работают по-разному в различных браузерах. Поэтому для обеспечения совместимости приходится принимать специальные меры. Серверные сценарии, напротив, не вызывают никаких проблем
совместимости, так как исполняются непосредственно на компьютере сервера
Web.
Активные страницы Active Server Pages (ASP).
Технология активных серверных страниц ASP является ключевой для создания приложений Web на базе сервера Microsoft Internet Information Server.
Приложения Web на базе Microsoft Internet Information Server основаны на наборе
текстовых файлов с расширением имени asp. В первом приближении это
документы HTML, в которые встроены серверные сценарии JScript (версия
JavaScript, созданная Microsoft) или VB Script. Именно эти сценарии осуществляют обращение к базе данных или к другим активным серверным
объектам.
Технология ActiveX Data Objects (ADO).
Эта технология имеет самое непосредственное отношение к базам данных.
Посредством объектов ADO серверные сценарии ASP обращаются к базе данных.
Объектная модель ADO фактически предоставляет в распоряжение разработчика
простой набор объектов и методов для доступа к базам данных. Объекты ADO
вызываются не только из сценариев, но и из обычных приложений Windows,
расширений CGI и ISAPI сервера Web, а также из других объектов ActiveX.
Расширения CGI и ISAPI сервера Web.
Расширения CGI и ISAPI сервера Web широко применяются вместе с ASP при
создании активных серверов Web. Они представляют собой специальным образом
составленные программы, выполняющиеся на компьютере сервера Web.
Расширения сервера Web способны принимать данные от пользователя,
динамически создавать новые документы HTML и отправлять их обратно.
ActiveX.
39
Как и сценарии JavaScript и VB Script, элементы управления ActiveX применяют как на стороне сервера, так и на стороне клиента. Фактически они представляют собой библиотеки динамической компоновки DLL, работающие либо на
компьютере пользователя, либо на сервере.
Если элемент управления ActiveX работает на стороне клиента, то он может
быть встроен в документ HTML и иметь или не иметь собственное окно. Обладая
неограниченным
доступом
к
ресурсам
локального
компьютера,
элемент
управления ActiveX способен получить и передать на сервер Web практически
любую информацию. Эта возможность не всегда используется при передаче
данных через Интернет из соображений их безопасности, однако в интрасетях она
иногда оказывается очень полезной.
Элемент управления ActiveX допустимо также устанавливать на сервере
Web, дабы расширить его возможности.
Аплеты Java.
Язык Java, разработанный Sun Microsystems, должен обеспечивать работоспособность приложений на различных платформах без перекомпиляции. В
проектах для сети Интернет чаще всего применяются аплеты Java. Они
представляют собой одну из разновидностей приложений Java. Аплеты Java
встраиваются в документы HTML и работают под управлением браузера. В
отличие от органов управления ActiveX, возможности доступа аплетов к
локальным ресурсам компьютера пользователя практически сведены к нулю,
поэтому их применение не угрожает безопасности данных. Однако есть и
обратная сторона — такие ограничения во многом снижают пользу от аплетов.
Как правило, аплеты применяются для создания динамичного интерактивного
пользовательского интерфейса на стороне клиента. Помимо этого, они способны
взаимодействовать с расширениями CGI и ISAPI сервера Web, с которого они
загружены.
Лекция 6 Основы РНР
План
1. История создания PHP
2. Характеристика языка
40
3. Принципы работы PHP
4. Основные возможности PHP
Содержание
PHP - язык описания сценариев, выполняемых на сервере, встроенный в
HTML.
История РНР начинается с 1995 года, когда независимый программистконтрактник по имени Расмус Лердорф (Rasmus Lerdorf) написал сценарий
Perl/CGI для подсчета количества посетителей сайта, прочитавших его
онлайновое резюме. Его сценарий решал две задачи: регистрацию данных
посетителя и вывод количества посетителей на web-странице. Развитие WWW
еще только начиналось, никаких специальных средств для решения этих задач не
было, и к автору хлынул поток сообщений с вопросами. Лердорф начал бесплатно
раздавать свой инструментарий, названный Personal Home Page (РНР) или
Hypertext Processor (гипертекстовый процессор). Шумный успех инструментария
РНР заставил Лердорфа приступить к разработке расширений РНР. Одно из
расширений преобразовывало данные, введенные на форме HTML, в
символические переменные, что позволяло экспортировать их в другие системы.
Чтобы добиться поставленной цели, Лердорф решил в дальнейших разработках
перейти с Perl на С. Расширение существующего инструментария РНР привело к
появлению РНР 2.0, или PHP-FI (Personal Home Page — Form Interpretator). В
усовершенствовании версии 2.0 принимали участие программисты со всего мира.
Новая версия РНР пользовалась исключительной популярностью, и вскоре
образовалась основная команда разработчиков. Они сохранили исходную концепцию внедрения программного кода прямо в HTML и переписали заново механизм
лексического анализа, что привело к появлению РНР 3.0. К моменту выхода версии 3.0 в 1997 году свыше 50 000 пользователей применяли РНР для улучшения
своих web-страниц.
В течение следующих двух лет стремительное развитие РНР продолжалось.
В язык добавлялись сотни новых функций, а количество пользователей
стремительно росло. В начале 1999 года служба Netcraft сообщила о том, что, по
минимальным оценкам, число пользователей РНР превысило 1000000, в
результате чего РНР стал одним из самых популярных сценарных языков в мире.
41
В начале 1999 года было объявлено о предстоящем выходе РНР 4.0. Хотя
одной из сильнейших сторон РНР была эффективность выполнения сценариев,
при первоначальных разработках не предполагалось, что на базе РНР будут
строиться крупномасштабные приложения. По этой причине была начата работа
над более устойчивым механизмом лексического анализа, больше известным под
названием Zend. Работа шла быстро и завершилась 22 мая 2000 года выпуском
РНР версии 4.0.
Кроме лексического анализатора Zend, компания Zend Technologies распространяет оптимизатор Zend, который повышает выигрыш в быстродействии от
применения лексического анализатора Zend. Тесты показывают, что ускорение
работы программы в результате использования оптимизатора составляет от 40 до
100 %. Будущее РНР выглядит светлым, поскольку продукт продолжает активно
использоваться как на крупных web-сайтах, так и на компьютерах отдельных
пользователей.
РНР лучше всего охарактеризовать как работающий на стороне сервера
встроенный язык сценариев Web, позволяющий разработчикам быстро и
эффективно строить динамические web-приложения. С позиций грамматики и
синтаксиса РНР напоминает язык программирования C, хотя разработчики не
постеснялись включить в него средства из других языков, в том числе из Perl, Java
и C++. Среди ценных заимствованных возможностей — поддержка регулярных
выражений, мощные средства работы с массивами, объектно-ориентированная
методология и обширная поддержка работы с базами данных.
При написании приложений, выходящих за рамки традиционной,
статической методологии разработки web-страниц (то есть HTML), РНР также
может послужить ценным инструментом для создания и управления
динамическим содержанием, который используется наряду с JavaScript, стилями,
и другими полезными языками. Благодаря наличию сотен стандартных функций
РНР в состоянии решить практически любую задачу, которая может придти в
голову разработчику. В нем имеется обширная поддержка создания графики и
операций с ней, математических вычислений, средств электронной коммерции и
таких популярных технологий, как XML (Extensible Markup Language), ODBC
(Open Database Connectivity) и Macromedia Shockwave. Широкий выбор
42
возможностей избавляет от необходимости рутинной и непростой работы по подключению сторонних модулей, поэтому многие разработчики со всего мира останавливают свой выбор на РНР.
Одним из главных достоинств РНР является тот факт, что он внедряется
прямо в HTML-код, поэтому программисту не приходится писать программу с
множеством команд для простого вывода HTML. Код HTML и РНР можно
чередовать по мере необходимости. РНР позволяет написать фрагмент
следующего вида:
<html>
<title><? print "Hello world!": ?></title>
</html>
Сообщение "Hello world!" выводится в заголовке web-страницы. Интересно
то, что команда print внутри конструкции, которая обычно называется экранирующими последовательностями РНР (<?...?>), представляет собой законченную программу. Ни длинного кода инициализации, ни включения библиотек —
программа состоит лишь из того кода, который непосредственно решает
поставленную задачу!
2. Характеристика языка
Главным фактором при проектировании языка РНР является практичность.
РНР должен предоставить программисту средства для быстрого и эффективного
решения поставленных задач. Практический характер РНР обусловлен пятью
важными характеристиками:
традиционностью;
простотой;
эффективностью;
безопасностью;
гибкостью.
Существует еще одна «характеристика», которая делает РНР особенно
привлекательным: он распространяется бесплатно!
Традиционность
Язык РНР кажется знакомым программистам, работающим в разных
областях. Многие конструкции языка позаимствованы из С и Perl, а нередко код
43
РНР практически неотличим от того, что встречается в типичных программах С
или Pascal. Это заметно снижает начальные усилия при изучении РНР.
Простота
Сценарий РНР может состоять из 10 000 строк или из одной строки — все
зависит от специфики вашей задачи. Механизм РНР просто начинает выполнять
код после первой экранирующей последовательности (<?) и продолжает
выполнение до того момента, когда он встретит парную экранирующую
последовательность (?>). Если код имеет правильный синтаксис, он исполняется в
точности так, как указал программист.
Эффективность
Эффективность является исключительно важным фактором при
программировании для многопользовательских сред, к числу которых относится и
WWW. В РНР 4.0 был реализован механизм выделения ресурсов и обеспечена
улучшенная поддержка объектно-ориентированного программирования, а также
средства управления сеансом. В последней версии появился и механизм подсчета
ссылок (reference counting), предотвращающий выделение лишней памяти.
Безопасность
РНР предоставляет в распоряжение разработчиков и администраторов гибкие
и эффективные средства безопасности, которые условно делятся на две категории:
средства системного уровня и средства уровня приложения.
Принципы работы PHP
PHP - это серверный язык сценариев, разработанный специально для WEB. В
html-страницу можно внедрить PHP-код, который будет выполняться при каждом
ее посещении. PHP-код интерпретируется web-сервером (Apache (работает и под
UNIX, а MS Internet Information Server только под Windows), MS Internet
Information Server).
Разработка PHP была начата в 1994 году и вначале осуществлялась одним
человеком – Расмусом Лердорфом. Этот язык претерпел 5 основных редакци. PHP
– это продукт с открытым исходным кодом (имеет открытый доступ к его коду,
его можно использовать, изменять и свободно распространять). Сейчас
распространением и поддержкой PHP занимается компания Zend.
44
Рассмотрим основные этапы работы Web-приложений от запроса пользователя
до предоставления ему требуемой информации.
1. Web-броузер пользователя отправляет http-запрос определенной Webстранице. При этом браузер устанавливает соединение с сервером Web, применяя
протокол передачи данных HTTP.
2. Web-сервер принимает запрос на генерирование страницы, извлекает
нужный файл и передает его на обработку интерпретатору PHP.
3. Интерпретатор PHP начинает синтаксический анализ сценария. Сценарий
может содержать команду подключения к БД и выполнения запроса. PHP
открывает соединение с сервером БД и отправляет ему соответствующий запрос.
4. Сервер БД принимает запрос к БД, обрабатывает его и отправляет
результаты PHP-машине.
5. PHP – интерпретатор завершает выполнение сценария, обычно в виде
построения HTML-станицы. Затем результаты возвращаются в понятном Webсерверу HTML-формате.
6. Web-сервер пересылает браузеру HTML-станицу, в которой пользователь
может просмотреть результирующую информацию.
7. Браузер получает нужную страницу и разрывает соединение. Принятая
страница отображается в окне браузера.
Преимущества использования PHP
В классе серверных сценариев в число конкурентов PHP входят Perl, Active
Server Pages (ASP) от MS, Аплеты Java от Sun Microsystems, технология создания
серверных страниц ASP.NET. PHP обладает множеством преимуществ по
сравнению с этими продуктами.
Высокая производительность. Система PHP высокоэффективна. Результаты
тестирования, опубликованные компанией Zend, подтверждают более высокую
производительность PHP по сравнению с конкурирующими продуктами.
Наличие
интерфейсов
ко
многим
СУБД.
PHP
обладает
встроенной
возможностью подключения ко многим СУБД. Можно непосредственно
подключаться к MySQL, PostgreSQL, mSQL, Oracle, Informix, InterBase и другие.
Низкая стоимость. Пакет PHP распространяется бесплатно. Наиболее новую
версию можно скачать с сайта www.php.net
45
Простота изучения и использования Синтаксис PHP основан на двух языках
программирования – С (конструкции) и Perl (регулярные выражения). Это
заметно снижает начальные усилия при изучении РНР.
Переносимость (многоплатформенность)
1. Хотя РНР обычно рекомендуется использовать в сочетании с HTML, он с
таким же успехом интегрируется и в JavaScript, WML, XML и другие языки.
2. Не возникает проблем и с зависимостью от браузеров, поскольку перед
отправкой клиенту сценарии РНР полностью компилируются на стороне сервера.
В сущности, сценарии РНР могут передаваться любым устройствам с браузерами,
включая сотовые телефоны, электронные записные книжки, пейджеры и
портативные компьютеры, не говоря уже о традиционных ПК.
3. Поскольку РНР не содержит кода, ориентированного на конкретный webсервер, пользователи не ограничиваются определенными серверами (возможно,
незнакомыми для них). Apache, Microsoft US, Netscape Enterprise Server,
Stronghold и Zeus — РНР работает на всех перечисленных серверах.
4. Поскольку эти серверы работают на разных платформах, РНР в целом
является платформенно-независимым языком и существует на таких платформах,
как UNIX, Solaris, FreeBSD и Windows 95/98/NT.
Доступность исходного кода Пользователь имеет доступ к исходному коду PHP.
В отличие от коммерческих закрытых программных продуктов в код PHP можно
вносить любые изменения. Нет необходимости беспокоиться о том, что
изготовитель покинет рынок или перестанет поддерживать продукт.
Основные возможности PHP
Идентификация кода РНР называется «переходом в РНР» (escaping to РНР).
Стандартные теги используются программистами РНР чаще остальных
способов, что объясняется наглядностью и удобством этой формы записи:
<?php print "Welcome to the world of PHP!"; ?>
У стандартных тегов есть еще одно дополнительное преимущество: за
открывающей конструкцией <? следуют символы php, однозначно определяющие
тип дальнейшего кода. Это удобно при использовании в одной странице
нескольких технологий — таких, как JavaScript, серверные включения и РНР.
46
Весь текст, расположенный до закрывающего тега ?>, интерпретируется как код
РНР.
Короткие теги обеспечивают наиболее компактную запись для перехода в
РНР: <? print "Welcome to the world of PHP!"; ?>
Типы данных
Типы данных составляют основу любого языка программирования и являются
средством, с помощью которого программист представляет разные типы информации. В РНР поддерживаются шесть основных типов данных:

целыечисла;

вещественные числа;

строки;

массивы;

классы;
Строковые значения
Строкой
(string)
называется
последовательность
символов,
которая
рассматривается как единое целое, но при этом обеспечивает доступ к отдельным
символам. В РНР не поддерживается символьный тип данных. Строковый тип
может рассматриваться как единое представление для последовательностей,
состоящих из одного или нескольких символов.
Массивы
Массив представляет собой список однотипных элементов. Существует два
типа массивов, различающиеся по способу идентификации элементов. В массивах
первого типа элемент определяется индексом в последовательности. Массивы
второго типа имеют ассоциативную природу, и для обращения к элементам
используются ключи, логически связанные со значениями. Впрочем, на практике
47
операции с массивами обоих типов выполняются сходным образом. По
размерности массивы делятся на одномерные и многомерные.
Переменные
Переменная представляет собой именованную область памяти, содержащую
данные, с которыми можно выполнять операции во время выполнения
программы. Имена переменных всегда начинаются со знака доллара, $.
$enior
Имя переменной начинается с буквы или символа подчеркивания и состоит
из букв, символов подчеркивания, цифр или других ASCII-символов в интервале
от 127 до 255.
Переменные в РНР не требуют специального объявления. Вместо этого
переменная объявляется при первом ее использовании в программе. Более того,
тип переменной косвенно определяется по типу хранящихся в ней данных.
Переменные могут объявляться в любой точке сценария РНР.
Константы
Константой называется именованная величина, которая не изменяется
в
процессе выполнения программы. В PHP константы определяются функцией
define (). После того как константа будет определена, вы не сможете изменить
(или переопределить) её в этой программе.
Например, определение числа  в сценарии PHP может выглядеть так:
define (“PI”, “3.141592”);
Определенную константу можно использовать в программе:
$pi2 = 2*PI;
48
2.2 Управляющие конструкции
Управляющие конструкции предоставляют в распоряжение программиста
средства для построения сложных программ, способных проверять условие и
реагировать на изменение значений входных данных во время работы. Эти
структуры управляют выполнением программ.
if
Команда if представляет собой разновидность команды выбора, которая
вычисляет значение выр ажения и в зависимости от того, будет ли полученный
результат истинным или ложным, выполняет (или не выполняет) блок
программного кода. Существует две общих формы команды if:
if (выражение) { блок}
и
if (выражение) {
блок}
else {блок}
Проверка условий дает либо истинный, либо ложный результат. Выполнение
блоков зависит от результата проверки, причем блок может состоять как из одной,
так и из нескольких команд.
elseif
Команда elseif добавляет в управляющую конструкцию if дополнительный
уровень проверки и увеличивает количество условий, на основании которых
принимается решение:
if (выражение) {
блок
}
elseif {
блок
}
В PHP существует альтернативное представление команды elseif – в виде двух
отдельных слов else if. Оба варианта приводят к одинаковым результатам, а
альтернативное представление поддерживается исключительно для удобства.
Команда
elseif
особенно
полезна
в
тех
случаях,
когда
происходит
49
последовательное уточнение проверяемых условий. Условие elseif вычисляется
лишь в том случае, если все предыдущие условия if и elseif оказались ложными.
if ($cooking _ weight < 200) {
print “This is enough pasta (<200g) for 1-2 people”;
}
elseif (($cooking _ weight < 500) {
print “That’s a lot of pasta. Having a party perhaps?”;
}
else {
print “Whoa! Who are you cooking for, a football team?”;
}
while
Конструкция
while
предназначена
для
многократного
(циклического)
выполнения блока команд. Блок команды whi 1е выполняется до тех пор, пока условие
цикла остается истинным. Общая форма цикла while выглядит так:
while (выражение):
блок
endwhile;
do . . while
Цикл do..while работает почти так же, как и цикл while, описанный в предыдущем
разделе, однако в do ..while условие проверяется не в начале, а в конце каждой итерации.
Учтите, что цикл do. .while всегда выполняется хотя бы один раз, а цикл while может
вообще не выполняться, если перед входом в цикл условие окажется ложным.
for
Цикл for обеспечивает еще одну возможность многократного выполнения
управляющей конструкции. Цикл выполняется до тех пор, пока проверяемое
условие остается истинным. Общая форма конструкции for выглядит так:
for (инициализация; условие; приращение) { блок}
Условная часть цикла for в действительности состоит из трех компонентов. Инициализация выполняется всего один раз и определяет начальное значение управляющей переменной цикла. Условие проверяется в начале каждой итерации и опреде50
ляет, должна ли выполняться текущая итерация или нет. Приращение определяет
изменение управляющей переменной при каждой итерации.
switch
Принцип работы конструкции switch отчасти напоминает if - результат, полученный
при вычислении выражения, проверяется по списку потенциальных совпадений.
Это особенно удобно при проверке нескольких значений, поскольку применение
switch делает программу более наглядной и компактной. Общий формат команды
switch:
switch (выражение) {
case (условие) :
блок
case (условие) :
блок
default:
блок
}
Проверяемое условие указывается в круглых скобках после ключевого слова switch.
Результат его вычисления последовательно сравнивается с условиями в секциях
case. При обнаружении совпадения выполняется блок соответствующей секции. Если
совпадение не будет обнаружено, выполняется блок необязательной секции default.
Переменная, указанная в условии switch сравнивается с условиями всех
последующих секций case. Если значение, указанное в секции case, совпадает со
значением сравниваемой переменной, выполняется блок этой секции. Команда
break предотвращает проверку дальнейших секций case и завершает выполнение
конструкции switch. Если ни одно из проверенных условий не выполняется,
активизируется необязательная секция default. Если секция default отсутствует
и ни одно из условий не выполняется, команда switch просто завершается и
выполнение программы продолжается со следующей команды.
Лекция 7 Работа с формами. Передача данных
51
План
1. Общие сведения о формах
2. Тэги Формы
Содержание
1. Общие сведения о формах
Некоторые WWW browser позволяют пользователю, заполнив специальную
форму, возвращающую полученное значение, выполнять некоторые действия на
вашем WWW-сервере. Когда форма интерпретируется WEB-броузером, создается
специальные экранные элементы, такие, как поля ввода, checkboxes, radiobuttons,
выпадающие меню, скроллируемые списки, кнопки и т.д. Когда пользователь
заполняет форму и нажимает кнопку "Подтверждение" (SUBMIT - специальный
тип кнопки, который задается при описании документа), информация, введенна
пользователем в форму, посылается HTTP-серверу для обработки и передаче
другим программам, работающим под сервером. Все формы начинаются тэгом
<FORM> и звершаются тэгом </FORM>.
Синтаксис: <FORM METHOD="get | post" ACTION="URL">
Элементы формы и другие элементы HTML
</FORM>
Атрибуты:
ME
Метод посылки сообщения с данными из формы. В зависимости
от используемого метода вы можете посылать результаты ввода
THOD
данных в форму двумя путями:


AC
TION
GET: Информация из формы добавляется в конец URL, который
был указан в описании заголовка формы.
POST: Данный метод передает всю информацию о форме
немедленно после обращения к указанному URL в теле запроса.
ACTION описывает URL, который будет вызываться для
обработки формы. Данный URL почти всегда указывает на
программу, обрабатывающую данную форму.
2. Тэги Формы
2.1. TEXTAREA
52
Тэг <TEXTAREA> используется для того, чтобы позволить пользователю
вводить более одной строки информации (свободный текст). Если вы хотите,
чтобы в поле ввода по умолчанию выдавался какой-либо текст, то необходимо
вставить его внутри тэгов <TEXTAREA> и </TEXTAREA>.
Синтаксис: <TEXTAREA NAME="" ROWS= COLS= > </TEXTAREA>
Атрибуты:
NA Имя поля ввода
ME
RO
Высота поля ввода в символах
CO
Ширина поля ввода в символах
WS
LS
Пример1: Example1.html
<HTML>
<HEAD> <TITLE>Пример 1</TITLE></HEAD>
<BODY>
<FORM METHOD="post" ACTION="Example1.html">
<TEXTAREA
NAME="address"
ROWS=10
COLS=50>
Москва,
Дмитровкое шоссе, д.9Б, офис
</TEXTAREA>
</FORM>
</BODY></HTML>
Когда вы описываете форму, каждый элемент ввода данных имеет тэг
<INPUT>. Когда пользователь помещает данные в элемент формы, инфоромация
размещается в разделе VALUE данного элемента.
2.2. INPUT
Тэг <INPUT> используется для ввода одной строки текста или одного слова.
Атрибуты:
53
TYPE
Определяет тип поля ввода. По умолчанию это простое
поле ввода для одной строки текста. Остальные типы должны
быть явно указаны:
TEXT
Данный тип поля ввода описывает однострочное поле
ввода. Используйте атрибуты MAXLENGTH и SIZE для
определения максимальной длинны вводимого значения в
символах и размера отображаемого поля ввода на экране (по
умолчанию принимается 20 символов).
PASSWORD
То же самое, что и атрибут TEXT, но вводимое
пользователем значение не отображается броузером на экране.
RADIO
Данный атрибут позволяет вводить одно значение из
нескольких альтернатив. Для создания набора альтернатив вам
необходимо создать несколько полей ввода с атрибутом
TYPE="RADIO" с разными значениями атрибута VALUE, но с
одинаковыми значениями атрибута NAME. В CGI-программу
будет передано значение типа NAME=VALUE, причем VALUE
примет значение атрибута VALUE того поля ввода, которое в
данный момент будет выбрано (будет активным). При выборе
одного из полей ввода типа RADIO все остальные поля данного
типа с тем же именем (атрибут NAME) автоматически станут
невыбранными на экране.
CHECKBOX
Используется
для
простых
логических
(BOOLEAN)
значений. Значение, ассоциированное с именем данного поля,
которое будет передаваться в вызываемую программу, может
принимать значение ON или OFF.
IMAGE
Данный
тип
поля
ввода
позволяет
вам
связывать
графический рисунок с именем поля. При нажатии мышью на
какую-либо
часть
рисунка
будет
немедленно
вызвана
ассоциированная форме программа. Значения, присвоенные
переменной NAME будут выглядеть так - создается две новых
54
переменных: первая имеет имя, обозначенное в поле NAME с
добавлением .x в конце имени. В эту переменную будет
помещена X-координата точки в пикселах ( считая началом
координат левый верхний угол рисунка), на которую указывал
курсор мыши в момент нажатия, а переменная с именем,
содержащимся в NAME и добавленным .y, будет содержать Yкоординату. Все значения атрибута VALUE игнорируются. Само
описание картинки осуществляется через атрибут SRC и по
синтаксису совпадает с тэгом <IMG>.
HIDDEN
Поля данного типа не отображаются броузером и не дают
пользователю
изменять
присвоенные
данному
полю
по
умолчанию значение. Это поле используетс для передачи в
программу статической информации, как то ID прользователя,
пароля или другой информации.
SUBMIT
Данный тип обозначает кнопку, при нажатии которой
будет вызвана CGI-программа (или URL), описанная в заголовке
формы. Атрибут VALUE может содержать строку, которая будет
высвечена на кнопке.
RESET
Данный тип обозначает кнопку, при нажатии которой все
поля формы примут значения, описанные для них по умолчанию.
NAME
Имя поля ввода. Данное имя используется как уникальный
идентификатор поля, по которому, впоследствии, вы сможете
получить данные, помещенные пользователем в это поле.
SIZE
Определяет визуальный размер поля ввода на экране в
символах.
MAXLENGTH
Определяет количество символов, которое пользователи
могут ввести в поле ввода. При превышении количества
допустимых символов броузер реагирует на попытку ввода
нового символа звуковым сигналом и не дает его ввести. Не
путать с атрибутом SIZE. Если MAXLENGTH больше чем SIZE,
то в поле осуществляется скроллинг. По умолчанию значение
55
MAXLENGTH не ограничено.
Означает, что CHECKBOX или RADIOBUTTON будет
CHECKED
выбран.
URL,. указывающий на картинку (используется совместно
SRC
с атрибутом IMAGE).
Присваивает полю значение по умолчанию или значение,
VALUE
которое будет выбрано при использовании типа RADIO (для
типа RADIO данный атрибут обязателен)
Пример 2: Example2.html
<HTML>
<HEAD><TITLE>Пример 2</TITLE></HEAD>
<BODY>
<FORM METHOD="post" ACTION="Example2.html">
<INPUT TYPE= "TEXT" NAME="N1" SIZE="20" MAXLENGTH=30"
VALUE=" "><br>
<INPUT TYPE= "RADIO" NAME="N2" VALUE=" " CHECKED> 1<br>
<INPUT TYPE= "RADIO" NAME="N2" VALUE=" "> 2<br>
<INPUT TYPE= "SUBMIT" VALUE=" Submit"><br>
</FORM></BODY></HTML>
2.3. Меню выбора в формах
Под меню выбора в формах понимают такой элемент интерфейса, как
LISTBOX. Существует три типа тэгов меню выбора для форм:
2.3.1. SELECT
Тэг SELECT позволяет пользователю выбрать значение из фиксированного
списка значений. Обычно это представлено выпадающим меню. Тэг SELECT
имеет один или более параметр пежду стартовым тэгом <SELECT> и
завершающим </SELECT>. По умолчанию, первый элемент отображается в
строке выбора.
<FORM>
<SELECT NAME= >
<OPTION >
56
<OPTION>
</SELECT>
</FORM>
2.3.2. SELECT SINGLE
Тэг SELECT SINGLE - это то же самое, что и SELECT, но на экране
пользователь видит одновременно несколько элементов выбора (три по
умолчанию). Если их больше, то предоставляется автоматический вертикальный
скроллинг. Количество одновременно отображаемых элементов определяется
атрибутом SIZE.
<FORM>
<SELECT SINGLE NAME= SIZE= >
<OPTION>
<OPTION>
<OPTIONS>
</SELECT>
</FORM>
2.3.3. SELECT MULTIPLE
Тэг SELECT MULTIPLE похож на тэг SELECT SINGLE, но пользователь
может одновременно выбрать более чем один элемент списка. Атрибут SIZE
определяет количество одновременно видимых на экране элементов, атрибут
MULTIPLE - максимальное количество одновременно выбранных элементов.
Если выбрано одновременно несколько значений, то серверу передаютс
соответствующее
выбранному
количество
параметров
NAME=VALUE
с
одинаковыми значениями NAME, но разными VALUE.
<FORM>
<SELECT MULTIPLE NAME= SIZE= MULTIPLE= >
<OPTION>
<OPTION>
<OPTIONS>
</SELECT>
</FORM>
Пример 3: Example3.html
57
<HTML>
<HEAD><TITLE>Пример 3</TITLE></HEAD>
<BODY>
<FORM METHOD="post" ACTION="Example3.html">
< b>Оставьте отзыв о посещенном сайте</b><p>
<b> Фамилия: </b><br>
<INPUT TYPE=”TEXT” NAME=”name” SIZE=”15” MAXLENGTH=”25”
VALUE=” ”><br>
<b> Имя: </b><br>
<INPUT TYPE=”TEXT” NAME=”name” SIZE=”10” MAXLENGTH=”15”
VALUE=” ”><br>
<b> Отчество:</b><br>
<INPUT TYPE=”TEXT” NAME=”name” SIZE=”15” MAXLENGTH=”25”
VALUE=” ”><br>
<b> Как часто Вы посещаете наш сайт:</b><br>
<SELECT NAME= SIZE=>
<OPTION VALUE=” ”> Частота посещения сайта
<OPTION VALUE=”0 ”>Несколько раз в месяц
<OPTION VALUE=”1 ”> Несколько раз в неделю
<OPTION VALUE=”2 ”> Каждый день
<OPTION VALUE=”3 ”> Это мой первый визит
<OPTION VALUE=”4 ”> Не посещаю
</SELECT><br>
<b> Ваши замечания:</b><br>
<TEXTAREA NAME="Comments" ROWS=3
COLS=40></TEXTAREA><br>
<INPUT TYPE= "SUBMIT" VALUE=" Submit"><br>
</FORM></BODY></HTML>
Лекция 8 Дополнительные возможности PHP
План
1. Протокол HTTP и сеансы пользователей. Сохранение информации о состоянии.
58
2. Основные функциональные средства управления сеансом.
Содержание
1. Протокол HTTP и сеансы пользователей. Сохранение информации о
состоянии.
Все HTTP-транзакции имеют один общий формат. Каждый запрос клиента и
ответ сервера состоит из трех частей: строки запроса (ответа), раздела заголовка и
тела. Клиент инициирует транзакцию следующим образом:
1. Клиент устанавливает связь с сервером по назначенному номеру порта (по
умолчанию - 80). Затем клиент посылает запрос документа, указав HTTP-команду,
называемую методом, адрес документа и номер версии HTTP. Например, в
запросе
GET /index.html HTTP/1.0
используется метод GET, которым с помощью версии 1.0 HTTP запрашивается
документ index.html. Методы HTTP более подробно рассматриваются ниже.
2. Клиент посылает информацию заголовка (необязательную), чтобы сообщить
серверу информацию о своей конфигурации и данные о форматах документов,
которые он может принимать. Вся информация заголовка указывается построчно,
при этом в каждой строке приводится имя и значение. Например, приведенный
ниже заголовок, посланный клиентом, содержит его имя и номер версии, а также
информацию о некоторых предпочтительных для клиента типах документов:
User-Agent: Mozilla/4.05 (WinNT; 1)
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Завершается заголовок пустой строкой.
3. Послав запрос и заголовки, клиент может отправить и дополнительные
данные. Эти данные используются главным образом теми CGI-программами,
которые применяют метод POST. Клиенты (например, Netscape Navigator-Gold),
также могут использовать их для помещения отредактированной страницы
обратно на Web-сервер.
Сервер отвечает на запрос клиента следующим образом:
59
1. Первая часть ответа сервера - строка состояния, содержащая три поля:
версию HTTP, код состояния и описание. Поле версии содержит номер версии
HTTP, которой данный сервер пользуется для передачи ответа.
Код состояния - это трехразрядное число, обозначающее результат обработки
сервером
запроса
клиента.
Описание,
следующее
за
кодом
состояния,
представляет собой просто понятный для человека текст, поясняющий код
состояния. Например, строка состояния
НТТР/1.0 200 OK
говорит о том, что сервер для ответа использует версию HTTP 1.0. Код
состояния 200 означает, что запрос клиента был успешным и затребованные
данные будут переданы после заголовков.
2. После строки состояния сервер передает клиенту информацию заголовка,
содержащую данные о самом сервере и затребованном документе. Ниже приведен
пример заголовка:
Date: Fri, 10 Jan 1998 08:17:58 GMT
Server: Apache/1.2.6
Last-modified: Mon, 12 Jun 1997 21:53:08 GMT
Content-type: text/html
Content-length: 2482
Завершает заголовок пустая строка.
3. Если запрос клиента успешен, то посылаются затребованные данные. Это
может быть копия файла или результат выполнения CGI-программы. Если запрос
клиента удовлетворить нельзя, передаются дополнительные данные в виде
понятного для пользователя разъяснения причин, по которым сервер не смог
выполнить данный запрос.
В HTTP 1.0 за передачей сервером затребованных данных следует
разъединение с клиентом, и транзакция считается завершенной, если не передан
заголовок Connection: Keep Alive. В HTTP 1.1 сервер по умолчанию не разрывает
соединение и клиент может посылать другие запросы. Поскольку во многие
документы встроены другие документы - изображения, кадры, апплеты и т.д., это
позволяет сэкономить время и затраты клиента, которому в противном случае
пришлось бы для получения всего одной страницы многократно соединяться с
60
одним и тем же сервером. Таким образом, в HTTP 1.1 транзакция может
циклически повторяться, пока клиент или сервер не закроет соединение явно.
HTTP не сохраняет информацию по транзакциям, поэтому в следующей
транзакции приходится начинать все заново.
Преимущество состоит в том, что HTTP сервер может обслужить в
заданный промежуток времени гораздо больше клиентов, ибо устраняются
дополнительные расходы на отслеживание сеансов от одного соединения к
другому.
Есть и недостатки.
Индивидуальные запросы не связаны друг с другом, Веб-сервер (и
следовательно
РНР)
не
располагает
средствами
различения
конкретных
пользователей. Поэтому программисту необходимо самостоятельно определить
способ идентификации пользователя и связать с конкретным пользователем
данные соответствующего сеанса работы.
2. Основные функциональные средства управления сеансом.
Термином сеанс обозначается ситуация, когда пользователь посещает сайт.
В РНР существует множество способов управления сеансом.
1. Хранение информации на клиенте.
Данные не должны храниться на клиенте по ряду причин:
- разработчик теряет контроль над данными, пока пользователь не вернется
на сайт, нельзя получить к ним доступ.
- пользователи зачастую отключают файлы персональных настроек
1.
Данные должны храниться на сервере.
Где именно они хранятся, значения не имеет. Это может быть СУБД,
текстовый файл и т.д.
61
Чтобы ассоциировать данные с конкретным пользователем, потребуется
идентификационный номер сеанса – ключ, который связывает пользователя с его
данными.
Как запомнить сведения о пользователе?
1. Один из вариантов – использование ip-адреса пользователя.
У способа существуют ограничения, например – прокси-сервера.
2. Создание собственного уникального идентификатора.
Пример.
<?
$rand(time()*1000000);
$session_id=md5(uniqid(rand());?>
Как сделать идентификатор сеанса доступным для всех станиц приложения?
1. Использовать файлы персональных настроек.
<?php
$session_id =md5(uniqid(rand());
setcookie(“session_id ”, $session_id, time()+3600);?>
2. Использовать ручную перезапись URL
Необходимо передавать при переходе по страницам идентификатор сеанса
методами POST/GET ил поместить его в URL. Для этого нужно изменить все
фреймы, все формы и все ссылки.
<?
print “<frame src=”page.php?session_id=”.$session_id.”>”;
print “<input type= “hidden” name=’session_id’ value=”.$session_id.”>”;
print “<a href=”page.php?session_id=”.$session_id.”>TEXT</a>”;?>
3. Использование собственных средств РНР – сессий.
<?
session_start();
$session_id =md5(uniqid(rand());
session_register(“$session_id”);?>
62
3.Идентификация пользователей. Базовая аутентификация в PHP.
Правильно введенные имя и пароль открывают пользователю доступ к
каталогам сервера, недоступным для анонимного доступа. Этот принцип
аутентификации
называется
схемой
«запрос/ответ».
Запросом
является
приглашение к вводу имени и пароля, а ответом – введенные данные. Если
введенная
комбинация
верна,
пользователю
предоставляется
доступ
к
защищенным каталогам; в противном случае попытка доступа отклоняется с
выводом соответствующего сообщения.
1.1. Запрос данных для аутентификации пользователя.
<?
header (‘WWW-Authenticate: Basic realm=”Secret Family Recipes”’);
header (‘HTTP/1.0 401 Unauthorized’);
exit();?>
Результатом выполнения кода становится вызов стандартного окна ввода
пароля.
1.2 Следующим шагом после подготовки интерфейса для ввода пароля
является обработка имени пользователя и пароля. Эти данные хранятся в двух
глобальных переменных: $PHP_AUTH_USER, $PHP_AUTH_PW. Если данные не
были введены, окно аутентификации отображается заново.
<?
if
($PHP_AUTH_USER!=””)
||
($PHP_AUTH_PW!=””)
||
($PHP_AUTH_USER!=”user”) || ($PHP_AUTH_PW!=”pwd”)
{
header (‘WWW-Authenticate: Basic realm=”Secret Family Recipes”’);
header (‘HTTP/1.0 401 Unauthorized’);
exit();
}?>
4.Реализация контроля доступа: хранение паролей, шифрование
паролей.
63
Шифрование данных имеет смысл только в том случае, если сценарии, в
которых используются средства шифрования, работают на защищенном сервере,
т.к. перед шифрованием данные отправляются на сервер в простом текстовом
формате.
Наиболее популярным является хэширующий алгоритм md5() для создания
цифровых подписей, позволяющих однозначно идентифицировать отправителя.
Хранение паролей всегда осуществляется в хэшированном виде.
Лекция 9 Поддержка баз данных в PHP
1. Поддержка баз данных в РНР.
2.Установка соединения с сервером БД
3. Выбор БД
4.Выполнение запросов к БД
5. Получение и обработка результатов запроса.
6.Отсоединение от БД
7. Освобождение ресурсов.
1. Поддержка баз данных в РНР.
В РНР реализована мощная поддержка практически всех серверов баз данных, в
том числе:
Dbase, Emopress, Informix, InterBase, MySQL, MS SQL Server, PostgreSQL, Sybase,
UNIX dbm и др.
Поддержка базы данных в РНР представлена набором стандартных функций для
соединения с базой, обработки запроса и разрыва связи.
Наиболее часто в качестве сервера баз данных в паре с РНР используется MySQL
, что обусловлено скоростью, надежностью и гибкой лицензионной политикой.
Рассмотрим основные этапы взаимодействия РНР с базой данных на примере
MySQL .
1.1. Установить соединение с сервером MySQL. Если попытка завершается
неудачей, вывести соответствующее сообщение и завершить процесс.
64
1.2. Выбрать базу данных сервера MySQL. Если попытка выбора завершится
неудачей, вывести соответствующее сообщение и завершить процесс.
1.3. Обработать запросы к выбранной базе данных.
1.4. После завершения обработки запросов закрыть соединение с сервером баз
данных.
2.Установка соединения с сервером БД
Функция mysql_connect() устанавливает связь с сервером баз данных.
Синтаксис функции
int mysql_connect(string host, string user_name, string password)
Пример.
@mysql_connect(“doc200”, “login”, “pwd”)
or die (“Нет подключения к серверу!”);
3. Выбор БД
После успешного соединения с MySQL необходимо выбрать базу данных с
помощью функции mysql_select_db().
Синтаксис функции
int mysql_select_db(string dbname, int link)
Пример.
@mysql_connect(“doc200”, “login”, “pwd”)
or die (“Нет подключения к серверу!”);
@mysql_select_db(“id”, “pwd”)
or die (“База данных не может быть выбрана!”);
4.Выполнение запросов к БД
Функция mysql_query() обеспечивает интерфейс для обращения с запросами к
базам данных.
Синтаксис функции
int mysql_query(string query, int link)
65
В зависимости от типа запроса вызов функции mysql_query() может приводить к
различным последствиям. При успешном выполнении команды SELECT
возвращается идентификатор результата, который впоследствии передается
функции
mysql_result() для последующего форматирования и отображения
результатов запроса.
5. Получение и обработка результатов запроса
Функция mysql_result() используется в сочетании с mysql_query() для получения
набора данных.
Синтаксис функции
int mysql_result(int result, int record)
Пример.
@mysql_connect(“doc200”, “login”, “pwd”)
or die (“Нет подключения к серверу!”);
@mysql_select_db(“id”, “pwd”)
or die (“База данных не может быть выбрана!”);
$query =”SELECT Name FROM User”;
$result= mysql_query($query);
$i=0;
while ($i<mysql_num_rows($result))
{
print mysql_result($result, $i).”<br>”;
$i++;
}
6.Отсоединение от БД
После завершения работы с сервером баз данных соединение нужно закрыть.
Синтаксис функции
int mysql_close(int link)
Пример.
66
@mysql_connect(“doc200”, “login”, “pwd”)
or die (“Нет подключения к серверу!”);
@mysql_select_db(“id”, “pwd”)
or die (“База данных не может быть выбрана!”);
$query =”SELECT Name FROM User”;
$result= mysql_query($query);
$i=0;
while ($i<mysql_num_rows($result))
{
print mysql_result($result, $i).”<br>”;
$i++;
}
mysql_close();
7. Освобождение ресурсов
Функция mysql_free_result () освобождает всю память, связанную с конкретным
запросом.
Синтаксис функции
int mysql_free_result (int result)
67
3 ПЛАН САМОСТОЯТЕЛЬНОЙ РАБОТЫ СТУДЕНТОВ
№
Форма
контроля
Кол-во часов
Содержание
самостоятельной работы
О
З
С
1
Типы данных в РНР
10
10
10
Отчет
2
Регулярные выражения в РНР
10
10
10
Отчет
3
Инициализационный файл
РНР
20
20
20
4
Суперглобальные переменные
20
20
20
5
Учебный проект
«Персональная страница»
34
54
54
6
Работа с СУБД MySQL.
Решение типовых задач
-
22
26
Отчет
Отчет
Отчет
Отчет
68
4 КОНТРОЛЬНЫЕ РАБОТЫ (ТОЛЬКО ДЛЯ ЗО).
4.1 Методические
рекомендации
по
выполнению
и
оформлению
контрольных работ;
4.2 Перечень рекомендуемой литературы;
4.3 Темы (варианты) контрольных работ.
Не предусмотрены учебным планом
69
5 КУРСОВЫЕ РАБОТЫ (УЧЕБНЫЕ ПРОЕКТЫ)
5.1 Тематика;
В рамках курса студенты реализуют самостоятельно индивидуальный
учебный проект «Персональная страница» с описанием собственного портфолио.
Проект основывается на создании динамического веб- приложения,
осуществляющего взаимодействие с базой данных, позволяющего обновлять
ресурс при помощи административной оболочки без изменения программного
кода.
5.2 Методические рекомендации по выполнению;
Шаг 1. Проектирование интерфейса приложения
Шаг 2. Проектирование базы данных
Шаг 3. Проектирование структуры каталогов
Шаг 4. Реализация основных скриптов
Шаг 5.Тестирование приложения
5.3 Указания по оформлению;
Работа должна иметь следующую структуру:
Введение
1. Проектирование интерфейса приложения
2. Проектирование базы данных
3. Проектирование структуры каталогов
4.Примеры основных скриптов
5.Методика тестирования приложения
Заключение
К работе должна прилагаться дискета или CD-диск, содержащий материалы
разработанного сайта в форме, пригодной для демонстрации.
5.4 Перечень рекомендуемой литературы.
Е. П. Истомин, В. В. Новиков, М. В. Новикова. Высокоуровневые методы
информатики и программирования. Андреевский Издательский дом, 2008,
70
228 с.
Веллинг Л. Разработка Web- приложений с помощью PHP и MySQL:
пособие / Л. Веллинг, Л. Томсон - Москва : Питер, 2008. 800 c.
Веллинг Л. Разработка Web- приложений с помощью PHP и MySQL :
пособие / Л. Веллинг, Л. Томсон - Москва : Питер, 2004. 800 c.
71
6 МОДУЛИ (ТОЛЬКО ДЛЯ ДНЕВНОГО ОБУЧЕНИЯ).
Не предусмотрены
72
7 КОНТРОЛЬ
7.1 Структура и бальная оценка каждого рейтинга
Рейтинг 1
5 баллов – посещаемость
10 баллов –тест
35 баллов –практические работы
Рейтинг 2
5 баллов – посещаемость
10 баллов –тест
35 баллов –практические работы
7.2 Тестовые задания:
Вопрос 1.Все формы начинаются тэгом _____________.
Вопрос 2.Когда пользователь заполняет форму и нажимает кнопку ____________,
информация, введенна пользователем в форму, посылается HTTP-серверу для
обработки и передаче другим программам, работающим под сервером.
Вопрос
3.Тэг
______________используется
для
того,
чтобы
позволить
пользователю вводить более одной строки информации.
Вопрос 4.Атрибут формы _______________ описывает URL, который будет
вызываться для обработки формы.
Вопрос 5.Атрибут формы ______________ определяет метод посылки сообщения
с данными из формы.
Вопрос 6.Если в качестве метода посылки сообщения с данными из формы указан
_______________, то информация из формы добавляется в конец URL, который
был указан в описании заголовка формы.
Вопрос 7.Если в качестве метода посылки сообщения с данными из формы указан
_______________, то информация из формы передается после обращения к
указанному URL в теле запроса.
Вопрос 8.Тэг __________используется для ввода одной строки текста или одного
слова.
73
Вопрос 9.Тип поля ввода тэга <INPUT>
____________ позволяет связывать
графический рисунок с именем поля.
Вопрос 10.Поля тэга <INPUT> типа _________не отображаются браузером и не
дают пользователю изменять присвоенные данному полю по умолчанию
значение.
Вопрос 11.Атрибут тэга <INPUT> ___________определяет тип поля ввода.
Вопрос 12.Тип поля ввода тэга <INPUT> ___________ позволяет вводить одно
значение из нескольких альтернатив.
Впрос 13.Тип поля ввода тэга <INPUT>
___________обозначает кнопку, при
нажатии которой все поля формы примут значения, описанные для них по
умолчанию.
Вопрос 14.Атрибут тэга <INPUT> ___________определяет имя поля ввода.
Вопрос 15.Атрибут тэга <INPUT> ___________определяет визуальный размер
поля ввода на экране в символах.
Вопрос 16. Какой из атрибутов тэга <INPUT> присваивает полю значение по
умолчанию:
SIZE NAME VALUE MAXLENGTH CHECKED TYPE SRC
Вопрос 17.
Какой
из
атрибутов
тэга
<INPUT>
означает,
что
CHECKBOX
или
RADIOBUTTON будет выбран:
SIZE NAME VALUE MAXLENGTH CHECKED TYPE SRC
Вопрос 18. Какой из атрибутов тэга <INPUT> определяет количество символов,
которое пользователи могут ввести в поле ввода:
SIZE NAME VALUE MAXLENGTH CHECKED TYPE
SRC
Вопрос 19.Тэг_______________ позволяет пользователю выбрать значение из
фиксированного списка значений.
Вопрос 20. Тэг _______________ позволяет пользователю одновременно выбрать
более чем один элемент списка.
Вопрос 21.
Тэг ______
позволяет
пользователю выбрать
значение из
фиксированного списка значений, при этом на экране пользователь видит
одновременно несколько элементов выбора.
74
Вопрос 22. Скрипты PHP выполняются на ____________, т. е. посетителю WEBстраницы PHP-код не доступен.
Вопрос 23. Инструкции PHP разделяются _________________.
Вопрос 24. Укажите верные утверждения.
Присвоение $a=1; инициализирует константу a.
Присвоение $a=1; инициализирует переменную a.
В результате выполнения инструкций: a=15; b=3; if ($a > $b) print "a is bigger
than b"; на станице будет выведено"a is bigger than b".
Вопрос 25. Какие из приведенных фрагментов могут быть блоками PHP-скрипта:
…
1 <form method="post" action="2.php">
<input type="submit" value=">>">
</form>
…
2 <form method=\"post\" action=\"2.php\">
<input type=\"submit\" value=\">>\">
</form>
…
3 print "<table><tr><td>Name</td><tr></table>";
…
…
<table><tr><td>Name</td><tr></table>
…
Вопрос 26. С какой целью используется переменная S в следующем скрипте:
$myform= "<form method=\"post\" action=\"my.html\">
<input type=\"hidden\" name=\"S\" value=\"1\">
Пользователь:<input type=\"text\" name=\"UserName\" value=\"\"><br>
<input type=\"submit\" value=\">>\">
</form>”;
if ($S!= "1") print $myform;
Для проверки - отображалась ли ранее форма
75
Для передачи значения "1" на страницу my.html
Для проверки – была ли нажата кнопка отправки данных
Для вывода формы на страницу
Для передачи данных о пользователе на страницу my.html
Вопрос 27. В результате выполнения инструкций
$UserName="Иванов";
$Adress="";
print "Пользователь: ".$UserName. "<br>"." Адрес: ".$Adress;
на станице будет выведено:
Пользователь: $UserName. Адрес: $Adress
Пользователь: Иванов. Адрес:
Пользователь: Иванов.
Адрес:
Пользователь: Иванов
Адрес:
Вопрос
28.PHP
позволяет
определить
константы
с
помощью
функции_______________
Вопрос 29.Функция ___________читает файл и записывает его в массив.
Вопрос 30.Функция ___________ открывает файл.
Вопрос 31.Какой из вызовов функции fopen( )открывает файл file.txt для чтения и
для записи и помещает указатель на конец файла.
$fp = fopen("/home/rasmus/file.txt", "a");
$fp = fopen("/home/rasmus/file.txt", "a+");
$fp = fopen("/home/rasmus/file.txt", "r");
$fp = fopen("/home/rasmus/file.txt", "r+");
$fp = fopen("/home/rasmus/file.txt", "w");
$fp = fopen("/home/rasmus/file.txt", "w+");
Вопрос 32. Какой из вызовов функции fopen( )открывает файл file.txt только для
записи и помещает указатель на конец файла.
$fp = fopen("/home/rasmus/file.txt", "a");
$fp = fopen("/home/rasmus/file.txt", "a+");
$fp = fopen("/home/rasmus/file.txt", "r");
$fp = fopen("/home/rasmus/file.txt", "r+");
76
$fp = fopen("/home/rasmus/file.txt", "w");
$fp = fopen("/home/rasmus/file.txt", "w+");
Вопрос 33.Какой из вызовов функции fopen( )открывает файл file.txt только для
записи указатель на начало файла и очищает все содержимое файла.
$fp = fopen("/home/rasmus/file.txt", "a");
$fp = fopen("/home/rasmus/file.txt", "a+");
$fp = fopen("/home/rasmus/file.txt ", "r");
$fp = fopen("/home/rasmus/file.txt", "r+");
$fp = fopen("/home/rasmus/file.txt", "w");
$fp = fopen("/home/rasmus/file.txt", "w+");
Вопрос 34.Функция ___________ проверяет, существует ли файл с заданным
именем.
Вопрос 35.Функция ___________ возвращает размер в байтах файла с указанным
именем, или FALSE.
Вопрос 36.Функция ___________ закрывает файл с заданным манипулятором.
Вопрос 37.Функция ___________ записывает содержимое строковой переменной
в файл с заданным манипулятором.
Вопрос
38.Функция
___________
считывает
из
файла,
заданного
манипулятором, указанное количество байт.
Вопрос 39.Функция ___________ вырезает подстроку из строки.
Вопрос 40.Функция ____________ возвращает форматированное локальное
время/дату.
Вопрос 41.Функция ____________ заменяет все вхождения строки на указанную
строку.
Вопрос 42.Функция ____________ проверяет, присвоено ли переменной значение.
Вопрос 43.Функция ____________ cоздает массив.
Вопрос 44 Функция ____________ позволяет присвоить значения списку
переменных.
77
8 КОНТАКТНАЯ ИНФОРМАЦИЯ ПРЕПОДАВАТЕЛЯ.
Кузнецова Ирина Сергеевна
e-mail: ikuzn@mail.ru
78
Download