Введение в PHP. Основы клиент-серверного взаимодействия

Содержание

Слайд 2

РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА «PHP5. Полное руководство» Джон Коггзолл. Диалектика. 2006 г. «Разработка

РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА

«PHP5. Полное руководство» Джон Коггзолл. Диалектика. 2006 г.
«Разработка

Web-приложений с помощью PHP и MySQL» Люк Веллинг, Лаура Томсон. Вильямс. 2007 г.
«AJAX и PHP. Разработка динамических веб-приложений» Кристиан Дари, Богдан Бринзаре, Филип Черчез-Тоза, Михай Бусика. Символ-Плюс. 2006 г.
«PHP, MySQL, XML. Программирование для Интернета» Елена Бенкен. БХВ-Петербург. 2007 г.
«Профессиональное программирование на PHP» Джордж Шлосснейгл. Вильямс. 2006 г.
Слайд 3

ПОЧЕМУ ИМЕННО ЯЗЫК PHP? PHP – наиболее простой скриптовый язык программирования,

ПОЧЕМУ ИМЕННО ЯЗЫК PHP?

PHP
– наиболее простой скриптовый язык программирования, широко

применяющийся при создании динамически генерируемых веб-страниц.

Простота
Скорость разработки
Наличие библиотек
Поддержка
Безопасность

Слайд 4

ВОЗМОЖНОСТИ ЯЗЫКА PHP написание скриптов, работающих на стороне сервера доступ для

ВОЗМОЖНОСТИ ЯЗЫКА PHP

написание скриптов, работающих на стороне сервера
доступ для большинства операционных

систем
поддержка большинства современных веб-серверов
формирование изображений, файлов PDF, роликов Flash
генерирование любых текстовых данных
применение совместно с использованием баз данных
Слайд 5

ВВЕДЕНИЕ В PHP БАЗОВЫЙ СИНТАКСИС PHP — это рекурсивный акроним аббревиатуры

ВВЕДЕНИЕ В PHP БАЗОВЫЙ СИНТАКСИС

PHP — это рекурсивный акроним аббревиатуры PHP Hypertext

Preprocessor. Команды на языке PHP обрамляются специальными дескрипторами — тэгами языка PHP. Все, что находится вне этих тегов, игнорируется интерпретатором. Поддерживаются следующие стили написания тэгов:

XML-стиль (рекомендуемый);
HTML-стиль;
Краткий стиль;
ASP-стиль. <% код на PHP %>

Слайд 6

БАЗОВЫЙ СИНТАКСИС Существует ряд требований, которые необходимо соблюдать при программировании на

БАЗОВЫЙ СИНТАКСИС

Существует ряд требований, которые необходимо соблюдать при программировании на PHP:

Каждая команда заканчивается точкой с запятой (;);
Одну команду можно записывать в несколько строк или несколько команд в одну строку;
PHP чувствителен к регистру символов в именах переменных и функций;
Слайд 7

ВВЕДЕНИЕ В PHP БАЗОВЫЙ СИНТАКСИС PHP нечувствителен в отношении ключевых слов,

ВВЕДЕНИЕ В PHP БАЗОВЫЙ СИНТАКСИС

PHP нечувствителен в отношении ключевых слов, к

пробелам, переводам строки, знакам табуляции.
Этот код полностью корректен: $index = 10; $index = 10 + 20; $index = 10+10; $index = 10 + 10; ?>
Слайд 8

ВВЕДЕНИЕ В PHP КОММЕНТАРИИ PHP поддерживает три вида комментариев: один многострочный

ВВЕДЕНИЕ В PHP КОММЕНТАРИИ

PHP поддерживает три вида комментариев: один многострочный и два

однострочных. PHP-парсер никак не анализирует комментарии, они просто игнорируются.

/*
Первый вид
комментария
*/
// Второй
# Третий
?>

Слайд 9

ВВЕДЕНИЕ В PHP ПЕРЕМЕННЫЕ Все имена переменных должны начинаться со знака

ВВЕДЕНИЕ В PHP ПЕРЕМЕННЫЕ

Все имена переменных должны начинаться со знака доллара

($);
Объявления не являются обязательными. Переменная начинает существовать с момента присвоения ей значения или с момента первого использования. Если использование начинается раньше присвоения, то переменная будет содержать значение по умолчанию;
Переменной не назначается определенный тип. Тип определяется хранящимся значением и текущей операцией.
Слайд 10

ВВЕДЕНИЕ В PHP ПЕРЕМЕННЫЕ Первым символом после $ должна быть буква

ВВЕДЕНИЕ В PHP ПЕРЕМЕННЫЕ

Первым символом после $ должна быть буква или символ

подчеркивания. Далее в имени переменной могут присутствовать буквы, цифры и символ подчеркивания.
$I; // Допустимо
$1; // Недопустимо
$_1 ; // Допустимо
$firstName; // Допустимо
$7Lucky; // Недопустимо
$~password; // Недопустимо
$Last!Visit; // Недопустимо
$Compute-Mean ; // Недопустимо
?>
Слайд 11

ПЕРЕМЕННЫЕ. ПРИМЕР $foo = 'Bob';// Присваивает $foo значение 'Bob' $foo =

ПЕРЕМЕННЫЕ. ПРИМЕР

$foo = 'Bob';// Присваивает $foo значение 'Bob'
$foo = "My name

