
- •Минск, бгу,
- •Глава 1. Компьютерные сети и протоколы
- •Глава 2. Проектирование и разработка сайтов……………………….62
- •Глава 3. Краткий обзор основных технологий разработки Веб приложений…………………………………………………………..……......90
- •Глава 4. Информационный обмен, html и css.…..……………….132
- •Глава 5. Язык JavaScript………………………………………………..202
- •Глава 6. Язык серверных скриптов php…………...…………………286
- •Глава 7. Лабораторные работы……………………..………………….400
- •Введение Коротко об истории Интернет
- •Как работает Интернет?
- •Система адресации
- •Способы подключения к сети
- •Сервисы Интернет
- •Электронная почта
- •Передача файлов по ftp
- •Всемирная паутина www
- •Глава 1. Компьютерные сети и протоколы
- •Локальные сети
- •Распределенные и глобальные сети
- •Сеть vpn
- •Адресация в локальных сетях
- •Адресация в глобальных сетях и в Интернет
- •Адресация в iPv6
- •Доменные имена
- •Url адреса
- •Понятие и краткое описание протоколов
- •Соотношение между tcp/ip и osi/iso
- •Межсетевой протокол iPv4
- •Формат пакета iPv6
- •Формат заголовка пакета iPv6
- •Заголовки расширения iPv6
- •Маршрутный заголовок
- •Транспортный протокол tcp
- •Протокол дейтаграмм udp
- •Протоколы arp и rarp
- •Протоколы сетевого уровня
- •Протоколы электронной почты
- •Протоколы smtp и pop3
- •Протокол imap4
- •Протокол ftp
- •Протокол передачи гипертекстов
- •Клиентский запрос http
- •Ответ сервера
- •Развитие прикладных протоколов: rpc, rest, soap
- •Безопасность в сети
- •Протокол ssl
- •Шифрование данных
- •Установление подлинности участников
- •Реализация ssl
- •Как избежать блокирования сайтов
- •Проблемы с кодировкой и Unicode
- •Задания для подготовки рефератов
- •Адресация в iPv6.
- •Глава 2. Проектирование и разработка сайтов
- •2.1. Виды сайтов
- •2.2. Этапы проектирования и разработки сайта
- •2.3. Модели проектирования и управление проектами
- •2.3.1 Модель водопада для управления проектами
- •2.3.2 Итерационная (спиральная) модель
- •2.3.3 Технология Microsoft Solutions Framework (msf)
- •2.3.4 Другие технологии управления проектами
- •2.4. Программные средства управления проектами
- •2.5.1. Стили сайтов
- •2.6. Логическое проектирование дизайна сайта
- •2.7. Главная страница сайта
- •2.8. Внутренние страницы сайта
- •2.9. Оценки качества Веб-сайтов
- •2.9.1. Оценки качества для e-commerce
- •2.9.2. Ключевые индикаторы для e-commerce
- •2.9.3. Определение качества и рейтинга сайтов учебных заведений
- •2.9.4. Оценка качества и стоимости сайта
- •Глава 3. Краткий обзор основных технологий разработки Веб-приложений
- •3.1. Язык разметки гипертекста xml
- •3.1.1. Синтаксис xml
- •Объявление xml. Первая строка xml-документа называется объявление xml.
- •Конструкции языка xml. Повторим еще раз содержимое xml-документа: набор элементов, секций cdata, директив анализатора, комментариев, спецсимволов, текстовых данных.
- •3.1.2. Правильно построенные и действительные документы xml
- •Отображение xml-документа. Наиболее распространены три способа преобразования xml-документа в отображаемый для пользователя вид:
- •3.3. Язык ActionScript
- •3.3.1. Видео-, аудиопроигрыватели
- •3.5. Технология «клиент-сервер»
- •3.6. Программирование для серверов
- •Язык Java на клиентской и серверной странице
- •3.7. Базы данных и язык sql
- •Нормализация модели данных
- •3.8. Язык sql
- •Команды управления транзакциями
- •Извлечение данных, команда select
- •Секция where. Директива where содержит условия отбора (предикат). Синтаксис where выглядит следующим образом:
- •Групповые функции. Если нас интересуют не строки таблицы, а некоторые итоги, мы можем использовать в процессе выборки колонок таблиц групповые функции (табл. 3.5.).
- •Команда insert. Добавление новых записей в таблицу осуществляется посредством команды insert. Она имеет следующий синтаксис:
- •Глава 4. Информационной обмен, нтмl и css
- •4.1. Язык разметки гипертекста html
- •4.2. Ссылки
- •4.3. Списки
- •4.3. Формы html
- •4.2.2. Новые элементы форм html5
- •4.2.3. Новые возможности html5
- •Поддержка аудио
- •Поддержка видео
- •4.3. Каскадные таблицы стилей css
- •4.3.1. Способы включения каскадных таблиц стилей
- •Заголовок 1 Заголовок 2 Заголовок 3
- •4.4. Цвет и фон
- •Свойства таблиц
- •4.5. Псевдоклассы
- •Псевдоэлементы
- •4.5.1. Форматирование псевдоклассов и псевдоэлементов
- •Различные свойства
- •Отступы, поля, позиционирование
- •Границы элементов
- •Новое в css3
- •Глава 5. Язык JavaScript
- •5.1. Включение скриптов JavaScript в html-код
- •Создание простых сценариев
- •Комментарии.
- •Отладка скриптов. Ввод и вывод данных
- •5.2. Описание языка
- •5.2.1. Типы данных
- •Преобразование типа
- •5.2.2 Операторы и выражения
- •Оператор присваивания
- •Арифметические операторы
- •Операторы сравнения
- •Оператор with
- •Оператор switch
- •5.3. Функции
- •5.3.1. Стандартные функции.
- •Eval() : позволяет выполнить строку, содержащую выражение, как javascript-код. Это полезно когда код формируется в ходе выполнения скрипта. Пример реализации простейшего калькулятора приведен ниже:
- •5.3.2. Функции пользователя
- •5.3.3. Передача параметров по значению и по ссылке
- •5.3.4. Глобальные и локальные переменные
- •5.3.5. Модель событий
- •Ключевое слово this
- •5.3.6. Модель событий JavaScript 1.2 и объект Event.
- •5.4. Объектная модель
- •5.4.1. Пользовательские объекты
- •5.4.2. Прототипы
- •5.4.3. Исключения: throw/catch/finally
- •5.4.4. Встроенные объекты String, Array, Date, Math Объект String. Экземпляр объекта можно объявить двумя способами:
- •Объект Array
- •Объект Date (Дата)
- •Методы объекта Date
- •5.5.1. Коллекции
- •Свойства элемента innerHtml и outerHtml
- •Навигация по дереву документа
- •Создание новых узлов
- •Удаление и замена узлов в документе
- •Объект window
- •Свойства окна, передаваемые методу open()
- •Методы объекта window
- •Свойства и методы объекта navigator
- •Свойства и методы объекта history
- •Свойства и методы объекта location
- •Объект layer
- •Каскадные таблицы стилей и объект style
- •Модель ajax:
- •5.6.1 Класс xmlHttpRequest
- •Использование dom
- •Работа с cookie
- •5.7.2. Манипуляции с dom
- •5.5.3. Блочная верстка
- •5.7.3. Обработка событий
- •5.7.3. Обработка событий
- •5.8. Примеры на JavaScript
- •Глава 6. Язык серверных скриптов php
- •Инструменты для разработки
- •Как php работает
- •Описание языка Типы данных
- •Массивы и инициализация массивов
- •Операции и выражения
- •Операции сравнения
- •Логические операции
- •Строковые операции
- •Операторы управления
- •Функции
- •Рекурсивные функции
- •Область действия и время жизни переменных
- •Изменяемые (динамические) переменные
- •Внешние библиотечные функции
- •Функции для работы с массивами
- •Функции для работы со строками.
- •Функции форматных преобразований строк
- •Преобразование строк и файлов к формату html и наоборот
- •Преобразование html в простой текст
- •Установка локальных настроек
- •Регулярные выражения
- •Функции даты и времени
- •Математические функции
- •Объектно-ориентированное программирование в php Основные понятия ооп
- •Классы и Объекты
- •Конструкторы и деструкторы
- •Наследование классов и интерфейсов
- •Магические методы
- •Обработка ошибок
- •Ошибки php и журнал error_reporting
- •Чтение и запись бинарных файлов
- •Работа с каталогами в рнр
- •MySql – сервер: бд1; бд2; бд3; бд4;
- •Команды sql для создания баз данных и таблиц
- •Выборка данных из бд
- •Выборка данных из таблиц бд
- •Работа с MySql (сохранение данных в базе данных).
- •Работа с MySql занесение и получение данных из базы данных
- •Организации работы с данными
- •Передача данных от клиента к серверу и обратно. Протокол http
- •Клиентские методы http
- •Обработка html-форм
- •Передача переменных из формы в скрипт.
- •Передача данных на сервер по методам get и post
- •Ввод данных из различных форм
- •Работа с e-mail
- •Cookies-наборы
- •Сессии (Сеансы)
- •Отмена регистрации сеансовых переменных
- •Сериализация объектов
- •Вывод графических данных с помощью рнр
- •Получение информации об изображении
- •Функции рисования прямых и кривых линий
- •Заливка изображений
- •Удаление и изменение цветов палитры
- •Создание прозрачности в изображениях
- •Рисование с помощью кистей
- •Использование шрифтов и вывод строк
- •Слияние изображений с помощью gd
- •Глава 7. Лабораторные работы Лабораторная работа 1 (4 часа). Инструменты и средства создания простых сайтов
- •Лабораторная работа 3 (4часа). Применение каскадных таблиц стилей css
- •Трехколоночный контейнерный макет сайта
- •Лабораторная работа 4. Применение каскадных таблиц стилей css
- •1. Свойства шрифтов.
- •2. Свойства текста.
- •3. Свойства цвета и фона.
- •4. Свойства рамки.
- •5. Свойства списков.
- •6. Свойства изображений.
- •Лабораторная работа 5 (4 часа). Динамика и JavaScript на Веб – странице.
- •Ответить на следующие вопросы
- •Лабораторная работа 6 по JavaScript (4 часа).
- •1.Проверка правильности заполнения формы на сайте
- •Методы объекта window
- •Задание 2. Функции
- •Задание 4. Работа с базами данных Выполнить одно из перечисленных ниже упражнений
- •Задание 5. Создание web-объектов Список заданий
- •Drupal: практические примеры
- •Приложение 1. Курсовые работы Курсовая работа 1. Создание клиентских приложений
- •Курсовая работа №2. Сайты клиент-сервер
- •Каталог товаров
- •Система вопрос/ответ
- •Курсовая работа №3. Технологии разработки Веб – приложений
- •Приложение 2. Быстрая разработка Веб-приложений
- •Начало работы с сайтом
- •Создание контента
- •Установка нового модуля
- •Создание шаблона
- •Включение блока отображение популярных статей
- •Удаление
Магические методы
Функции, __construct, __destruct, __call, __callStatic, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __invoke, __set_state , __clone , имена которых начинаются с символа “_“ , имеют особую функциональность в PHP классах. Методы доступа к свойствам объектов __get($name) и __set($name,$value) позволяют проводить динамическое назначение значений свойствам объектов. При вызове несуществующего метода объекта автоматически вызывается специальный метод __call().
<?php
class MyClass {
function __call($name, $params) {
echo "Вызван метод $name с параметром $params[0]";
}
}
$obj = new MyClass;
echo $obj->method(1); // "Вызван метод method с параметром 1"
?>
В качестве параметров __call() принимает имя вызываемого метода и передаваемые этому методу параметры. Псевдо-константа __METHOD__ возвращает имя класса и вызываемый метод.
Метод __toString() позволяет выполнить перегрузку преобразования объекта в строку.
Обработка ошибок
Начиная с версии 5 в PHP введена современная схема обработки исключений. Конструкция try/catch/throw позволит весь код обработки ошибок локализовать в одном месте сценария. Рассмотрим пример:
<?php
try {
$fp = @fopen("file.txt", "w");
if (!$fp) throw new Exception("Невозможно открыть файл!");
// Запись данных в файл
fclose($fp); }
catch (Exception $exception) {
echo "Ошибка в строке ", $exception->getLine();
echo $exception->getMessage(); // Выводит "Невозможно
// открыть файл"
}
?>
В конструкции можно использовать несколько блоков catch. Также возможно создание собственных классов исключений, производных от встроенного класса Exception.
Ошибки php и журнал error_reporting
Библиотека PHP может генерировать ряд ошибок, не относящихся к уровню исключений – ошибок OOP.
В PHP обрабатываются три уровня ошибок: информационные ошибки, ошибки с возможностью действия (предупреждения) и неустранимые (фатальные) ошибки. Информационные ошибки: E_NOTICE – компилятор столкнулся с логической проблемой, которая может привести к ошибке выполнения. Аналогично E_USER_NOTICE генерируемое пользователем уведомление
Предупреждения означают, что возможно придется завершить работу с выдачей сообщения из-за того, что нельзя открыть файл и т.д. Ошибка - E_WARNING предупреждение, генерируемое во время выполнения программы и связанное с возможностью выполнения функции или блока. Аналогично E_USER_WARNING генерируемое пользователем предупреждение. E_COMPILE_WARNING предупреждения времени компиляции.
Неустранимые (фатальные) ошибки возникают тогда, когда выполнение или загрузка программы невозможны. E_ERROR(1) фатальные ошибки времени выполнения. E_PARSE(4) ошибки разбора времени компиляции. E_COMPILE_ERROR(64) фатальные ошибки времени компиляции. E_CORE_ERROR(16) фатальные ошибки при начальном старте PHP. E_ALL всё вышеуказанное.
Уровень сообщений об ошибках устанавливается как значение директивы error_reporting. В PHP установлено значение по умолчанию error_reporting = E_ALL & ~E_NOTICE, что означает отображение всех ошибок и предупреждений, за исключением логических ошибок, которые имеют уровень E_NOTICE. Начальное значение error_reporting может быть изменено в php.ini-файле директивой error_reporting, в Apache httpd.conf-файле директивой php_error_reporting и, наконец, оно может быть установлено на этапе прогона скрипта функцией error_reporting().
Параметр error_reporting в php.ini файле устанавливает уровень строгости ошибок E_ERRORLEVEL, которые будут обрабатываться внутренним обработчиком ошибок. Параметр display_error устанавливает вывод сообщений об ошибках на экран. Параметр log_errors регистрацию ошибок в журнальном файле, указанном в параметре error_log.
Cуществует большое количество скриптов не справляющихся с пользовательскими ошибками. Любой скрипт может "свалиться" при наступлении "критичных" условий. Всегда нужно: проверять результаты вызова функций; проверять результаты системных вызовов. При вызове функции, результаты которой подвергаются дальнейшей обработке, следует убедиться, что возвращаемые данные находятся в интервале допустимых значений. При обращении к внешним файлам или процессам всегда следует проверять, всё ли работает корректно. Например, при вызове функции sql_connect() следует убедиться, что подключение к БД действительно имело место.
$conn = @sql_connect ($host, $user, $pass);
if (!$conn) {
die (sprintf ("Ошибка [%d]: %s", sql_errno (), sql_error ()));
}
?>
При разработке следует установить уровень сообщений об ошибках error_reporting в файле php.ini на E_ALL, т.е. на высший уровень. При другой конфигурации многие ошибки типа "неверное регулярное выражение", "недопустимое значение" могут ускользнуть. Предположим, например, что error_reporting выставлен не на максимум, а, на E_ERROR.
Скрипт выполняет функцию do_math, но не сообщает об ошибке "деление на ноль", которая, однако, имела место (при $i=$j=0 вывода результата просто не было).
<?php
error_reporting(E_ERROR);
mt_srand ((double)microtime() * 1000000);
function do_math ($a, $b) {
return (($a - $b) * 2) / mt_rand();
}
for ($i = 5, $j = -5; $i > -5; $i--, $j++){
print $j / do_math ($i, $j) . "\n";
}
?>
PHP выдаёт сообщения об ошибках непосредственно в браузер и не позволяет подавить их. Однако в PHP имеется возможность перехвата таких сообщений с помощью функции set_error_handler(). В следующем примере set_error_handler() назначает обработчиком по умолчанию функцию error_handler(). В случае возникновения ошибки вызывается error_handler(), и встроенная функция error_log() регистрирует сбой в файле error_file. Если происходит ошибка класса E_ERROR, работа скрипта прекращается и выводится сообщение об ошибке.
<?php
// Индивидуальный обработчик ошибок, определён функцией
// set_error_handler()
function error_handler ($type, $message, $file = __FILE__, $line = __LINE__) {
error_log("$message, $file, $line", 3, 'error_file');
if ($type & E_ERROR) {
print 'Произошла ошибка, зарегистирована.';
exit;
}
}
set_error_handler('error_handler');
?>
Конструкции включений в PHP.
Cкрипт PHP можно собрать из нескольких отдельных файлов, html-страниц и php-скриптов, используя конструкции require и include. Конструкция require позволяет включать файлы в сценарий PHP до исполнения сценария, конструкция include позволяет включать файлы в код PHP - скрипта и во время выполнения сценария. Общий синтаксис require: require имя_файла; При запуске программы интерпретатор заменит require на содержимое файла, например:
<?php // script.php
require "header.htm";
require "footer.htm";
?>
Конструкции require и include позволяют собирать сценарии PHP также из нескольких отдельных удаленных файлов.
Поясним разницу между require и include. При выполнении включения PHP анализирует строки сценария, пока не доходит до конструкции include. Дойдя до include, PHP переключается на указанный в include файл, что может снизить быстродействие. С require таких проблем нет, поскольку файлы включаются до выполнения сценария.
В сценариях бывает сложно контролировать включение в скрипт одного и того же файла несколько раз. Используя конструкции однократного включения require_once и include_once, можно быть в этом уверенным.
Файлы
Файлы могут быть текстовыми, содержащими символьные строки и бинарными, представляющими последовательность байт. При работе с файлами осуществляются три действия: 1) открытие файла для чтения или записи, 2) чтения или записи, 3) закрытие файла.
Функция открытия файла: fopen ($filename, $mode [, use_include_path]).
Функция открывает файл и возвращает его дескриптор (номер) или false. Режим открытия mode, может принимать следующие значения:
Бинарный файл ”b”, текстовой “t” или значение по умолчанию.
"r" - файл открывается только для чтения. "r+" - открывается на чтение и на запись. Текущий указатель файла устанавливается в его начало.
"w" - Файл открывается для перезаписи. Указатель файла устанавливается в его начало. Всё старое содержимое файла теряется, счётчик длины файла устанавливается равным 0. Если файл с указанным именем не существует, функция пытается его создать.
"w+" - Файл открывается на чтение и на запись. Указатель файла устанавливается в его начало. Всё старое содержимое файла теряется.
"a" - Файл открывается на добавление (запись). Указатель файла помещается в конец файла. Если файл с указанным именем не существует, функция пытается его создать. "a+" - Файл открывается на чтение и на запись. Вот несколько примеров открытия файлов:
$fp = fopen ("/home/a/bases.dat", "br");
$fp = fopen ("/home_dir/client/count.txt", "w+");
$fp = fopen ("http://www.yahoo.com/pp.txt", "r");
В случае успеха функция fopen() возвращает ссылку на открытый файл, а в случае ошибки - булевское значение false. В РНР имеется возможность удаленного открытия файлов путем указания URL-адреса в качестве параметра $filename функции fopen (). Осуществлять запись в такие файлы, нельзя, но можно их читать.
URL, содержащие недопустимые символы например, пробельные символы в имени файла, необходимо кодировать перед их использованием. Функция urlencode () принимает параметр URL, подлежащий кодированию и возвращает закодированный URL. Пример:
<?php
/* Открыть файл для чтения */
$fr = fopen("myfile.txt", 'r');
/* Открыть бинарный файл для чтения/добавления */
$fr = fopen("myfile.dat", 'ba+');
/* Открыть файл для чтения/записи (искать файл в пути,
заданном директивой include_path)*/
$fr = fopen("code.php", 'w+', true);
/* Открыть файл index.php, для чтения по протоколу HTTP */
$fr = fopen("http://www.php.net/index.php", 'r');
/* Открыть файл index.php, для чтения по протоколу FTP */
$fr = fopen("ftp://ftp.php.net/index.php", 'r');
/*Закодировать URL, затем открыть для чтения по протоколу HTTP */
$url = "http://www.php.net/this is my invalid URL.php";
$url = urlencode($url);
$fr = fopen($url, 'r');
?>
Закрытие файла осуществляется функцией: bool fclose ($fp).
Для работы с текстовыми файлами используются функции fgets (), которая извлекает строку, и fputs (), которая записывает строку в файл. Функция считывания fgets( $fp, $length) возвращает строку длиной до length-1 байт, и завершается после загрузки length-1 символов, либо после обнаружения символа конца строки, либо при обнаружении признака конца файла. Пример построчного вывода на экран содержимого файла:
<? //pr415
$fp = fopen ("pr415.php", "r");
while (!feof ($fp)) {
$stroka = fgets ($fp, 80);
echo $stroka."<BR>";
}
fclose($fp);
?>
Загрузка строки с пропуском HTML-тегов выполняется функцией: fgetss ($fp, $length [, string allowable_tags]). При вводе из считанной строки удаляются все HTML-теги, которые в ней присутствуют. Есть возможность использовать необязательный третий аргумент, для указания разрешенных тегов, которые удалены не будут.
Альтернативой fgets () является функция fscanf (). Синтаксис:
fscanf ($filename, $format , $var_one [, $var_two ...]]])
где $filename — входной поток, $format задает шаблон для чтения, а $var_one, $var_two представляют собой переменные списка ввода, передаваемые по ссылке. В случае успешного завершения ввода fscanf () возвращает количество разобранных элементов, а случае ошибки возвращает false. Допустимые символы форматирования функции fscanf ():
%b-Двоичное число. %с-Одиночный символ. %d-Десятичное число со знаком. %u-Десятичное число без знака. %f- Число с плавающей запятой. %о-Восьмеричное число. %s-Строка. %x-Шестнадцатеричное число.
Функция fputs () служит для записи строки (или любых других данных) в указанный поток и имеет следующий синтаксис: fputs($filename, $data [, int $length]), где $filename выходной поток, $data содержит записываемые данные, а необязательный параметр $length задает размер фактически записываемых данных.