Введение....14
Динамические веб-сайты....14
Почему MySQL и РНР?....15
Чему научит эта книга?....15
Что вам понадобится?....16
Типографские соглашения....17
ЧАСТЬ I. ЯЗЫК РНР....20
Урок 1. Основы РНР....22
1.1. Экспресс-курс РНР-программирования....22
1.1.1. Программа. Выражения....22
1.1.2. Числа, переменные, операторы, функции, строки, типы данных и вывод результатов....23
1.1.3. Написание РНР-приложений. Наше первое серверное веб-приложение....26
Упражнение 1.1....27
Сделайте сами....29
1.1.4. Массивы, циклы, условия и логические величины....30
Упражнение 1.2....32
Сделайте сами....34
1.1.5. Получение данных от пользователя и условные выражения....35
Упражнение 1.3....36
Сделайте сами....38
1.1.6. Программные модули и включения....38
Упражнение 1.4....39
1.2. Ошибки в РНР-коде....41
1.3. Комментарии....42
1.4. Способы набора РНР-кода....43
1.5. Консоль РНР....44
Урок 2. Работа с данными разных типов....45
2.1. Числа: целые и вещественные....45
2.1.1. Запись чисел....45
2.1.2. Действия над числами....45
Арифметические действия....45
Алгебраические действия....47
Тригонометрические функции....48
Побитовые операции....49
Прочие операции....49
2.2. Строки....50
2.2.1. Запись строк....51
2.2.2. Обработка переменных в строках....52
2.2.3. Действия над строками....53
Конкатенация и вычисление длин строк....53
Поиск и извлечение подстрок в строках....53
Преобразование строк....54
Быстрая обработка строк в кодировке ASCII....55
2.3. Логические величины и написание условий....56
2.3.1. Операторы сравнения....56
2.3.2. Логические операторы....57
2.4. Временные отметки....58
2.4.1. Создание временных отметок....58
2.4.2. Получение компонентов даты и времени из временной отметки....59
2.5. Значение NULL....59
2.6. Типы данных....60
2.6.1. Определение типа значения....60
2.6.2. Преобразование типов....61
Неявное преобразование типов....61
Явное преобразование типов....63
2.6.3. Строгое сравнение....64
2.7. Вычисление выражений, записанных в строках....65
2.8. Упражнение. Доработка веб-приложения convertor3.php....65
Сделайте сами....66
Урок 3. Хранение данных: переменные, ссылки и константы....67
3.1. Переменные и работа с ними....67
3.1.1. Имена переменных....67
3.1.2. Область видимости переменной....68
3.1.3. Присваивание....69
Простое присваивание....69
Комбинированное присваивание....69
Копирование значения при присваивании. Значащие типы данных....70
3.1.4. Переменные переменных....70
3.1.5. Проверка и удаление переменных....71
3.2. Ссылки....72
3.3. Константы....72
Урок 4. Массивы....74
4.1. Индексированные массивы....74
4.1.1. Создание массивов....74
4.1.2. Работа с элементами массивов....75
4.2. Ассоциативные массивы....76
4.3. Комбинированные массивы....77
4.4. Вложенные массивы....77
4.5. Работа с массивами....78
4.6. Упражнение. Вывод описаний к изображениям в фотогалерее....81
4.7. Упражнение. Веб-страница для просмотра изображений....82
Сделайте сами....84
Урок 5. Управляющие конструкции....85
5.1. Условные выражения и операторы....85
5.1.1. Простое условное выражение....85
5.1.2. Множественное условное выражение....86
5.1.3. Условные операторы....86
5.2. Блоки....87
5.3. Выражения выбора. Прерывание....87
5.4. Циклы....90
5.4.1. Цикл со счетчиком....90
5.4.2. Цикл с предусловием....91
5.4.3. Цикл с постусловием....92
5.4.4. Цикл по массиву....93
5.4.5. Прерывание цикла....93
5.4.6. Прерывание текущей итерации цикла....94
5.5. Безусловный переход....95
5.6. Завершение работы модуля....95
5.7. Упражнение. Заставляем приложение convertorS.php соблюдать правила русского языка....95
Сделайте сами....98
5.8. Упражнение. Реализуем единую точку входа на веб-сайт....98
5.8.1. Теоретическое обоснование....98
5.8.2. Собственно упражнение....99
Урок 6. Функции....102
6.1. Объявление и вызов функций....102
6.1.1. Область видимости функций....103
6.1.2. Локальные, глобальные и статические переменные....104
6.1.3. Указание типов для параметров и возвращаемого результата....106
6.2. Параметры функций: особые случаи....107
6.2.1. Необязательные параметры....107
6.2.2. Функции с произвольным количеством параметров....107
6.2.3. Параметры с изменяемыми значениями. Передача по ссылке....108
6.3. Переменные функций....109
6.4. Анонимные функции....109
6.5. Рекурсия....111
6.6. Упражнение. Объявляем функцию, определяющую падежное окончание по числу....112
Сделайте сами....113
Урок 7. Объектное программирование: классы и объекты....114
7.1. Введение в объектное программирование....114
7.2. Объявление классов....115
7.2.1. Объявление свойств и методов....116
7.2.2. Конструкторы и деструкторы....117
7.2.3. Статические свойства и методы....118
7.2.4. Константы классов....119
7.3. Наследование классов....120
7.3.1. Перекрытие и переопределение методов....121
7.3.2. Решение проблем с наследованием статических методов....122
7.3.3. Абстрактные методы и классы....123
7.3.4. Окончательные методы и классы....124
7.4. Присваивание объектов. Ссылочные типы данных....125
7.5. Работа с объектами и классами....126
7.5.1. Работа с объектами....126
7.5.2. Работа с классами....127
7.6. Магические методы....128
7.7. Автозагрузка классов....130
Урок 8. Объектное программирование: трейты, интерфейсы и пространства имен....132
8.1. Трейты....132
8.1.1. Объявление и использование трейтов....132
8.1.2. Разрешение конфликтов....133
Простые случаи: автоматическое разрешение конфликтов....133
Сложные случаи: разрешение конфликтов вручную....135
8.1.3. Дополнительные инструменты для работы с трейтами....136
8.2. Интерфейсы....136
8.2.1. Объявление и реализация интерфейсов....137
8.2.2. Наследование интерфейсов....138
8.2.3. Дополнительные инструменты для работы с интерфейсами....138
8.3. Пространства имен....139
8.3.1. Объявление пространств имен....139
8.3.2. Обращение к сущностям, объявленным в других пространствах имен....140
Прямое обращение по пути....140
Выполнение импорта....141
8.3.3. Дополнительные инструменты для работы с пространствами имен....143
Урок 9. Архитектура модель-шаблон-контроллер....144
9.1. Введение в архитектуру модель-шаблон-контроллер....144
9.2. Упражнение. Пишем класс модели и реализуем автозагрузку классов....146
Сделайте сами....148
9.3. Упражнение. Пишем контроллер....148
9.4. Упражнение. Создаем шаблоны....151
Урок 10. Генераторы и итераторы....155
10.1. Генераторы....155
10.2. Итераторы....156
10.2.1. Интерфейс Iterator....156
10.2.2. Интерфейс Countable....158
10.3. Упражнение. Превращаем модель в итерируемый класс....158
Урок 11. Регулярные выражения....160
11.1. Введение в регулярные выражения....160
11.1.1. Написание регулярных выражений....160
11.1.2. Поиск с применением регулярных выражений....161
11.1.3. Тестирование регулярных выражений....161
11.2. Литералы регулярных выражений....163
11.2.1. Разделители....163
11.2.2. Метасимволы....163
11.2.3. Поднаборы....164
11.2.4. Вариант....164
11.2.5. Квантификаторы....165
11.2.6. Подквантификатор. Жадный и щедрый режимы поиска....166
11.2.7. Группы и обратные ссылки....167
11.2.8. Обычные символы....168
11.3. Поиск и обработка фрагментов, совпадающих с регулярными выражениями....168
11.3.1. Обычный режим поиска....168
11.3.2. Глобальный поиск....170
11.3.3. Многострочный поиск....171
11.3.4. Замена совпавших фрагментов....172
11.3.5. Разбиение строк....173
11.4. Упражнение. Пишем маршрутизатор на основе регулярных выражений....174
Урок 12. Обработка ошибок. Исключения....176
12.1. Обработчики исключений....176
12.2. Классы исключений....177
12.3. Генерирование исключений....178
12.4. Обработчик исключений по умолчанию....179
12.5. Упражнение. Создаем веб-страницы с сообщениями об ошибках....180
ЧАСТЬ II. СИСТЕМА УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ MYSQL....186
Урок 13. Базы данных....188
13.1. Введение в реляционные базы данных....189
13.1.1. Таблицы, поля и записи....189
13.1.2. Индексы....191
13.1.3. Связи....192
13.1.4. Разграничение доступа....194
13.1.5. Серверные СУБД....195
13.2. Серверные СУБД MySQL и MariaDB....195
13.3. Программа для работы с базами данных phpMyAdmin....197
13.3.1. Открытие phpMyAdmin и выполнение входа....197
13.3.2. Навигация в phpMyAdmin....198
13.3.3. Работа с базой данных....199
Создание базы данных....199
Переименование базы данных....200
Изменение кодировки у базы данных....200
Удаление базы данных....200
13.3.4. Работа с таблицами....201
Создание таблицы....201
Переименование таблицы....203
Удаление таблицы....204
13.3.5. Работа с полями....204
Добавление поля в таблицу....204
Правка поля....204
Удаление поля....205
13.3.6. Работа с индексами....205
Добавление индекса в таблицу....205
Правка индекса....206
Удаление индекса....206
13.3.7. Работа со связями....207
Создание связи....207
Правка связи....208
Удаление связи....208
13.3.8. Работа с пользователями....208
Создание пользователя....208
Правка привилегий пользователя....212
Изменение пароля пользователя....213
Правка основных сведений о пользователе....213
Удаление пользователя....214
13.3.9. Работа с записями....215
Добавление записей....215
Правка записей....216
Удаление записей....217
13.3.10. Экспорт и импорт баз данных....217
Экспорт базы данных....217
Импорт базы данных....218
13.4. Упражнение. Создаем базу данных для веб-сайта фотогалереи....218
Урок 14. Написание запросов к базам данных. Язык SQL....222
14.1. Выполнение SQL-запросов в phpMyAdmin....222
14.2. Выборка записей....224
14.2.1. Простая выборка записей....224
14.2.2. Связывание таблиц и выборка полей из связанных записей....225
14.2.3. Фильтрация записей....227
14.2.4. Сортировка записей....231
14.2.5. Выборка заданного количества записей....232
14.3. Вычисления над группами записей....232
14.3.1. Агрегатные функции....232
14.3.2. Группировка записей....233
14.3.3. Фильтрация групп....234
14.4. Вложенные запросы....234
14.5. Добавление, правка и удаление записей....236
14.5.1. Добавление записей....236
14.5.2. Правка записей....237
14.5.3. Удаление записей....237
Урок 15. Выполнение запросов к базам данных MySQL средствами РНР....238
15.1. Соединение с базой данных....238
15.2. Выполнение простых запросов....239
15.2.1. Простые запросы на выборку записей....239
15.2.2. Простые запросы на изменение данных....241
15.3. Параметризованные запросы....241
15.3.1. Подготовка параметризованного запроса....241
15.3.2. Задание значений параметров в параметризованном запросе....242
15.3.3. Выполнение запроса....243
15.3.4. Получение результатов....243
15.4. Дополнительные инструменты....245
15.5. Обработка ошибок при работе с базами данных....246
15.6. Упражнение. Пишем базовый класс модели, работающей с базой данных....246
15.7. Упражнение. Создаем главную веб-страницу и веб-страницу категории....252
Сделайте сами....256
15.8. Упражнение. Реализуем пагинацию....257
15.9. Упражнение. Реализуем фильтрацию изображений....262
Сделайте сами....264
ЧАСТЬ III. ПРАКТИЧЕСКОЕ РНР-ПРОГРАММИРОВАНИЕ....266
Урок 16. Обработка клиентских запросов, генерирование ответов и включение модулей....268
16.1. Средства для обработки клиентских запросов....268
16.1.1. Получение данных, отправленных из веб-форм....268
16.1.2. Получение сведений о клиентском запросе и веб-сервере....268
16.2. Вывод данных....269
16.2.1. Простой вывод данных....269
16.2.2. Форматированный вывод данных....270
Форматированный вывод строк и чисел....270
Форматированный вывод временных отметок....272
16.2.3. Преобразование текста к виду, пригодному для вставки в HTML-код....273
16.3. Упражнение. Форматируем временные отметки....274
Сделайте сами....275
16.4. Задание заголовков и состояния ответа....275
16.4.1. Перенаправление....276
16.5. Упражнение. Задаем состояния ответа у веб-страниц сообщений об ошибках 404 и 503....276
Сделайте сами....277
16.6. Включение модулей....277
Урок 17. Обработка данных, введенных в веб-формы....278
17.1. Элементы управления HTML и отправляемые ими данные....278
17.2. Валидация и нормализация данных....280
17.2.1. Валидация данных....280
17.2.2. Нормализация данных....284
17.3. Упражнение. Реализуем в базовом классе модели добавление, правку и удаление записей....286
17.4. Упражнение. Создаем базовый класс формы....289
17.5. Упражнение. Реализуем добавление комментариев....294
17.6. Упражнение. Реализуем правку и удаление комментариев....298
Сделайте сами....301
Урок 18. Работа с файлами и папками....302
18.1. Получение сведений о текущем программном модуле....302
18.2. Работа с файлами....302
18.2.1. Получение сведений о файле....302
18.2.2. Манипуляции с файлами....304
18.2.3. Чтение и запись....304
18.3. Работа с папками....305
18.3.1. Получение сведений о папке....305
18.3.2. Манипуляции с папками....305
18.4. Получение сведений о дисках....306
18.5. Сохранение файлов, отправленных из веб-формы....307
18.6. Упражнение. Реализуем добавление, правку и удаление изображений....310
Сделайте сами....316
Урок 19. Работа с графикой....318
19.1. Создание и открытие изображений....318
19.1.1. Создание нового изображения....318
19.1.2. Открытие существующего изображения....318
19.2. Рисование фигур....319
19.2.1. Создание цветов для фигур....319
19.2.2. Рисование точек....320
19.2.3. Рисование линий....320
19.2.4. Рисование прямоугольников....321
19.2.5. Рисование эллипсов....322
19.2.6. Рисование полигонов....323
19.2.7. Рисование кривых....324
19.2.8. Закраска областей изображения....325
19.2.9. Задание толщины и стиля линий....326
19.2.10. Вывод текста....327
19.3. Изменение размеров и копирование изображений....328
19.3.1. Изменение размеров изображения....328
19.3.2. Копирование одного изображения в другое....329
19.4. Сохранение изображения....330
19.5. Удаление изображения....330
19.6. Получение сведений об изображении....330
19.7. Упражнение. Реализуем создание и вывод миниатюр....331
Урок 20. Cookie и сессии....335
20.1. Cookie....335
20.1.1. Запись данных в cookie....335
20.1.2. Получение данных, сохраненных в cookie....336
20.2. Сессии....337
20.2.1. Запуск, проверка состояния и использование сессии....337
20.2.2. Удаление сессии и сохраненных в ней данных....338
Урок 21. Базовые средства безопасности. Разграничение доступа....339
21.1. Реализация разграничения доступа....339
21.2. Безопасное хранение паролей. Хэши....340
21.3. Упражнение. Реализуем вход и выход....342
21.4. Упражнение. Защищаем веб-сайт....348
21.5. Упражнение. Создаем веб-страницу регистрации....354
21.6. Упражнение. Реализуем правку и удаление пользователей....357
Сделайте сами....360
Урок 22. Отправка электронной почты....361
22.1. Класс SendMailSmtpClass....361
22.2. Упражнение. Реализуем отправку оповещений о новых комментариях....363
Урок 23. Усиленные меры безопасности....368
23.1. Перевод веб-сайта на протокол HTTPS....368
23.2. Защита от атак типа CSRF....369
23.3. Упражнение. Противодействуем атакам CSRF....371
23.4. Двухэтапная регистрация пользователей....374
23.5. Упражнение. Делаем двухэтапную регистрацию....375
Урок 24. Веб-службы REST....380
24.1. Формат JSON и его поддержка в РНР....380
24.2. Стиль REST....382
24.2.1. Решение проблемы с передачей данных HTTP-методами PUT, РАТСН и DELETE. Подмена НТТР-метода....384
24.3. Программирование фронтенда....385
24.3.1. Получение данных....385
24.3.2. Добавление фрагмента данных....386
24.3.3. Правка фрагмента данных....387
24.3.4. Удаление фрагмента данных....387
24.3.5. Реализация разграничения доступа....388
24.4. Упражнение. Пишем бэкенд....389
Урок 25. Настройки РНР....399
25.1. Включение и отключение расширений РНР....400
25.2. Настройки отправки файлов на сервер....401
25.3. Настройки сессий....401
25.4. Настройки вывода сообщений об ошибках....402
25.5. Настройки ограничения ресурсов....403
Заключение....404
ПРИЛОЖЕНИЯ....406
Приложение 1. Приоритет операторов....408
Приложение 2. Пакет хостинга ХАМРР....410
П2.1. Установка пакета ХАМРР....410
П2.2. Панель управления ХАМРР. Запуск и остановка веб-сервера и СУБД....415
П2.2.1. Указание языка при первом запуске....415
П2.2.2. Окно панели управления ХАМРР....415
П2.2.3. Запуск веб-сервера и СУБД....415
П2.2.4. Проверка работоспособности веб-сервера и СУБД....416
П2.2.5. Остановка веб-сервера и СУБД....417
П2.3. Использование веб-сервера....418
П2.3.1. Тестирование веб-сайта с применением ХАМРР....418
П2.3.2. Просмотр журналов работы веб-сервера и РНР....418
П2.4. Настройка РНР и решение проблем....419
П2.4.1. Настройка РНР....419
П2.4.2. Отключение кэширования файлов веб-обозревателем....419
Приложение 3. Описание электронного архива....422
Предметный указатель....424
В книге 25 иллюстрированных уроков и более 30 практических упражнений. В доступной и наглядной форме, на сквозном примере рассказано о программировании динамических веб-сайтов на языке PHP с применением СУБД MySQL и MariaDB. Описывается программное генерирование веб-страниц, получение данных от пользователей и проверка их на корректность, работа с файлами, программное рисование графики, обработка cookie и сессий, отправка электронной почты. Рассмотрена архитектура «модель-шаблон-контроллер» и структурирование кода для дальнейшего сопровождения сайта. Рассказано о мерах защиты сайта: разграничение доступа, перевод на безопасный протокол HTTPS, защита от атак, шифрование данных. Дан краткий курс программирования веб-служб REST. Сквозной пример разработки веб-сайта фотогалереи и PHP-фреймворка поможет при построении собственных сайтов. Электронное приложение-архив на сайте издательства содержит коды всех примеров.