is Mike";// Изменение $foo
$bar = 25; // Присваивает $bar значение 25
$bar = 2 + 2; // Присваивает $bar 4
$tmp = $foo; // Присваивает $tmp значение $foo
$tmp = &$foo; // Ссылка на $foo через $tmp
$foo = "John"; // Изменение $foo
echo $tmp; // Выведет на экран "John"
$foo = "Mike"; // Изменяем значение $foo
unset($foo); // Удаляем переменную $foo
echo $tmp; // Выведет на экран "Mike"
?>
Слайд 12

Вывод текста на экран. Оператор echo. Когда нужно отобразить текст на

Вывод текста на экран. Оператор echo.
Когда нужно отобразить текст на веб-странице,

то оператор echo является наиболее употребляемым оператором в PHP. Как его иcпользовать - после слова echo нужно поместить строку текста в кавычки:
echo 'Привет от PHP';
?>
Отображение в браузере:
Привет от PHP
(для отображения текста можно использовать как двойные кавычки, так и одинарные).
Для чисел кавычки можно не использовать:
echo 2014;
?>
Слайд 13

ПРЕДОПРЕДЕЛЕННЫЕ ПЕРЕМЕННЫЕ $GLOBALS — Массив, содержащий все глобальные переменные. $_ENV —

ПРЕДОПРЕДЕЛЕННЫЕ ПЕРЕМЕННЫЕ

$GLOBALS — Массив, содержащий все глобальные переменные.
$_ENV — Массив переменных окружения.
$_COOKIE —

Массив файлов cookie, отправленных на сервер.
$_GET — Массив переменных, отправленных методом GET.
$_POST — Массив переменных, отправленных методом POST.
$_FILES — Массив, содержащий информацию о загруженных файлах.
$_REQUEST — Массив, содержащий $_GET,$_POST,$_FILES,$_COOKIE.
$_SESSION — Массив переменных, размещенных в сессиях PHP.
$_SERVER — Массив, содержащий информацию о сервере.
Слайд 14

ТИПЫ ДАННЫХ PHP поддерживает восемь типов данных. Четыре скалярных типа: boolean

ТИПЫ ДАННЫХ

PHP поддерживает восемь типов данных.
Четыре скалярных типа:
boolean — логический;

integer — целое число;
float (double) — число с плавающей точкой;
string — строка. Два смешанных типа:
array — массив;
object — экземпляр класса. Два специальных типа:
resource — ссылка на внешний по отношению к скрипту источник данных (файл на диске, изображение в памяти и т.п.);
NULL — отсутствие какого либо значения.
Слайд 15

ТИПЫ ДАННЫХ. ПРИМЕР $foo = TRUE; // Логический $int = 1234;

ТИПЫ ДАННЫХ. ПРИМЕР

$foo = TRUE; // Логический
$int = 1234; // Целое число
$flt =

1.234; // Число с плавающей точкой
// Это простая строка
echo "Это простая строка";
// Это вставит: новую строку
echo "Это вставит: \n новую строку";
// Переменная ОК вставилась в текст
$a = "ОК"; echo "Переменная $a вставилась в текст";
// Это простая строка
echo 'Это простая строка';
// Он сказал "I'll be back"
echo 'Он сказал: "I\'ll be back"';
// Это не вставит: \n новую строку
echo 'Это не вставит: \n новую строку';
//Переменная $a не подставляется
$a = "ОК"; echo 'Переменная $a не подставляется';
?>
Слайд 16

ТИПЫ ДАННЫХ. ПОЛЕЗНЫЕ ФУНКЦИИ isset (имя_переменной) - сообщает, существует ли переменная.

ТИПЫ ДАННЫХ. ПОЛЕЗНЫЕ ФУНКЦИИ

isset (имя_переменной) - сообщает, существует ли переменная.
unset (имя_переменной) - уничтожает указанную

переменную
empty (имя_переменной) - сообщает, присвоено ли переменной какое-либо значение.
gettype(имя_переменной) - возвращает тип указаной переменной
settype(имя_переменной, тип) - конвертирует переменную в другой тип.
is_bool(имя_переменной) - проверяет является ли тип переменной логическим.
Функции is_numeric(), is_float(), is_int(), is_string(), is_object(), is_array() работают по аналогии.
Слайд 17

КОНСТАНТЫ Для задания значений, которые не будут меняться в ходе выполнения

КОНСТАНТЫ

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

можно использовать константы. Так же как и переменные, константы могут быть определены и доступны в любом месте сценария, но у них есть и ряд особенностей:
У констант нет префикса в виде знака доллара;
Константам нельзя присваивать значения, их можно определить вызовом функции define();
Константы не могут быть определены или аннулированы после первоначального объявления.
Слайд 18

КОНСТАНТЫ. ПРИМЕР define ('PI', 3.14); $index = 10 * PI; //

КОНСТАНТЫ. ПРИМЕР

define ('PI', 3.14); $index = 10 * PI; // Верно PI = 10

* 3.14; // Ошибка!
define("CONSTANT", "Здравствуй, мир."); echo CONSTANT; // Выведет "Здравствуй, мир." echo Constant; // Выведет "Constant" и предупреждение
?>
Слайд 19

ПРЕДОПРЕДЕЛЕННЫЕ КОНСТАНТЫ _ _LINE_ _ - Номер текущей строки. _ _FILE_

ПРЕДОПРЕДЕЛЕННЫЕ КОНСТАНТЫ

