Предисловие....16
Немного истории....16
Основные нововведения в РНР версии 8....18
Улучшена производительность благодаря компиляции Just-In-Time....18
Именованные аргументы....18
Атрибуты вместо аннотаций PHPDoc....18
Объявление свойств в конструкторе....19
Выражение Match и оператор nullsafe....19
Новые классы, интерфейсы и функции....20
Улучшения в системе типов и обработке ошибок....20
Прочие улучшения синтаксиса....21
ЧАСТЬ I. ТЕОРИЯ....22
РАЗДЕЛ 1. БЫСТРЫЙ СТАРТ....24
Глава 1. Установка необходимого программного обеспечения....26
1.1. Нужно ли устанавливать программное обеспечение?....26
1.2. Выбор PHP-редактора и FTP-клиента....28
1.3. Установка связки Apache + РНР + MySQL в Windows....31
1.3.1. Для опытных пользователей: установка вручную....31
Установка веб-сервера Apache....31
Установка РНР....33
1.3.2. Установка для новичков (рекомендуется)....40
Глава 2. Программа на РНР....44
2.1. Ваша первая программа....44
2.2. Запуск РНР-программы....45
2.3. Вывод текста без echo....46
Глава 3. Основы синтаксиса РНР....49
3.1. Переменные....49
3.1.1. Правила объявления переменных. Имена переменных....49
3.1.2. Типы данных переменных....50
3.1.3. Булевы переменные....52
3.1.4. Операции над переменными....52
3.1.5. Ссылки....53
3.2. Константы....54
3.3. Выражения и операции....58
3.3.1. Что такое выражение^....58
3.3.2. Арифметические операции....58
3.3.3. Логические выражения....59
3.3.4. Битовые операции....59
3.3.5. Приоритеты операций....60
3.3.6. Операторы эквивалентности == и ===....61
3.3.7. Оператор ?? — сокращенная форма тернарной условной операции....62
3.3.8. Операции со строками....62
3.3.9. Оператор nullsafe....63
3.4. Условный оператор....64
3.5. Циклы....65
3.5.1. Цикл со счетчиком for....65
3.5.2. Цикл while....66
3.5.3. Цикл do-while....66
3.5.4. Принудительное завершение цикла и пропуск итерации....66
3.6. Оператор выбора switch-case....67
3.7. Выражение match в РНР 8....68
Глава 4. Файл конфигурации php.ini....69
4.1. Каталог /etc/php....69
4.2. Параметры памяти....70
4.3. Zend OPcache....70
4.4. Максимальное время выполнения....72
4.5. Загрузка файлов....73
4.6. Обработка сессий....73
4.7. Буферизация вывода....74
4.8. Директива error reportingO....74
4.9. Отключение потенциально опасных функций....74
4.10. Директива allow_url_open....75
РАЗДЕЛ 2. ПЕРЕДАЧА ПАРАМЕТРОВ РНР-ПРОГРАММАМ....76
Глава 5. Методы GET и POST....78
5.1. Интерфейс CGI....78
5.2. Метод GET....80
5.3. Метод POST....80
Глава 6. Протокол HTTP и интерфейс CGI....82
6.1. Специальные переменные окружения CGI....82
6.2. Заголовки протокола HTTP....83
6.3. Коды ответов протокола HTTP....84
Глава 7. Передача параметров посредством HTML-формы....86
7.1. Создание простейшей формы и ее обработка в сценарии....86
7.2. Создание пользовательского интерфейса с помощью формы....89
7.2.1. Ввод текста. Теги INPUT и TEXTAREA....89
7.2.2. Зависимые и независимые переключатели....91
7.2.3. Списки выбора....92
7.2.4. Форма для передачи файлов....94
7.2.5. Кнопки....94
7.3. Проверка параметров формы....95
7.3.1. Проверка корректности e-mail....96
7.3.2. Проверка правильности номера банковской карты....97
7.3.3. Удаление лишних пробелов....98
7.4. Директива @csrf шаблонизатора Blade....98
Глава 8. Не забываем о поисковой оптимизации....100
8.1. «Дружественные» интернет-адреса....100
8.1.1. Организация SEF URL с помощью файла .htaccess....101
8.1.2. Использование фреймворков....103
8.2. Идентификаторы сеансов....103
8.3. Производительность сценария....103
8.3.1. Использование шаблонизатора. Сокращение количества инструкций echo....104
8.3.2. Включение OPcache....104
8.3.3. Включение HTTP 2.0....105
8.3.4. Обновление версии РНР....105
РАЗДЕЛ 3. МАССИВЫ И СПИСКИ....106
Глава 9. Основные операции над массивами и списками....108
9.1. Массив и список. Цикл foreach....108
9.2. Функции list() и array!)....111
9.3. Удаление массива....113
9.4. Слияние массивов....113
9.5. Функция print_r()....115
9.6. Разыменовывание массива....116
Глава 10. Функции сортировки массивов....118
10.1. Сортировка массивов....118
10.2. Функция sort() — сортировка списка....118
10.3. Функция asortf) — сортировка массива по значениям....119
10.4. Функция ksort() — сортировка по ключам....120
10.5. Функции array_reverse() и shuffle()....121
10.6. Собственная функция сортировки....121
10.7. Натуральная сортировка....122
Глава 11. Особые операции над массивами....124
11.1. Добавление и удаление элементов массива....124
11.2. Упаковка переменных в массив и их извлечение....125
11.3. Получение части массива....127
11.4. Функции автоматического заполнения массива....127
11.5. Сравнение массивов....128
11.6. Полезные операции над массивом....129
11.6.1. Вычисление суммы и произведения всех элементов массива....129
11.6.2. Проверка существования элемента в массиве....129
11.6.3. Получение случайного элемента из массива....130
11.6.4. Удаление дубликатов из массива....130
11.6.5. Получение значений и ключей массива....131
11.6.6. Замена местами значений и ключей....131
11.6.7. Подсчет значений в массиве....131
11.6.8. Замена в массиве....132
11.6.9. Поиск в массиве....132
11.6.10. Прогулка по массиву....133
РАЗДЕЛ 4. ФУНКЦИИ В РНР....136
Глава 12. Полезные стандартные функции. Работа с датой....138
12.1. Генератор случайных чисел....138
12.2. Дата и время....139
12.2.1. Кратко о timestamp....139
12.2.2. Функции strtotime() и checkdate()....139
12.2.3. Вывод даты....140
12.2.4. Использование type="date....142
12.2.5. Функция checkdate(): проверка даты на корректность....142
12.2.6. Класс DateTime: удобная работа с датой и временем....144
Создание даты по строке....144
Вычисление количества дней между двумя датами....145
Работа с временными интервалами....146
12.2.7. Настройка РНР для корректной работы с датами....147
12.3. Математические функции....147
Глава 13. Функции для работы со строками....149
13.1. Основные строковые функции....149
13.2. Специальные функции замены....153
13.3. Функции преобразования строки....155
13.4. Функции преобразования кодировок....157
13.5. Функции для работы с отдельными символами строки. Разыменовывание строки....158
13.6. Функция md5() и другие функции шифрования/хеширования. API хеширования паролей....159
13.7. Функции explode() и implode()\ работа с подстроками....160
13.8. Статистические функции....161
13.9. Функции вывода текста....162
13.10. Установка локали....164
13.11. Форматирование чисел и денежных величин....165
13.12. Преобразование систем счисления....165
13.13. Строки в РНР 7/8....166
Глава 14. Работаем с файлами и каталогами....167
14.1. Права доступа в UNIX....167
14.2. Чтение файла....169
14.2.1. Функции fopenQ и fread()....170
14.2.2. Функция file(): построчное чтение файла....172
14.2.3. Чтение всего файла: функция file_get_contents()....173
14.3. Запись файла....173
14.4. Создание временных файлов....174
14.5. Работа с CSV-файлами....174
14.6. Специальные функции для работы с файлами....176
14.6.1. Функции для работы с именами файлов....176
14.6.2. Работа с правами доступа....177
14.6.3. Копирование, переименование и удаление файлов....178
14.6.4. Время доступа к файлу....179
14.6.5. Другие полезные функции....179
14.7. Совместный доступ к файлу....180
14.8. Функции для работы с каталогами....181
Глава 15. Вывод графических изображений средствами РНР....183
15.1. Библиотека GD....183
15.1.1. Получение информации об изображении....183
15.1.2. Конвертирование графических форматов....186
15.1.3. Вывод текста поверх картинки. Задание цвета....188
15.1.4. Прозрачность....191
15.1.5. Рисование графических примитивов....192
15.1.6. Поворот изображения....194
15.2. Изменение размера изображения....194
15.3. Создание водяных знаков....196
15.4. Поддержка графического формата WebP....198
Глава 16. Работа с сетевыми сокетами в РНР. Сетевые функции....200
16.1. Еще раз о том, что такое сокет....200
16.2. Функция fsockopen()....200
16.3. Примеры работы с сокетами....201
16.3.1. Работаем с протоколом HTTP....201
16.3.2. Отправка почты с использованием сокетов....203
16.3.3. Простейший клиент/сервер....205
16.4. Блокирующий и неблокирующий режимы сокета....207
16.5. DNS-функции....207
Глава 17. Собственные функции....209
17.1. Зачем нужны собственные функции?....209
17.2. Особенности функций в РНР....209
17.3. Объявление функции....210
17.4. Области видимости функции....212
17.5. Вложенность функций....212
17.6. Переменное число аргументов....214
17.7. Передача массивов в качестве параметров....215
17.8. Передача аргументов по ссылке....217
17.9. Генераторы....218
17.10. Полезные примеры....220
17.10.1. Получение реального IP-адреса клиента....220
17.10.2. Генерирование сложного пароля....221
17.10.3. Рекурсивное удаление каталога....221
17.10.4. Отправка файла в браузер....222
17.10.5. Сжатие файла «налету»....223
РАЗДЕЛ 5. БАЗА ДАННЫХ MYSQL....226
Глава 18. Установка MySQL на VDS....228
18.1. Несколько вводных слов....228
18.2. Установка сервиса MySQL....228
18.3. Настройка MySQL....229
18.4. Создание MySQL-пользователя....230
18.5. Запуск и останов сервера....231
Глава 19. Основы SQL....232
19.1. Немного истории....232
19.2. Преимущества SQL....232
19.3. Как выглядят запросы?....233
19.4. Что такое база данных?....234
19.5. Создание таблиц....235
19.6. Добавление записей в таблицу....239
19.7. Обновление записей....239
19.8. Выборка записей....240
19.9. Удаление записей....241
19.10. Встроенные функции....242
19.11. Группировка записей. Сложные запросы....243
19.12. Копирование записей из одной таблицы в другую....246
19.13. Кеширование запросов....246
Глава 20. Функции для работы с MySQL....249
20.1. Способы работы с базой данных....249
20.2. Расширение mysqli....250
20.2.1. Подключение к серверу MySQL....250
20.2.2. Передача запросов серверу....251
20.2.3. Метод real_escape_string()....253
20.3. Расширение PDO....253
20.3.1. Соединение с базой данных....253
20.3.2. Выполнение запросов и чтение результата....255
20.3.3. Получение данных....257
20.3.4. Особенности использования операторов LIKE, LIMIT и IN....258
20.3.5. Имена таблиц и полей при работе с PDO....259
20.3.6. Запросы вставки и обновление....259
Глава 21. Работа с базой данных в Laravel....261
21.1. Способы работы с базой данных....261
21.2. Сырые (прямые) запросы....262
21.3. Конструктор запросов....263
21.4. Система Eloquent....266
РАЗДЕЛ 6. ИНСТРУМЕНТЫ ДЛЯ СОЗДАНИЯ СЛОЖНЫХ ПРОЕКТОВ....270
Глава 22. Разработка собственного шаблонизатора....272
22.1. Организация файлов и каталогов проекта....272
22.2. Выносим параметры в отдельный файл....274
22.3. Подключение дополнительных файлов....275
22.3.1. Инструкции include и require....275
22.3.2. Альтернативный способ подключения сценариев....276
22.3.3. Инструкции include once и require once....278
22.4. Шаблоны....278
Глава 23. Шаблонизатор Blade....283
23.1. Введение в Blade....283
23.2. Вывод значений скалярных переменных....284
23.3. Директивы Blade....284
23.3.1. Директива @if....284
23.3.2. Директивы @for, (ajforeach и @while....285
23.3.3. Директивы @forelse и @endforelse....285
23.4. Включение представлений. Директива (^include....286
23.5. Директива @csrf....288
Глава 24. Объектно-ориентированное программирование....289
24.1. Основы ООП....289
24.2. Классы и объекты....290
24.3. Конструкторы и деструкторы класса....292
24.4. Наследование классов. Полиморфизм....294
24.5. Область видимости членов класса....295
24.6. Абстрактные классы и методы....296
24.7. Служебное слово final....296
24.8. Клонирование объектов....297
24.9. Константы — члены класса....298
24.10. Статические члены класса....298
24.11. Оператор instanceof....299
24.12. Итераторы....299
24.13. Пространства имен....300
24.13.1. Общая концепция....300
24.13.2. Объявление пространства имен....301
24.13.3. Псевдонимы....302
24.14. Типажи....303
24.15. Вызов метода или свойства класса выражением....304
24.16. Генераторы....304
24.17. Атрибуты....306
Глава 25. Хранение данных в Cookies и сессиях....307
25.1. Зачем нужны Cookies и сессии?....307
25.2. Cookies или хранение данных на стороне клиента....307
25.2.1. Что такое Cookies?....307
25.2.2. Установка Cookies....308
25.2.3. Удаление Cookies....309
25.2.4. Организация корзины с помощью Cookies....310
25.3. Механизм сессий....312
25.3.1. Для чего нужны сессии?....312
25.3.2. Автоматическое создание сессии....313
25.3.3. Хранение данных в сессии....313
Глава 26. Обработка исключений....314
26.1. Введение в обработку исключений....314
26.2. Блок catch....315
26.3. Ьлок finally....316
26.4. Глобальный обработчик исключений....318
Глава 27. Контроль версий....319
27.1. Выбор системы контроля версий....319
27.2. Первоначальная настройка....320
27.3. Создание нового репозитория или получение его по существующему URL-адресу....320
27.4. Операции с файлами. Перемещение и удаление версий файлов репозитория....321
27.5. Сохранение и восстановление незавершенных изменений....322
27.6. Просмотр изменений и создание коммитов (фиксация изменений)....322
27.7. Коллективная работа....323
27.8. Просмотр и изучение истории изменений файлов проекта....323
27.9. Откат изменений. Удаление ошибок и корректировка созданной истории....324
27.10. Синхронизация с удаленным репозиторием. Регистрация удаленного репозитория и обмен изменениями....324
Глава 28. Тестирование РНР-сценариев....325
28.1. Программа работает, но не так, как нам нужно....325
28.2. «Самодельные» точки останова....326
28.3. Система автоматического тестирования....328
28.4. Директива error reporting....331
ЧАСТЬ II. ПРАКТИКА....332
РАЗДЕЛ 7. РАЗРАБОТКА ОСНОВНЫХ ЭЛЕМЕНТОВ САЙТА....334
Глава 29. Загрузка файлов на сервер....336
29.1. Что нужно знать о загрузке файлов на сервер?....336
29.2. Реализация загрузки файла....339
29.3. Загрузка нескольких файлов....341
29.4. Индикатор загрузки файла....343
29.4.1. Некоторые теоретические предпосылки....343
29.4.2. Пример практической реализации....346
29.5. Проблемы при загрузке файлов....353
Глава 30. Использование FTP-функций....354
30.1. Функции для работы с FTP....354
30.2. Примеры использования FTP-функций....357
Глава 31. Отправка и прием почты....360
31.1. Отправка почты средствами РНР: функция mail()....360
31.1.1. Использование функции....360
31.1.2. Подробно о настройке сервера....361
31.2. Класс PHPMailer. Разработка сценария автоматической рассылки прайс-листа....362
31.3. Получение писем по протоколу POP3....366
31.4. Получение писем по протоколу IMAP....368
Глава 32. Введение в PEAR....371
32.1. Серьезные проекты и PEAR....371
32.2. Пример использования класса DB....373
Глава 33. Импорт и экспорт данных....376
33.1. Импорт прайс-листов из формата CSV в базу данных MySQL....376
33.2. Преобразование файлов Excel в CSV с помощью РНР. Импорт прайсов из Excel....380
33.3. Работа с XML-файлами....381
33.3.1. Парсинг XML-файла....381
33.3.2. Генерирование XML-файла....383
Глава 34. Работаем с MP3....385
34.1. Формат MP3..................................................j....385
34.2. Библиотека PEAR....386
34.3. Вывод ШЗ-тегов....387
34.4. Редактирование ЮЗ-тегов....389
34.5. Удаление тега....389
Глава 35. Расширение cURL: практические примеры....391
35.1. Этот загадочный cURL....391
35.2. Авторизация на сайте и загрузка файла после нее....393
35.3. Замена функцииfile_get_contents() с помощью cURL....396
35.4. Загрузка файла через FTP....396
35.5. Проверка доступности сайта....397
РАЗДЕЛ 8. ВВЕДЕНИЕ В LARAVEL....400
Глава 36. Фреймворк или чистый РНР-код?....402
36.1. Что такое фреймворк?....402
36.2. Обзор популярных РНР-фреймворков....403
36.2.1. Zend Framework и The Laminas Project....403
36.2.2. Laravel....404
36.2.3. Symfony....404
36.2.4. Yii....404
36.2.5. Codeigniter....405
Глава 37. Установка Laravel на VDS c Ubuntu Linux....406
37.1. Выбор места для установки....406
37.2. Установка необходимого ПО....406
37.2.1. Установка веб-сервера Apache....406
37.2.2. Установка РНР и его расширений....408
37.2.3. Установка Laravel....410
Глава 38. Определяем маршруты....413
38.1. Запросы протокола HTTP....413
38.2. Модель. Представление. Контроллер....414
38.3. Простейшие маршруты. Сопоставление маршрута с контроллером....415
38.4. Параметры в маршрутах....416
38.5. Имена маршрутов....417
38.6. Префиксы маршрутов....418
38.7. Маршруты новостной страницы....418
Глава 39. Пишем контроллер....419
39.1. Создание контроллера....419
39.2. Простой метод: List()....420
39.3. Методы с параметрами: View() и GetArchiveContent()....421
39.4. Обработка POST-запроса....422
Глава 40. Создаем представление....423
40.1. Каталог resources/views....423
40.2. Получение данных из контроллера....424
40.3. Очистка кеша страниц и кеша представлений....425
Глава 41. Запрос и ответ....426
41.1. Работаем с запросами. Класс Request....426
41.1.1. Основные методы....426
41.1.2. Получение информации о пользователе/запросе....427
41.1.3. Работа с файлами....428
41.1.4. Собирая все вместе....428
41.2. Класс Response....429
Глава 42. Работа с данными....431
42.1. Файловая система....431
42.1.1. Конфигурация фасада Storage....431
42.1.2. Методы фасада Storage....432
42.1.3. Загрузка файлов на сервер....433
42.1.4. Метод downloadO....434
42.2. Сессии....434
42.3. Работа с Cookies....436
РАЗДЕЛ 9. БЕЗОПАСНОСТЬ САЙТА....438
Глава 43. Как взламываются сайты и как этому помешать? Основные сведения....440
43.1. Основные способы взлома сайта....440
43.2. Два самых распространенных метода взлома....442
43.2.1. Межсайтовый скриптинг....442
43.2.2. SQL-инъекции....444
43.3. Остальные методы....447
Глава 44. SSL-сертификат для сайта....448
44.1. Выбор сертификата....448
44.1.1. Основные типы сертификатов....448
44.1.2. Какой тип сертификата выбрать?....449
44.1.3. Особенности SSL-сертификатов разных типов....449
44.2. Где купить SSL-сертификат?....452
44.3. Установка сертификата на веб-сервер....453
44.3.1. Веб-сервер Apache2....453
44.3.2. Веб-сервер Ngnix....454
Глава 45. Защита РНР с помощью конфигурационного файла....455
45.1. Конфигурационный файл php.ini....455
45.2. Отключение потенциально опасных функций....456
45.3. Рекомендованные значения некоторых конфигурационных директив....456
РАЗДЕЛ 10. ПОЛЕЗНЫЕ СВЕДЕНИЯ....458
Глава 46. Устанавливаем визуальный редактор Summernote....460
46.1. Знакомство с редактором....460
46.2. Интеграция Summemote и Laravel....460
Глава 47. Работа с MongoDB средствами РНР....463
47.1. Что такое MongoDB?....463
47.2. Настройка интерпретатора РНР....464
47.3. Добавление данных в MongoDB....466
47.4. Чтение информации из базы данных....468
47.5. Преобразование объекта в массив....470
ПРИЛОЖЕНИЯ....474
Приложение 1. Шаблоны проектирования....476
П1.1. Введение в шаблоны проектирования....476
П1.2. Шаблон «Стратегия»....477
П1.3. Шаблон «Адаптер»....478
П1.4. Шаблон «Фабрика»....479
П1.5. Шаблон «Одиночка»....480
Приложение 2. Профайлинг....482
П2.1. Что такое профайлинг?....482
П2.2. Типы профайлеров....482
П2.3. Профайлер Xdebug....483
П2.4. XHProf....483
Приложение 3. Виртуальная машина HHVM....486
П3.1. Что такое HHVM?....486
П3.2. Подойдет ли HHVM именно для вас?....487
П3.3. Установка HHVM....488
П3.4. Настройка HHVM....488
П3.5. Язык Hack....490
Приложение 4. Описание электронного архива....491
Предметный указатель....493
На практических примерах описано создание веб-приложений на языке PHP версии 8.x. Даны начала разработки на PHP: установка и настройка Apache 2.4, PHP, MySQL и кроссплатформенной сборки XAMPP, выбор редактора PHP-кода, синтаксис языка, самые полезные функции и нововведения PHP 8.x. Рассмотрено создание веб-приложений с использованием популярного фреймворка Laravel и шаблонизатора Blade. В качестве хранилища данных использованы два сервера – самая современная версия MySQL и набирающая популярность СУБД MongoDB. Раскрыты особенности создания индикатора загрузки файла и разыменовывания массивов, приведены примеры устранения типичных SEO-ошибок, допускаемых программистами, описана работа с PDO, JSON, MP3, Curl, MobileDetec Особое внимание уделяется безопасности веб-приложений – рассматривается, как уберечь их от основных атак, как установить SSL-сертификат и как уберечь сам сервер от неприятностей.
На сайте издательства находятся дополнительные главы, листинги из книги, а также необходимое программное обеспечение.
Для веб-программистов