_ _LINE_ _ - Номер текущей строки.
_ _FILE_ _ -

Полный путь и имя текущего файла.
_ _FUNCTION_ _ - Имя текущей функции.
_ _CLASS_ _ - Имя текущего класса.
PHP_EXTENSION_DIR - Каталог расширений PHP
PHP_OS - Операционная система
PHP_VERSION - Версия PHP
PHP_CONFIG_FILE_PATH - Каталог размещения php.ini
Слайд 20

ОПЕРАТОРЫ Операторы бывают трех видов: 1. унарные, те, которые работают только

ОПЕРАТОРЫ

Операторы бывают трех видов:
1. унарные, те, которые работают только с одним аргументом.
2. бинарные

— с двумя.
3. тернарный оператор ?:.
Слайд 21

АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ -$a // Смена знака $a + $b // Сумма

АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ

-$a // Смена знака
$a + $b // Сумма
$a - $b

// Разность
$a * $b // Произведение
$a / $b // Частное
$a % $b // Остаток от деления
$a += $b // Аналогично $a = $a + $b
$a -= $b // Аналогично $a = $a - $b
$a *= $b // Аналогично $a = $a * $b
$a /= $b // Аналогично $a = $a / $b
$a %= $b // Аналогично $a = $a % $b
Слайд 22

ОПЕРАЦИИ СРАВНЕНИЯ $a == $b // TRUE если $a равно $b.

ОПЕРАЦИИ СРАВНЕНИЯ

$a == $b // TRUE если $a равно $b.
$a === $b //

TRUE если $a равно $b И имеет тот же тип
$a != $b // TRUE если $a не равно $b.
$a !== $b // TRUE если $a не равно $b ИЛИ у них разные типы.
$a < $b // TRUE если $a строго меньше $b.
$a > $b // TRUE если $a строго больше $b.
$a <= $b // TRUE если $a меньше или равно $b.
$a >= $b // TRUE если $a больше или равно $b.
Слайд 23

ЛОГИЧЕСКИЕ ОПЕРАЦИИ $a and $b // TRUE если и $a, и

ЛОГИЧЕСКИЕ ОПЕРАЦИИ

$a and $b // TRUE если и $a, и $b TRUE.
$a

or $b // TRUE если или $a, или $b TRUE.
$a xor $b // TRUE если $a, или $b TRUE, но не оба.
!$a // TRUE если $a не TRUE.
$a && $b // TRUE если и $a, и $b TRUE.
$a || $b // TRUE если или $a, или $b TRUE.
Слайд 24

ПОБИТОВЫЕ ОПЕРАЦИИ $a & $b // Побитовое И $a | $b

ПОБИТОВЫЕ ОПЕРАЦИИ

$a & $b // Побитовое И
$a | $b // Побитовое ИЛИ
$a

^ $b // Исключающее или
~ $a // Отрицание
$a << $b // Побитовый сдвиг влево
$a >> $b // Побитовый сдвиг вправо
Слайд 25

СПЕЦИФИЧНЫЕ ОПЕРАЦИИ Конкатенация $a = "Hello "; $b = $a .

СПЕЦИФИЧНЫЕ ОПЕРАЦИИ

Конкатенация
$a = "Hello ";
$b = $a . "World!"; // $b

содержит строку "Hello World!"
$a .= "World!"; // $a содержит строку "Hello World!"
Подавление ошибки
@$a = 1 / 0; // Ошибка не будет сгенерирована
Слайд 26

ИНКРЕМЕНТ / ДЕКРЕМЕНТ ++$a // Увеличивает $a на единицу и возвращает

ИНКРЕМЕНТ / ДЕКРЕМЕНТ

++$a // Увеличивает $a на единицу и возвращает значение

$a $a++ // Возвращает значение $a, а затем увеличивает $a на единицу --$a // Уменьшает $a на единицу и возвращает значение $a $a-- // Возвращает значение $a, а затем уменьшает $a на единицу
$a = 5; echo "Должно быть 5: " . $a++ . "
"; echo "Должно быть 6: " . $a . "
"; $a = 5; echo "Должно быть 6: " . ++$a . "
"; echo "Должно быть 6: " . $a . "
";
?>
Слайд 27

ТЕРНАРНАЯ ОПЕРАЦИЯ По сути является аналогом условной конструкции if...else Она записывается

ТЕРНАРНАЯ ОПЕРАЦИЯ

По сути является аналогом условной конструкции if...else
Она записывается следующим образом:
условие

? значение, если условие истинно : значение, если ложно
$grade = 3;
$result = ($grade > 2 ? 'Сдал' : 'Не сдал');
echo $result;
?>
Слайд 28

ДЕМОНСТРАЦИЯ Использование echo и print; Использование переменных и констант; Использование специальных

ДЕМОНСТРАЦИЯ

Использование echo и print;
Использование переменных и констант;
Использование специальных

функций;
Использование арифметических операторов;
Использование операторов сравнения;
Использование логических операторов.
Слайд 29

ПРАКТИЧЕСКАЯ РАБОТА 1. Создайте файл 1-1.php, содержащий 5 разных переменных, присвойте

ПРАКТИЧЕСКАЯ РАБОТА

1. Создайте файл 1-1.php, содержащий 5 разных переменных, присвойте переменным

значения разного типа. Используя gettype() выведите тип каждой переменной.
2. Создайте файл 1-2.php, содержащий 2 переменные числового типа. Произведите над переменными произвольное арифметическое действие и выведите его результат.
3. Создайте файл 1-3.php, содержащий 2 переменные строкового типа. Инициализируйте переменные произвольным текстом. С помощью конкатенации объедините содержимое переменных и выведите результат.
4. Создайте файл 1-4.php, содержащий 2 переменные с одинаковым типом значений. Используя тернарный оператор сравнения проведите исследование на возвращаемые результаты.
Слайд 30

УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ Конструкция if Указынные дейтвия выполняются тогда и только тогда,

УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ

Конструкция if
Указынные дейтвия выполняются тогда и только тогда, когда условие

истинно.
if(условие){ if($index > 0) { Действие; echo 'Index > 0';
} }
Конструкция if...else
Если условие истинно, выполнятся действия из блока if, в противном случае — из блока else.
if(условие){ if($index > 0){
Действие; echo 'Да';
}else{ }else{
Действие; echo 'Нет';
} }
Слайд 31

УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ Конструкция elseif Если условие блока if истинно, выполнятся действия

УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ

Конструкция elseif
Если условие блока if истинно, выполнятся действия блока if.

В противном случае, если условие блока elseif истинно, выполнятся действия блока elseif. Во всех остальных случаях выполнятсе действия из блока else.
if(условие){ if($numb < 5){
Действие; $discount = 0;
}elseif(условие){ elseif($numb >= 5 && $numb <= 10)
Действие; $discount = 5;
}else{ else{
Действие; $discount = 10;
} }
Слайд 32

УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ Конструкция switch Если значение переменной соответствует значению одного из

УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ

Конструкция switch
Если значение переменной соответствует значению одного из блоков case,

выполнятся действия из этого блока. В противном случае - из блока default.
switch(Переменная){
case Значение 1:
Действие 1;
[break;]
case Значение 2:
Действие 2;
[break;]
[default: Действие;]
}

switch($day){
case 1:
echo 'Понедельник'; break;
case 2:
echo 'Вторник'; break;
case 3:
echo 'Среда'; break;
case 4:
echo 'Четверг'; break;
case 5:
echo 'Тяпницо'; break;
case 6:
echo 'Суббота'; break;
case 7:
echo 'Воскресенье'; break;
default:
echo 'Нет такого дня';
}

Слайд 33

ЦИКЛЫ Циклы предназначены для многократного исполнения набора инструкций. Цикл for В

ЦИКЛЫ

Циклы предназначены для многократного исполнения набора инструкций.
Цикл for
В цикле for указывается

начальное и конечное значения счетчика, а так же шаг, с которым счетчик будет изменяться. Изменяться счетчик может как в положительную, так и отрицательную сторону. Действия выполнятся столько раз, сколько итераций пройдет от начального значения счетчика до достижения конечного, с указынным шагом.
for(начало;конец;шаг){ for ($i = 1; $i <= 5; $i++) {
Действие; $sum += $i;
... echo $sum;
} }
Слайд 34

ЦИКЛЫ Цикл while Действия будут выполняться до тех пор, пока условие

ЦИКЛЫ

Цикл while
Действия будут выполняться до тех пор, пока условие истинно.
Цикл while

является циклом с предусловием.
while (условие) { while ($state == 'Солнце высоко') {
Действие; echo 'Рабочий день продолжается';
... $state = 'Солнце заходит';
} }
Цикл do...while
Цикл do...while является циклом с постусловием. Это значит, что сначала будет выполняться действие, а потом проверяться условие.
Таким образом действие всегда выполнится минимум один раз.
do{ do{
Действие; echo 'Пиф-паф';
... } while ($state == 'Живой');
} while (условие);
Слайд 35

УПРАВЛЕНИЕ ЦИКЛАМИ $index = 1; while ($index "; $index++; if ($index

УПРАВЛЕНИЕ ЦИКЛАМИ

$index = 1; while ($index < 10){ echo "$index
"; $index++; if ($index ==

5) break;
}
$index = 0;
while ($index < 10){ $index++; if ($index == 5) continue; echo "$index
";
}

Break прерывает работу цикла. Интерпретатор перейдет к выполнению инструкций, следующих за циклом.
Continue прерывает выполнение текущей итерации цикла. Цикл продолжит выполняться со следующей итерации.

Слайд 36

МАССИВЫ Массив — это структура, в которой хранится упорядоченный набор данных.

МАССИВЫ

Массив — это структура, в которой хранится упорядоченный набор данных. Эти

данные называются элементами массива. Каждый элемент массива имеет свой уникальный индекс.
В PHP массив можно создать следующими способами:
$zoo[0] = 'слон';
$zoo[6] = 'крокодил';
$zoo[4] = 'жираф';
$zoo[] = 'осел'; // Индекс равен 7
// или
$zoo = array ('лев', 'медвед', 'обезьяна');
echo count ($zoo); // Количество элементов массива
?>
Слайд 37

АССОЦИАТИВНЫЕ МАССИВЫ В ассоциативных массивах используется не числовой, а строковый индекс.

АССОЦИАТИВНЫЕ МАССИВЫ

В ассоциативных массивах используется не числовой, а строковый индекс.
$pets['dog'] =

'Бульдог';
$pets['cat'] = 'Шиншилла';
$pets['fish'] = 'Золотая';
// или
$pets = array ('lizard' => 'Игуана',
'spider' => 'Черная вдова',
'parrot' => 'Ара');
print_r ($pets); // Печать массива
?>
Слайд 38

МНОГОМЕРНЫЕ МАССИВЫ Массив называется многомерным тогда, когда в качестве его элементов

МНОГОМЕРНЫЕ МАССИВЫ

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

не только скалярные величины, но и сами массивы.
$users = array (
0 => array ( 'login' => 'admin',
'password' => 'hskdfuegefdjfdg'
),
1 => array ( 'login' => 'telo',
'password' => 'ppqmcnvkfghye'
)
);
echo $users[0]['login']; // admin
?>
Слайд 39

ЦИКЛ FOREACH Очень удобен при работе с массивами. Указанные действия выполняются

ЦИКЛ FOREACH

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

каждого элемента массива $array, при этом $key — номер элемента массива $array, $value — значение этого элемента.
foreach ($array as [ $key => ] $value){
Действия;
...
}

$pets[] = 'Собака';
$pets[] = 'Кошак';
$pets[] = 'Рыбка';
foreach ($pets as $index => $value) {
echo "Элемент №$index имеет значение: \"$value\"
";
}
?>

Слайд 40

ВВЕДЕНИЕ В PHP. ДЕМОНСТРАЦИЯ Использование if, else, elseif; Использование switch; Использование

ВВЕДЕНИЕ В PHP. ДЕМОНСТРАЦИЯ

Использование if, else, elseif;
Использование switch;
Использование

for, while, do...while;
Использование массива;
Использование ассоциативного массива;
Использование цикла foreach.
Слайд 41

ПРАКТИЧЕСКАЯ РАБОТА 1. Используя условный переход, выведите сообщение «Счастливчик!» если $age

ПРАКТИЧЕСКАЯ РАБОТА

1. Используя условный переход, выведите сообщение «Счастливчик!» если $age попадает

в диапазон между 18 и 35. Если значение иное, выведите «Не повезло». Расширьте предыдущую конструкцию сообщением «Слишком молод», если $age в диапазоне между 1 и 17.
2. Используя циклы, сформируйте массив четных чисел из диапазона от 1 до 100. Выводя массив на экран, исключите из вывода все числа, которые не делятся на 5.
3. Создайте массив со следующими элементами: Name, Address, Phone, Mail и заполните его. С помощью цикла foreach осуществите форматированный вывод массива в виде: «элемент: значение».
Слайд 42

Основы клиент-серверного взаимодействия

Основы клиент-серверного взаимодействия

Слайд 43

ПРОТОКОЛ HTTP HTTP (HyperText Transfer Protocol, протокол передачи гипертекста) — протокол

ПРОТОКОЛ HTTP

HTTP (HyperText Transfer Protocol, протокол передачи гипертекста) — протокол прикладного

уровня для передачи данных в первую очередь в виде текстовых сообщений. Основой протокола HTTP является технология «клиент-сервер», то есть предполагается существование потребителей (клиентов), которые инициируют соединение и посылают запрос, и поставщиков (серверов), которые ожидают соединения для получения запроса, производят необходимые действия и возвращают обратно сообщение с результатом.
Слайд 44

ЗАПРОС КЛИЕНТА Клиент инициирует взаимодействие с сервером и посылает запрос, содержащий:

ЗАПРОС КЛИЕНТА

Клиент инициирует взаимодействие с сервером и посылает запрос, содержащий:
метод

доступа;
адрес URI (Uniform Resource Identifier, универсальный идентификатор ресурса);
версию протокола;
сообщение с информацией о типе передаваемых данных, информацией о клиенте, пославшем запрос, и, возможно, с содержательной частью (телом) сообщения.
Слайд 45

ОТВЕТ СЕРВЕРА Ответ сервера содержит: строку состояния, в которую входит версия

ОТВЕТ СЕРВЕРА

Ответ сервера содержит:
строку состояния, в которую входит версия протокола

и код возврата (успех или ошибка);
сообщение, в которое входит информация сервера, метаинформация (т.е. информация о содержании сообщения) и его тело.
Слайд 46

ПРИМЕР GET / HTTP/1.1 ⮱ Host: www.rosnou.ru ⮱ Accept: */* ⮱

ПРИМЕР

GET / HTTP/1.1 ⮱
Host: www.rosnou.ru ⮱
Accept: */* ⮱
Referrer: http://www.google.ru/search? aq=f&complete=1&hl=ru&newwindow=1&q=%D0%A0%D0%BE%D1%81%D0%9D%D0%9E%D0%A3&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=


User-Agent: Mozilla 4.0 (compatible; MSIE 6.1,…) ⮱

HTTP/1.1 200 OK ⮱
Date: Sun, 06 Jan 2008 11:19:28 GMT ⮱
Server: Apache/2.2.4 ⮱
Pragma: no-cache ⮱
Content-Length: 23341 ⮱
Content-Type: text/html; charset=windows-1251 ⮱

. . .

Слайд 47

ПЕРЕДАЧА ФОРМ Отправка формы Логин: Пароль:

ПЕРЕДАЧА ФОРМ



Отправка формы



Логин:


Пароль:




Слайд 48

ОБРАБОТКА ФОРМ if(isset($_POST['login']) && $_POST['login'] != '' && isset($_POST['pass']) && $_POST['pass']

ОБРАБОТКА ФОРМ

if(isset($_POST['login']) && $_POST['login'] != '' && isset($_POST['pass']) && $_POST['pass'] != ''){
echo

'Привет ' . $_POST['login'] . '!';
echo 'Твой пароль: ' . $_POST['pass'] . '
';
}else{
echo 'Некорректное имя и пароль!
';
}
?>

После отправки данные попадают в глобальные массивы, имена которых соответствуют названию метода отправки.
$_POST — если данные переданы методом POST;
$_GET — если данные переданы методом GET;
$_REQUEST — если данные были переданы любым из них.

Слайд 49

МЕТОДЫ OPTIONS - Возвращает методы HTTP, которые поддерживаются сервером. GET -

МЕТОДЫ

OPTIONS - Возвращает методы HTTP, которые поддерживаются сервером.
GET - Запрашивает содержимое

указанного ресурса.
HEAD - Аналогичен методу GET, но в ответе отсутствует тело.
POST - Передаёт пользовательские данные заданному ресурсу.
PUT - Загружает указанный ресурс на сервер.
DELETE - Удаляет указанный ресурс.
TRACE - Возвращает полученный запрос так, что клиент может увидеть, что промежуточные сервера добавляют или изменяют в запросе.
CONNECT - Для использования вместе с прокси-серверами, которые могут динамически переключаться в туннельный режим SSL.
Слайд 50

МЕТОД GET GET /somepage.php?login=vasya&password=superpass HTTP/1.1 ⮱ Host: www.rosnou.ru ⮱ Accept: */*

МЕТОД GET

GET /somepage.php?login=vasya&password=superpass HTTP/1.1 ⮱
Host: www.rosnou.ru ⮱
Accept: */* ⮱
Referrer: http://www.google.ru/search? aq=f&complete=1&hl=ru&newwindow=1&q=%D0%A0%D0%BE%D1%81%D0%9D%D0%9E%D0%A3&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=


User-Agent: Mozilla 4.0 (compatible; MSIE 6.1,…) ⮱

HTTP/1.1 200 OK ⮱
Date: Sun, 06 Jan 2008 11:19:28 GMT ⮱
Server: Apache/2.2.4 ⮱
Pragma: no-cache ⮱
Content-Length: 23341 ⮱
Content-Type: text/html; charset=windows-1251 ⮱

Слайд 51

МЕТОД POST POST /somepage.php HTTP/1.1 ⮱ Host: www.rosnou.ru ⮱ Accept: */*

МЕТОД POST

POST /somepage.php HTTP/1.1 ⮱
Host: www.rosnou.ru ⮱
Accept: */* ⮱
Referrer: http://www.google.ru/search? aq=f&complete=1&hl=ru&newwindow=1&q=%D0%A0%D0%BE%D1%81%D0%9D%D0%9E%D0%A3&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=


User-Agent: Mozilla 4.0 (compatible; MSIE 6.1,…) ⮱

login=vasya&password=superpass ⮱

HTTP/1.1 200 OK ⮱
Date: Sun, 06 Jan 2008 11:19:28 GMT ⮱
Server: Apache/2.2.4 ⮱
Pragma: no-cache ⮱
Content-Length: 23341 ⮱
Content-Type: text/html; charset=windows-1251 ⮱

Слайд 52

ОСНОВНЫЕ ЗАГОЛОВКИ Accept. Данный заголовок предназначен для информирования сервера о типах

ОСНОВНЫЕ ЗАГОЛОВКИ

Accept. Данный заголовок предназначен для информирования сервера о типах данных,

поддерживаемых браузером. Перечисление идет через запятую. Используется переменная окружения HTTP_ACCEPT.
Content-type. Этот заголовок предназначен для идентификации типа передаваемых данных. Наименования типов данных указывается в формате стандарта MIME. Это тот самый формат передачи, который используется методами GET и POST. Сервер никак не интерпретирует рассматриваемый заголовок, а просто передает его сценарию через переменную окружения. Переменная окружения CONTENT_TYPE.
Content-length. Этот заголовок содержит длину передаваемых данных в байтах при использовании метода передачи POST.
Переменная окружения CONTENT_LENGTH.
Слайд 53

ОСНОВНЫЕ ЗАГОЛОВКИ Cookie. В этом заголовке хранятся все Cookies. Для установки

ОСНОВНЫЕ ЗАГОЛОВКИ

Cookie. В этом заголовке хранятся все Cookies. Для установки

Cookies используется заголовок Set-Cookie. Переменная окружения HTTP_COOKIE.
Location. Получив этот заголовок вместе с указанным в нем URL, браузер немедленно переходит по указанному URL.
Pragma. Данный заголовок используется для различных целей, одна из которых - это запрет кэширования документа.
Server. Данный заголовок содержит название и версию программного обеспечения сервера.
Referer. Содержит URL страницы, откуда клиент пришел на нашу.
Переменная окружения: HTTP_REFERER.
User-Agent. Содержит версию браузера. Переменная: HTTP_USER_AGENT.
Слайд 54

СТАНДАРТ MIME MIME (Multipurpose Internet Mail Extensions) — многоцелевые расширения почтового

СТАНДАРТ MIME

MIME (Multipurpose Internet Mail Extensions) — многоцелевые расширения почтового стандарта

Интернета. Изначально MIME был создан для указания, какого типа документ вложен в сообщение электронной почты.
MIME-тип задается в виде «тип/подтип». Например: text/html
Стандарт MIME определяет семь типов данных:
application;
audio;
image;
message;
multipart;
text
video;
Слайд 55

КОДЫ СОСТОЯНИЙ В настоящее время выделено пять классов кодов состояния: 1xx:

КОДЫ СОСТОЯНИЙ

В настоящее время выделено пять классов кодов состояния:
1xx: Информационный

— запрос получен, продолжается обработка.
2xx: Успешно — действие было успешно получено, понято и обработано.
3xx: Перенаправление — для выполнения запроса должны быть предприняты дальнейшие действия.
4xx: Ошибка клиента — запрос имеет плохой синтаксис или не может быть выполнен.
5xx: Ошибка сервера — сервер не в состоянии выполнить допустимый запрос.
Слайд 56

ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ Для связи между web-сервером и приложением используется стандарт CGI

ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ

Для связи между web-сервером и приложением используется стандарт CGI (Common

Gateway Interface, общий интерфейс шлюза). Эта связь обеспечивается пременными окружения web-сервера, к которым, при необходимости, приложение обращается для получения данных.

REMOTE_ADDR - IP-адрес хоста, отправляющего запрос
REMOTE_HOST - Имя хоста, с которого отправлен запрос
REQUEST_METHOD - Метод, который был использован при отправке запроса
QUERY_STRING - Информация, находящаяся в URL после знака вопроса
SCRIPT_NAME - Виртуальный путь к программе, которая должна выполняться

Слайд 57

РАБОТА С ПРОТОКОЛОМ HTTP COOKIES Cookie — это фрагмент информации, который

РАБОТА С ПРОТОКОЛОМ HTTP COOKIES

Cookie — это фрагмент информации, который сценарий, при

необходимости, сохраняет на клиентской машине. Теоретически использование cookie выглядит следующим образом:
1. Клиент отправляет HTTP-запрос серверу.
2. Сервер отправляет HTTP-ответ, среди прочего включающий в себя заголовок Set-Cookie:var=value.
3. При необходимости, клиент переходит на другую страницу этого же сервера, путем отправки нового HTTP-запроса, включающего в себя заголовок Cookie:var=value.
4. Сервер «узнает» клиента и соответствующим образом реагирует на его запрос, если это предусмотрено.
Слайд 58

РАБОТА С ПРОТОКОЛОМ HTTP. COOKIES. ПЕРВЫЙ ЗАПРОС GET / HTTP/1.1 ⮱

РАБОТА С ПРОТОКОЛОМ HTTP. COOKIES. ПЕРВЫЙ ЗАПРОС

GET / HTTP/1.1 ⮱
Host: www.rosnou.ru


Accept: */* ⮱
Referrer: http://www.google.ru/search? aq=f&complete=1&hl=ru&newwindow=1&q=%D0%A0%D0%BE%D1%81%D0%9D%D0%9E%D0%A3&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr= ⮱
User-Agent: Mozilla 4.0 (compatible; MSIE 6.1,…) ⮱

HTTP/1.1 200 OK ⮱
Date: Sun, 06 Jan 2008 11:19:28 GMT ⮱
Server: Apache/2.2.4 ⮱
Pragma: no-cache ⮱
Content-Length: 23341 ⮱
Content-Type: text/html; charset=windows-1251 ⮱
Set-Cookie: var=value ⮱

. . .

Слайд 59

РАБОТА С ПРОТОКОЛОМ HTTP. COOKIES. ПОСЛЕДУЮЩИЕ ЗАПРОСЫ GET / HTTP/1.1 

РАБОТА С ПРОТОКОЛОМ HTTP. COOKIES. ПОСЛЕДУЮЩИЕ ЗАПРОСЫ

GET / HTTP/1.1 
Host: www.rosnou.ru


Accept: */* ⮱
Referrer: http://www.google.ru/search? aq=f&complete=1&hl=ru&newwindow=1&q=%D0%A0%D0%BE%D1%81%D0%9D%D0%9E%D0%A3&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr= ⮱
User-Agent: Mozilla 4.0 (compatible; MSIE 6.1,…) ⮱
Cookie: var=value ⮱

HTTP/1.1 200 OK ⮱
Date: Sun, 06 Jan 2008 11:19:28 GMT ⮱
Server: Apache/2.2.4 ⮱
Pragma: no-cache ⮱
Content-Length: 23341 ⮱
Content-Type: text/html; charset=windows-1251 ⮱

. . .

Слайд 60

РАБОТА С ПРОТОКОЛОМ HTTP. COOKIE. ПРИМЕР setcookie ("TestCookie", "value"); //Безвременно setcookie

РАБОТА С ПРОТОКОЛОМ HTTP. COOKIE. ПРИМЕР

setcookie ("TestCookie", "value"); //Безвременно
setcookie

("TestCookie", "value", time()+3600);//На 1 час
setcookie ("TestCookieArray[1]", "value1"); //Массив Cookie
setcookie ("TestCookieArray[2]", "value2");
?>
Кука станет доступна только после перезагрузки страницы.
echo $_COOKIE['TestCookie'];
echo $_COOKIE['TestCookieArray'][1];
?>
setcookie ("TestCookie");//Устанавливаем куку без значения
setcookie ("TestCookieArray[1]");
?>
Слайд 61

РАБОТА С ПРОТОКОЛОМ HTTP. ЗАГОЛОВКИ ОТВЕТА HEAD / HTTP/1.1 ⮱ Host:

РАБОТА С ПРОТОКОЛОМ HTTP. ЗАГОЛОВКИ ОТВЕТА

HEAD / HTTP/1.1 ⮱
Host: www.rosnou.ru ⮱
Accept:

*/* ⮱
Referrer: http://www.google.ru/search? aq=f&complete=1&hl=ru&newwindow=1&q=%D0%A0%D0%BE%D1%81%D0%9D%D0%9E%D0%A3&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr= ⮱
User-Agent: Mozilla 4.0 (compatible; MSIE 6.1,…) ⮱

HTTP/1.1 200 OK ⮱
Date: Sun, 06 Jan 2008 11:19:28 GMT ⮱
Server: Apache/2.2.4 ⮱
Pragma: no-cache ⮱
Content-Length: 23341 ⮱
Content-Type: text/html; charset=windows-1251 ⮱

Слайд 62

РАБОТА С ПРОТОКОЛОМ HTTP. ЗАГОЛОВОК LOCATION Перенаправляет браузер клиента по указанному

РАБОТА С ПРОТОКОЛОМ HTTP. ЗАГОЛОВОК LOCATION

Перенаправляет браузер клиента по указанному в

заголовке адресу.

if (!headers_sent()) {
header('Location: http://www.rosnou.ru');
exit;
}
?>
$host = $_SERVER['HTTP_HOST'];
$dir = dirname($_SERVER['PHP_SELF']);
$page = 'somepage.php';
if (!headers_sent()) {
header("Location: http://$host$dir/$page");
exit;
}
?>

Слайд 63

РАБОТА С ПРОТОКОЛОМ HTTP. ЗАГОЛОВОК REFRESH Перезагружает страницу по истечении указанного

РАБОТА С ПРОТОКОЛОМ HTTP. ЗАГОЛОВОК REFRESH

Перезагружает страницу по истечении указанного количества

секунд.

echo "Через 5 секунд страничка обновится!";
header("Refresh: 5; URL=\"http://rosnou.ru\"");
?>
$rate = 5;
if (!isset($_COOKIE['visits']) || $_COOKIE['visits'] == ""){
header("Refresh: $rate; URL=\"{$_SERVER['PHP_SELF']}\"");
setcookie("visits", "1");
echo "Через $rate секунд страничка обновится 1 раз!";
}else{
$visits = $_COOKIE['visits'] + 1;
header("Refresh: $rate; URL=\"{$_SERVER['PHP_SELF']}\""); setcookie("visits", $visits);
echo "Через $rate секунд страничка обновится $visits раз!";
}
?>

Слайд 64

РАБОТА С ПРОТОКОЛОМ HTTP. ЗАГОЛОВОК CONTENT-TYPE Сообщает браузеру как надо интерпретировать

РАБОТА С ПРОТОКОЛОМ HTTP. ЗАГОЛОВОК CONTENT-TYPE

Сообщает браузеру как надо интерпретировать выводимые

данные.

header('Content-type: application/pdf');
// Этот заголовок форсирует вывод диалога сохранения и
// рекомендует браузеру имя, с которым надо
// сохранить файл. В данном случае: downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// Читает данные из файла, лежащего на сервере
readfile('original.pdf');
?>

Слайд 65

РАБОТА С ПРОТОКОЛОМ HTTP. ЗАГОЛОВОКИ CACHE-CONTROL, EXPIRES, SET-COOKIE Cache-Control используется для

РАБОТА С ПРОТОКОЛОМ HTTP. ЗАГОЛОВОКИ CACHE-CONTROL, EXPIRES, SET-COOKIE

Cache-Control используется для управления

кэшированием документа.
Expires используется для указания браузерам и транзитным прокси - серверам даты устаревания кэша.
Set-Cookie используется для установки cookie. Функция setcookie() является оберткой этого заголовка.
// Актуальность кэша исчерпалась 26.07.2027
header("Expires: Mon, 26 Jul 2027 05:00:00 GMT");
// Запрет кэширования
header("Cache-Control: no-store, no-cache, must-revalidate");
// Установка cookie name со значением igor
header("Set-Cookie: name=igor; expires=Wed, 01-Jan-08 14:39:58 GMT");
?>
Слайд 66

РАБОТА С ПРОТОКОЛОМ HTTP.БАЗОВАЯ АУТЕНТИФИКАЦИЯ if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="Entrance"');

РАБОТА С ПРОТОКОЛОМ HTTP.БАЗОВАЯ АУТЕНТИФИКАЦИЯ

if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="Entrance"');
header('HTTP/1.0 401

Unauthorized');
exit;
} else
echo "Привет {$_SERVER['PHP_AUTH_USER']}, ваш пароль {$_SERVER['PHP_AUTH_PW']}";
?>
if(($_SERVER['PHP_AUTH_USER'] == "admin") AND ($_SERVER['PHP_AUTH_PW'] == "megapass"))
echo "Добро пожаловать!
";
else{
header('WWW-Authenticate: Basic realm="Entrance"');
header("HTTP/1.0 401 Unauthorized");
echo "Вход на страницу закрыт.
";
}
?>
Слайд 67

РАБОТА С ПРОТОКОЛОМ HTTP. ДЕМОНСТРАЦИЯ Передача формы методом POST; Передача формы

РАБОТА С ПРОТОКОЛОМ HTTP. ДЕМОНСТРАЦИЯ

Передача формы методом POST;
Передача формы

методом GET;
Создание, чтение, удаление cookie;
Перезагрузка страницы;
Перенаправление;
Аутентификация.