Опубликовано

Новинка: “Разработка веб-приложений на PHP 8”

Разработка веб-приложений на PHP 8

На практических примерах описано создание веб-приложений на языке 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-сертификат и как уберечь сам сервер от неприятностей.
На сайте издательства находятся дополнительные главы, листинги из книги, а также необходимое программное обеспечение.

  • Синтаксис PHP. Нововведения PHP 8.x
  • Объектно-ориентированное программирование на PHP 8.x
  • Кроссплатформенная сборка XAMPP
  • MySQL и MongoDB
  • Работа с PDO, JSON, MP3, Curl, MobileDetect
  • Введение во фреймворк Laravel, шаблонизатор Blade
  • Безопасность веб-приложений

Книгу “Разработка веб-приложений на PHP 8” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие…………………………………………………………………………………………… 15

Немного истории……………………………………………………………………………………………………………………….. 15

Основные нововведения в PHP версии 8………………………………………………………………………………….. 17

Улучшена производительность благодаря компиляции Just-In-Time……………………………….. 17

Именованные аргументы……………………………………………………………………………………………………….. 17

Атрибуты вместо аннотаций PHPDoc…………………………………………………………………………………… 17

Объявление свойств в конструкторе……………………………………………………………………………………… 18

Выражение Match и оператор nullsafe…………………………………………………………………………………. 18

Новые классы, интерфейсы и функции…………………………………………………………………………………. 19

Улучшения в системе типов и обработке ошибок……………………………………………………………….. 19

Прочие улучшения синтаксиса……………………………………………………………………………………………… 20

Часть I.  Теория……………………………………………………………………………. 21

Раздел 1. Быстрый старт………………………………………………………………. 23

Глава 1. Установка необходимого программного обеспечения………………. 25

1.1. Нужно ли устанавливать программное обеспечение?……………………………………………………. 25

1.2. Выбор PHP-редактора и FTP-клиента………………………………………………………………………………. 27

1.3. Установка связки Apache + PHP + MySQL в Windows……………………………………………………… 30

1.3.1. Для опытных пользователей: установка вручную…………………………………………………….. 30

Установка веб-сервера Apache………………………………………………………………………………………… 30

Установка PHP…………………………………………………………………………………………………………………… 32

1.3.2. Установка для новичков (рекомендуется)…………………………………………………………………… 39

Глава 2. Программа на PHP…………………………………………………………………… 43

2.1. Ваша первая программа…………………………………………………………………………………………………….. 43

2.2. Запуск PHP-программы………………………………………………………………………………………………………. 44

2.3. Вывод текста без echo………………………………………………………………………………………………………… 45

Глава 3. Основы синтаксиса PHP………………………………………………………….. 48

3.1. Переменные…………………………………………………………………………………………………………………………. 48

3.1.1. Правила объявления переменных. Имена переменных……………………………………………… 48

3.1.2. Типы данных переменных……………………………………………………………………………………………. 49

3.1.3. Булевы переменные………………………………………………………………………………………………………. 51

3.1.4. Операции над переменными………………………………………………………………………………………… 51

3.1.5. Ссылки……………………………………………………………………………………………………………………………. 52

3.2. Константы……………………………………………………………………………………………………………………………. 53

3.3. Выражения и операции………………………………………………………………………………………………………. 57

3.3.1. Что такое выражение?………………………………………………………………………………………………….. 57

3.3.2. Арифметические операции…………………………………………………………………………………………… 57

3.3.3. Логические выражения…………………………………………………………………………………………………. 58

3.3.4. Битовые операции…………………………………………………………………………………………………………. 58

3.3.5. Приоритеты операций………………………………………………………………………………………………….. 59

3.3.6. Операторы эквивалентности == и ===……………………………………………………………………….. 60

3.3.7. Оператор ?? — сокращенная форма тернарной условной операции……………………… 61

3.3.8. Операции со строками………………………………………………………………………………………………….. 61

3.3.9. Оператор nullsafe………………………………………………………………………………………………………….. 62

3.4. Условный оператор…………………………………………………………………………………………………………….. 63

3.5. Циклы…………………………………………………………………………………………………………………………………… 64

3.5.1. Цикл со счетчиком for………………………………………………………………………………………………….. 64

3.5.2. Цикл while………………………………………………………………………………………………………………………. 65

3.5.3. Цикл do-while…………………………………………………………………………………………………………………. 65

3.5.4. Принудительное завершение цикла и пропуск итерации………………………………………….. 65

3.6. Оператор выбора switch-case…………………………………………………………………………………………….. 66

3.7. Выражение match в PHP 8………………………………………………………………………………………………….. 67

Глава 4. Файл конфигурации php.ini………………………………………………………. 68

4.1. Каталог /etc/php………………………………………………………………………………………………………………….. 68

4.2. Параметры памяти……………………………………………………………………………………………………………… 69

4.3. Zend OPcache……………………………………………………………………………………………………………………….. 69

4.4. Максимальное время выполнения…………………………………………………………………………………….. 71

4.5. Загрузка файлов………………………………………………………………………………………………………………….. 72

4.6. Обработка сессий……………………………………………………………………………………………………………….. 72

4.7. Буферизация вывода…………………………………………………………………………………………………………… 73

4.8. Директива error_reporting()……………………………………………………………………………………………….. 73

4.9. Отключение потенциально опасных функций…………………………………………………………………. 73

4.10. Директива allow_url_open……………………………………………………………………………………………….. 74

Раздел 2. Передача параметров PHP-программам……………….. 75

Глава 5. Методы GET и POST…………………………………………………………………. 77

5.1. Интерфейс CGI…………………………………………………………………………………………………………………….. 77

5.2. Метод GET…………………………………………………………………………………………………………………………… 79

5.3. Метод POST…………………………………………………………………………………………………………………………. 79

Глава 6. Протокол HTTP и интерфейс CGI…………………………………………….. 81

6.1. Специальные переменные окружения CGI……………………………………………………………………….. 81

6.2. Заголовки протокола HTTP……………………………………………………………………………………………….. 82

6.3. Коды ответов протокола HTTP…………………………………………………………………………………………. 83

Глава 7. Передача параметров посредством HTML-формы…………………….. 85

7.1. Создание простейшей формы и ее обработка в сценарии………………………………………………. 85

7.2. Создание пользовательского интерфейса с помощью формы………………………………………… 88

7.2.1. Ввод текста. Теги INPUT и TEXTAREA………………………………………………………………………… 88

7.2.2. Зависимые и независимые переключатели…………………………………………………………………. 90

7.2.3. Списки выбора………………………………………………………………………………………………………………. 91

7.2.4. Форма для передачи файлов………………………………………………………………………………………… 93

7.2.5. Кнопки……………………………………………………………………………………………………………………………. 93

7.3. Проверка параметров формы…………………………………………………………………………………………….. 94

7.3.1. Проверка корректности e-mail……………………………………………………………………………………… 95

7.3.2. Проверка правильности номера банковской карты…………………………………………………… 96

7.3.3. Удаление лишних пробелов…………………………………………………………………………………………. 97

7.4. Директива @csrf шаблонизатора Blade……………………………………………………………………………. 97

Глава 8. Не забываем о поисковой оптимизации…………………………………… 99

8.1. «Дружественные» интернет-адреса…………………………………………………………………………………… 99

8.1.1. Организация SEF URL с помощью файла .htaccess………………………………………………….. 100

8.1.2. Использование фреймворков……………………………………………………………………………………… 102

8.2. Идентификаторы сеансов…………………………………………………………………………………………………. 102

8.3. Производительность сценария………………………………………………………………………………………… 102

8.3.1. Использование шаблонизатора. Сокращение количества инструкций echo………… 103

8.3.2. Включение OPcache……………………………………………………………………………………………………. 103

8.3.3. Включение HTTP 2.0…………………………………………………………………………………………………… 104

8.3.4. Обновление версии PHP……………………………………………………………………………………………… 104

Раздел 3. Массивы и списки…………………………………………………….. 105

Глава 9. Основные операции над массивами и списками…………………….. 107

9.1. Массив и список. Цикл foreach………………………………………………………………………………………… 107

9.2. Функции list() и array()……………………………………………………………………………………………………… 110

9.3. Удаление массива…………………………………………………………………………………………………………….. 112

9.4. Слияние массивов……………………………………………………………………………………………………………… 112

9.5. Функция print_r()………………………………………………………………………………………………………………. 114

9.6. Разыменовывание массива………………………………………………………………………………………………. 115

Глава 10. Функции сортировки массивов…………………………………………….. 117

10.1. Сортировка массивов……………………………………………………………………………………………………… 117

10.2. Функция sort() — сортировка списка…………………………………………………………………………….. 117

10.3. Функция asort() — сортировка массива по значениям………………………………………………… 118

10.4. Функция ksort() — сортировка по ключам……………………………………………………………………. 119

10.5. Функции array_reverse() и shuffle()………………………………………………………………………………… 120

10.6. Собственная функция сортировки…………………………………………………………………………………. 120

10.7. Натуральная сортировка……………………………………………………………………………………………….. 121

Глава 11. Особые операции над массивами…………………………………………. 123

11.1. Добавление и удаление элементов массива…………………………………………………………………. 123

11.2. Упаковка переменных в массив и их извлечение…………………………………………………………. 124

11.3. Получение части массива………………………………………………………………………………………………. 126

11.4. Функции автоматического заполнения массива………………………………………………………….. 126

11.5. Сравнение массивов……………………………………………………………………………………………………….. 127

11.6. Полезные операции над массивом………………………………………………………………………………… 128

11.6.1. Вычисление суммы и произведения всех элементов массива………………………………. 128

11.6.2. Проверка существования элемента в массиве……………………………………………………….. 128

11.6.3. Получение случайного элемента из массива…………………………………………………………. 129

11.6.4. Удаление дубликатов из массива……………………………………………………………………………. 129

11.6.5. Получение значений и ключей массива………………………………………………………………….. 130

11.6.6. Замена местами значений и ключей……………………………………………………………………….. 130

11.6.7. Подсчет значений в массиве…………………………………………………………………………………….. 130

11.6.8. Замена в массиве………………………………………………………………………………………………………. 131

11.6.9. Поиск в массиве…………………………………………………………………………………………………………. 131

11.6.10. Прогулка по массиву………………………………………………………………………………………………. 132

Раздел 4. Функции в PHP………………………………………………………………. 135

Глава 12. Полезные стандартные функции. Работа с датой………………….. 137

12.1. Генератор случайных чисел………………………………………………………………………………………….. 137

12.2. Дата и время……………………………………………………………………………………………………………………. 138

12.2.1. Кратко о timestamp…………………………………………………………………………………………………… 138

12.2.2. Функции strtotime() и checkdate()……………………………………………………………………………… 138

12.2.3. Вывод даты……………………………………………………………………………………………………………….. 139

12.2.4. Использование type=”date”……………………………………………………………………………………… 141

12.2.5. Функция checkdate(): проверка даты на корректность………………………………………….. 141

12.2.6. Класс DateTime: удобная работа с датой и временем…………………………………………… 143

Создание даты по строке………………………………………………………………………………………………… 143

Вычисление количества дней между двумя датами…………………………………………………….. 144

Работа с временнми интервалами……………………………………………………………………………….. 145

12.2.7. Настройка PHP для корректной работы с датами…………………………………………………. 146

12.3. Математические функции………………………………………………………………………………………………. 146

Глава 13. Функции для работы со строками………………………………………… 148

13.1. Основные строковые функции……………………………………………………………………………………….. 148

13.2. Специальные функции замены………………………………………………………………………………………. 152

13.3. Функции преобразования строки………………………………………………………………………………….. 154

13.4. Функции преобразования кодировок……………………………………………………………………………. 156

13.5. Функции для работы с отдельными символами строки. Разыменовывание строки…. 157

13.6. Функция md5() и другие функции шифрования/хеширования. API хеширования
паролей……………………………………………………………………………………………………………………………. 158

13.7. Функции explode() и implode(): работа с подстроками………………………………………………… 159

13.8. Статистические функции……………………………………………………………………………………………….. 160

13.9. Функции вывода текста………………………………………………………………………………………………….. 161

13.10. Установка локали…………………………………………………………………………………………………………. 163

13.11. Форматирование чисел и денежных величин…………………………………………………………….. 164

13.12. Преобразование систем счисления……………………………………………………………………………… 164

13.13. Строки в PHP 7/8…………………………………………………………………………………………………………… 165

Глава 14. Работаем с файлами и каталогами………………………………………… 166

14.1. Права доступа в UNIX……………………………………………………………………………………………………. 166

14.2. Чтение файла…………………………………………………………………………………………………………………… 168

14.2.1. Функции fopen() и fread()………………………………………………………………………………………….. 169

14.2.2. Функция file(): построчное чтение файла……………………………………………………………….. 171

14.2.3. Чтение всего файла: функция file_get_contents()……………………………………………………. 172

14.3. Запись файла…………………………………………………………………………………………………………………… 172

14.4. Создание временных файлов…………………………………………………………………………………………. 173

14.5. Работа с CSV-файлами…………………………………………………………………………………………………… 173

14.6. Специальные функции для работы с файлами…………………………………………………………….. 175

14.6.1. Функции для работы с именами файлов…………………………………………………………………. 175

14.6.2. Работа с правами доступа……………………………………………………………………………………….. 176

14.6.3. Копирование, переименование и удаление файлов………………………………………………. 177

14.6.4. Время доступа к файлу…………………………………………………………………………………………….. 178

14.6.5. Другие полезные функции………………………………………………………………………………………… 178

14.7. Совместный доступ к файлу………………………………………………………………………………………….. 179

14.8. Функции для работы с каталогами……………………………………………………………………………….. 180

Глава 15. Вывод графических изображений средствами PHP……………….. 182

15.1. Библиотека GD………………………………………………………………………………………………………………… 182

15.1.1. Получение информации об изображении……………………………………………………………….. 182

15.1.2. Конвертирование графических форматов………………………………………………………………. 185

15.1.3. Вывод текста поверх картинки. Задание цвета……………………………………………………… 187

15.1.4. Прозрачность…………………………………………………………………………………………………………….. 190

15.1.5. Рисование графических примитивов……………………………………………………………………….. 191

15.1.6. Поворот изображения………………………………………………………………………………………………. 193

15.2. Изменение размера изображения………………………………………………………………………………….. 193

15.3. Создание водяных знаков………………………………………………………………………………………………. 195

15.4. Поддержка графического формата WebP…………………………………………………………………….. 197

Глава 16. Работа с сетевыми сокетами в PHP. Сетевые функции…………. 199

16.1. Еще раз о том, что такое сокет………………………………………………………………………………………. 199

16.2. Функция fsockopen()………………………………………………………………………………………………………… 199

16.3. Примеры работы с сокетами………………………………………………………………………………………….. 200

16.3.1. Работаем с протоколом HTTP…………………………………………………………………………………. 200

16.3.2. Отправка почты с использованием сокетов……………………………………………………………. 202

16.3.3. Простейший клиент/сервер………………………………………………………………………………………. 204

16.4. Блокирующий и неблокирующий режимы сокета……………………………………………………….. 206

16.5. DNS-функции…………………………………………………………………………………………………………………… 206

Глава 17. Собственные функции………………………………………………………….. 208

17.1. Зачем нужны собственные функции?……………………………………………………………………………. 208

17.2. Особенности функций в PHP………………………………………………………………………………………….. 208

17.3. Объявление функции………………………………………………………………………………………………………. 209

17.4. Области видимости функции…………………………………………………………………………………………. 211

17.5. Вложенность функций……………………………………………………………………………………………………. 211

17.6. Переменное число аргументов………………………………………………………………………………………. 213

17.7. Передача массивов в качестве параметров………………………………………………………………….. 214

17.8. Передача аргументов по ссылке……………………………………………………………………………………. 216

17.9. Генераторы……………………………………………………………………………………………………………………… 217

17.10. Полезные примеры……………………………………………………………………………………………………….. 219

17.10.1. Получение реального IP-адреса клиента……………………………………………………………… 219

17.10.2. Генерирование сложного пароля………………………………………………………………………….. 220

17.10.3. Рекурсивное удаление каталога……………………………………………………………………………. 220

17.10.4. Отправка файла в браузер……………………………………………………………………………………… 221

17.10.5. Сжатие файла «на лету»………………………………………………………………………………………… 222

Раздел 5. База данных MySQL…………………………………………………….. 225

Глава 18. Установка MySQL на VDS……………………………………………………. 227

18.1. Несколько вводных слов………………………………………………………………………………………………… 227

18.2. Установка сервиса MySQL…………………………………………………………………………………………….. 227

18.3. Настройка MySQL………………………………………………………………………………………………………….. 228

18.4. Создание MySQL-пользователя…………………………………………………………………………………….. 229

18.5. Запуск и останов сервера………………………………………………………………………………………………. 230

Глава 19. Основы SQL…………………………………………………………………………. 231

19.1. Немного истории…………………………………………………………………………………………………………….. 231

19.2. Преимущества SQL…………………………………………………………………………………………………………. 231

19.3. Как выглядят запросы?…………………………………………………………………………………………………… 232

19.4. Что такое база данных?…………………………………………………………………………………………………. 233

19.5. Создание таблиц…………………………………………………………………………………………………………….. 234

19.6. Добавление записей в таблицу……………………………………………………………………………………… 238

19.7. Обновление записей……………………………………………………………………………………………………….. 238

19.8. Выборка записей…………………………………………………………………………………………………………….. 239

19.9. Удаление записей……………………………………………………………………………………………………………. 240

19.10. Встроенные функции……………………………………………………………………………………………………. 241

19.11. Группировка записей. Сложные запросы…………………………………………………………………… 242

19.12. Копирование записей из одной таблицы в другую……………………………………………………. 245

19.13. Кеширование запросов………………………………………………………………………………………………… 245

Глава 20. Функции для работы с MySQL……………………………………………… 248

20.1. Способы работы с базой данных………………………………………………………………………………….. 248

20.2. Расширение mysqli………………………………………………………………………………………………………….. 249

20.2.1. Подключение к серверу MySQL………………………………………………………………………………. 249

20.2.2. Передача запросов серверу……………………………………………………………………………………… 250

20.2.3. Метод real_escape_string()………………………………………………………………………………………. 252

20.3. Расширение PDO……………………………………………………………………………………………………………… 252

20.3.1. Соединение с базой данных…………………………………………………………………………………….. 252

20.3.2. Выполнение запросов и чтение результата……………………………………………………………. 254

20.3.3. Получение данных……………………………………………………………………………………………………. 256

20.3.4. Особенности использования операторов LIKE, LIMIT и IN…………………………………… 257

20.3.5. Имена таблиц и полей при работе с PDO……………………………………………………………….. 258

20.3.6. Запросы вставки и обновление………………………………………………………………………………… 258

Глава 21. Работа с базой данных в Laravel…………………………………………… 260

21.1. Способы работы с базой данных………………………………………………………………………………….. 260

21.2. Сырые (прямые) запросы……………………………………………………………………………………………….. 261

21.3. Конструктор запросов……………………………………………………………………………………………………. 262

21.4. Система Eloquent…………………………………………………………………………………………………………….. 265

Раздел 6. Инструменты для создания
сложных проектов……………………………………………………………………… 269

Глава 22. Разработка собственного шаблонизатора……………………………… 271

22.1. Организация файлов и каталогов проекта……………………………………………………………………. 271

22.2. Выносим параметры в отдельный файл……………………………………………………………………….. 273

22.3. Подключение дополнительных файлов………………………………………………………………………… 274

22.3.1. Инструкции include и require…………………………………………………………………………………… 274

22.3.2. Альтернативный способ подключения сценариев…………………………………………………. 275

22.3.3. Инструкции include_once и require_once……………………………………………………………….. 277

22.4. Шаблоны…………………………………………………………………………………………………………………………. 277

Глава 23. Шаблонизатор Blade……………………………………………………………… 282

23.1. Введение в Blade……………………………………………………………………………………………………………… 282

23.2. Вывод значений скалярных переменных……………………………………………………………………… 283

23.3. Директивы Blade……………………………………………………………………………………………………………… 283

23.3.1. Директива @if……………………………………………………………………………………………………………. 283

23.3.2. Директивы @for, @foreach и @while………………………………………………………………………. 284

23.3.3. Директивы @forelse и @endforelse………………………………………………………………………….. 284

23.4. Включение представлений. Директива @include………………………………………………………… 285

23.5. Директива @csrf……………………………………………………………………………………………………………… 287

Глава 24. Объектно-ориентированное программирование…………………… 288

24.1. Основы ООП…………………………………………………………………………………………………………………….. 288

24.2. Классы и объекты…………………………………………………………………………………………………………… 289

24.3. Конструкторы и деструкторы класса…………………………………………………………………………… 291

24.4. Наследование классов. Полиморфизм………………………………………………………………………….. 293

24.5. Область видимости членов класса………………………………………………………………………………… 294

24.6. Абстрактные классы и методы………………………………………………………………………………………. 295

24.7. Служебное слово final……………………………………………………………………………………………………. 295

24.8. Клонирование объектов…………………………………………………………………………………………………. 296

24.9. Константы — члены класса…………………………………………………………………………………………… 297

24.10. Статические члены класса…………………………………………………………………………………………… 297

24.11. Оператор instanceof……………………………………………………………………………………………………… 298

24.12. Итераторы……………………………………………………………………………………………………………………… 298

24.13. Пространства имен……………………………………………………………………………………………………….. 299

24.13.1. Общая концепция……………………………………………………………………………………………………. 299

24.13.2. Объявление пространства имен…………………………………………………………………………….. 300

24.13.3. Псевдонимы…………………………………………………………………………………………………………….. 301

24.14. Типажи…………………………………………………………………………………………………………………………… 302

24.15. Вызов метода или свойства класса выражением………………………………………………………. 303

24.16. Генераторы……………………………………………………………………………………………………………………. 303

24.17. Атрибуты……………………………………………………………………………………………………………………….. 305

Глава 25. Хранение данных в Cookies и сессиях…………………………………… 306

25.1. Зачем нужны Cookies и сессии?…………………………………………………………………………………….. 306

25.2. Cookies или хранение данных на стороне клиента……………………………………………………… 306

25.2.1. Что такое Cookies?……………………………………………………………………………………………………. 306

25.2.2. Установка Cookies…………………………………………………………………………………………………….. 307

25.2.3. Удаление Cookies……………………………………………………………………………………………………… 308

25.2.4. Организация корзины с помощью Cookies……………………………………………………………… 309

25.3. Механизм сессий…………………………………………………………………………………………………………….. 311

25.3.1. Для чего нужны сессии?…………………………………………………………………………………………… 311

25.3.2. Автоматическое создание сессии……………………………………………………………………………. 312

25.3.3. Хранение данных в сессии……………………………………………………………………………………….. 312

Глава 26. Обработка исключений………………………………………………………… 313

26.1. Введение в обработку исключений……………………………………………………………………………….. 313

26.2. Блок catch………………………………………………………………………………………………………………………… 314

26.3. Блок finally………………………………………………………………………………………………………………………. 315

26.4. Глобальный обработчик исключений………………………………………………………………………….. 317

Глава 27. Контроль версий…………………………………………………………………… 318

27.1. Выбор системы контроля версий…………………………………………………………………………………… 318

27.2. Первоначальная настройка…………………………………………………………………………………………… 319

27.3. Создание нового репозитория или получение его по существующему URL-адресу.. 319

27.4. Операции с файлами. Перемещение и удаление версий файлов репозитория………….. 320

27.5. Сохранение и восстановление незавершенных изменений………………………………………… 321

27.6. Просмотр изменений и создание коммитов (фиксация изменений)…………………………….. 321

27.7. Коллективная работа……………………………………………………………………………………………………… 322

27.8. Просмотр и изучение истории изменений файлов проекта…………………………………………. 322

27.9. Откат изменений. Удаление ошибок и корректировка созданной истории………………. 323

27.10. Синхронизация с удаленным репозиторием.
Регистрация удаленного репозитория и обмен изменениями……………………………………. 323

Глава 28. Тестирование PHP-сценариев……………………………………………….. 324

28.1. Программа работает, но не так, как нам нужно…………………………………………………………… 324

28.2. «Самодельные» точки останова……………………………………………………………………………………. 325

28.3. Система автоматического тестирования……………………………………………………………………… 327

28.4. Директива error_reporting……………………………………………………………………………………………… 330

Часть II.  Практика……………………………………………………………………. 331

Раздел 7. Разработка основных элементов сайта…………… 333

Глава 29. Загрузка файлов на сервер……………………………………………………. 335

29.1. Что нужно знать о загрузке файлов на сервер?……………………………………………………………. 335

29.2. Реализация загрузки файла……………………………………………………………………………………………. 338

29.3. Загрузка нескольких файлов………………………………………………………………………………………….. 340

29.4. Индикатор загрузки файла…………………………………………………………………………………………….. 342

29.4.1. Некоторые теоретические предпосылки………………………………………………………………… 342

29.4.2. Пример практической реализации………………………………………………………………………….. 345

29.5. Проблемы при загрузке файлов…………………………………………………………………………………….. 352

Глава 30. Использование FTP-функций……………………………………………….. 353

30.1. Функции для работы с FTP…………………………………………………………………………………………….. 353

30.2. Примеры использования FTP-функций…………………………………………………………………………. 356

Глава 31. Отправка и прием почты………………………………………………………. 359

31.1. Отправка почты средствами PHP: функция mail()……………………………………………………….. 359

31.1.1. Использование функции…………………………………………………………………………………………… 359

31.1.2. Подробно о настройке сервера……………………………………………………………………………….. 360

31.2. Класс PHPMailer. Разработка сценария автоматической рассылки прайс-листа…… 361

31.3. Получение писем по протоколу POP3…………………………………………………………………………… 365

31.4. Получение писем по протоколу IMAP………………………………………………………………………….. 367

Глава 32. Введение в PEAR………………………………………………………………….. 370

32.1. Серьезные проекты и PEAR……………………………………………………………………………………………. 370

32.2. Пример использования класса DB…………………………………………………………………………………. 372

Глава 33. Импорт и экспорт данных…………………………………………………….. 375

33.1. Импорт прайс-листов из формата CSV в базу данных MySQL………………………………….. 375

33.2. Преобразование файлов Excel в CSV с помощью PHP. Импорт прайсов из Excel…….. 379

33.3. Работа с XML-файлами………………………………………………………………………………………………….. 380

33.3.1. Парсинг XML-файла…………………………………………………………………………………………………. 380

33.3.2. Генерирование XML-файла…………………………………………………………………………………….. 382

Глава 34. Работаем с MP3…………………………………………………………………….. 384

34.1. Формат MP3…………………………………………………………………………………………………………………….. 384

34.2. Библиотека PEAR……………………………………………………………………………………………………………. 385

34.3. Вывод ID3-тегов……………………………………………………………………………………………………………… 386

34.4. Редактирование ID3-тегов……………………………………………………………………………………………… 388

34.5. Удаление тега………………………………………………………………………………………………………………….. 388

Глава 35. Расширение cURL: практические примеры………………………….. 390

35.1. Этот загадочный cURL…………………………………………………………………………………………………… 390

35.2. Авторизация на сайте и загрузка файла после нее……………………………………………………… 392

35.3. Замена функции file_get_contents() с помощью cURL…………………………………………………. 395

35.4. Загрузка файла через FTP………………………………………………………………………………………………. 395

35.5. Проверка доступности сайта…………………………………………………………………………………………. 396

Раздел 8. Введение в Laravel…………………………………………………….. 399

Глава 36. Фреймворк или чистый PHP-код?………………………………………… 401

36.1. Что такое фреймворк?…………………………………………………………………………………………………….. 401

36.2. Обзор популярных PHP-фреймворков…………………………………………………………………………… 402

36.2.1. Zend Framework и The Laminas Project……………………………………………………………………. 402

36.2.2. Laravel………………………………………………………………………………………………………………………… 403

36.2.3. Symfony……………………………………………………………………………………………………………………… 403

36.2.4. Yii………………………………………………………………………………………………………………………………… 403

36.2.5. CodeIgniter…………………………………………………………………………………………………………………. 404

Глава 37. Установка Laravel на VDS с Ubuntu Linux…………………………….. 405

37.1. Выбор места для установки…………………………………………………………………………………………… 405

37.2. Установка необходимого ПО…………………………………………………………………………………………. 405

37.2.1. Установка веб-сервера Apache………………………………………………………………………………… 405

37.2.2. Установка PHP и его расширений…………………………………………………………………………… 407

37.2.3. Установка Laravel…………………………………………………………………………………………………….. 409

Глава 38. Определяем маршруты…………………………………………………………. 412

38.1. Запросы протокола HTTP……………………………………………………………………………………………… 412

38.2. Модель. Представление. Контроллер…………………………………………………………………………… 413

38.3. Простейшие маршруты. Сопоставление маршрута с контроллером………………………… 414

38.4. Параметры в маршрутах……………………………………………………………………………………………….. 415

38.5. Имена маршрутов…………………………………………………………………………………………………………… 416

38.6. Префиксы маршрутов…………………………………………………………………………………………………….. 417

38.7. Маршруты новостной страницы…………………………………………………………………………………… 417

Глава 39. Пишем контроллер……………………………………………………………….. 418

39.1. Создание контроллера…………………………………………………………………………………………………… 418

39.2. Простой метод: List()………………………………………………………………………………………………………. 419

39.3. Методы с параметрами: View() и GetArchiveContent()………………………………………………… 420

39.4. Обработка POST-запроса………………………………………………………………………………………………. 421

Глава 40. Создаем представление…………………………………………………………. 422

40.1. Каталог resources/views………………………………………………………………………………………………….. 422

40.2. Получение данных из контроллера………………………………………………………………………………. 423

40.3. Очистка кеша страниц и кеша представлений…………………………………………………………….. 424

Глава 41. Запрос и ответ………………………………………………………………………. 425

41.1. Работаем с запросами. Класс Request…………………………………………………………………………… 425

41.1.1. Основные методы……………………………………………………………………………………………………… 425

41.1.2. Получение информации о пользователе/запросе………………………………………………….. 426

41.1.3. Работа с файлами……………………………………………………………………………………………………… 427

41.1.4. Собирая все вместе…………………………………………………………………………………………………… 427

41.2. Класс Response………………………………………………………………………………………………………………… 428

Глава 42. Работа с данными…………………………………………………………………. 430

42.1. Файловая система…………………………………………………………………………………………………………… 430

42.1.1. Конфигурация фасада Storage………………………………………………………………………………… 430

42.1.2. Методы фасада Storage……………………………………………………………………………………………. 431

42.1.3. Загрузка файлов на сервер………………………………………………………………………………………. 432

42.1.4. Метод download()……………………………………………………………………………………………………… 433

42.2. Сессии………………………………………………………………………………………………………………………………. 433

42.3. Работа с Cookies……………………………………………………………………………………………………………… 435

Раздел 9. Безопасность сайта………………………………………………….. 437

Глава 43. Как взламываются сайты и как этому помешать?
Основные сведения………………………………………………………………………………. 439

43.1. Основные способы взлома сайта…………………………………………………………………………………… 439

43.2. Два самых распространенных метода взлома…………………………………………………………….. 441

43.2.1. Межсайтовый скриптинг………………………………………………………………………………………….. 441

43.2.2. SQL-инъекции……………………………………………………………………………………………………………. 443

43.3. Остальные методы………………………………………………………………………………………………………….. 446

Глава 44. SSL-сертификат для сайта…………………………………………………….. 447

44.1. Выбор сертификата………………………………………………………………………………………………………… 447

44.1.1. Основные типы сертификатов………………………………………………………………………………….. 447

44.1.2. Какой тип сертификата выбрать?……………………………………………………………………………. 448

44.1.3. Особенности SSL-сертификатов разных типов………………………………………………………. 448

44.2. Где купить SSL-сертификат?………………………………………………………………………………………….. 451

44.3. Установка сертификата на веб-сервер………………………………………………………………………….. 452

44.3.1. Веб-сервер Apache2………………………………………………………………………………………………….. 452

44.3.2. Веб-сервер Ngnix……………………………………………………………………………………………………….. 453

Глава 45. Защита PHP с помощью конфигурационного файла…………….. 454

45.1. Конфигурационный файл php.ini………………………………………………………………………………….. 454

45.2. Отключение потенциально опасных функций……………………………………………………………… 455

45.3. Рекомендованные значения некоторых конфигурационных директив……………………… 455

Раздел 10. Полезные сведения………………………………………………….. 457

Глава 46. Устанавливаем визуальный редактор Summernote……………….. 459

46.1. Знакомство с редактором………………………………………………………………………………………………. 459

46.2. Интеграция Summernote и Laravel………………………………………………………………………………… 459

Глава 47. Работа с MongoDB средствами PHP………………………………………. 462

47.1. Что такое MongoDB?………………………………………………………………………………………………………. 462

47.2. Настройка интерпретатора PHP…………………………………………………………………………………… 463

47.3. Добавление данных в MongoDB……………………………………………………………………………………. 465

47.4. Чтение информации из базы данных…………………………………………………………………………….. 467

47.5. Преобразование объекта в массив………………………………………………………………………………… 469

Приложения…………………………………………………………………………………… 473

Приложение 1. Шаблоны проектирования…………………………………………… 475

П1.1. Введение в шаблоны проектирования………………………………………………………………………….. 475

П1.2. Шаблон «Стратегия»……………………………………………………………………………………………………… 476

П1.3. Шаблон «Адаптер»………………………………………………………………………………………………………… 477

П1.4. Шаблон «Фабрика»………………………………………………………………………………………………………… 478

П1.5. Шаблон «Одиночка»………………………………………………………………………………………………………. 479

Приложение 2. Профайлинг…………………………………………………………………. 481

П2.1. Что такое профайлинг?………………………………………………………………………………………………….. 481

П2.2. Типы профайлеров…………………………………………………………………………………………………………. 481

П2.3. Профайлер Xdebug…………………………………………………………………………………………………………. 482

П2.4. XHProf……………………………………………………………………………………………………………………………… 482

Приложение 3. Виртуальная машина HHVM……………………………………….. 485

П3.1. Что такое HHVM?………………………………………………………………………………………………………….. 485

П3.2. Подойдет ли HHVM именно для вас?…………………………………………………………………………… 486

П3.3. Установка HHVM…………………………………………………………………………………………………………… 487

П3.4. Настройка HHVM………………………………………………………………………………………………………….. 487

П3.5. Язык Hack……………………………………………………………………………………………………………………….. 489

Приложение 4. Описание электронного архива……………………………………. 490

Предметный указатель…………………………………………………………………………. 492

Денис_Николавич_Колисниченко

Колисниченко Денис Николаевич, инженер-программист и системный администратор. Имеет богатый опыт эксплуатации и создания локальных сетей от домашних до уровня предприятия, разработки приложений для различных платформ. Автор более 50 книг компьютерной тематики, в том числе “Microsoft Windows 10. Первое знакомство”, “Самоучитель Microsoft Windows 8”, “Программирование для Android 5. Самоучитель”, “PHP и MySQL. Разработка веб-приложений”, “Планшет и смартфон на базе Android для ваших родителей”, “”Linux. От новичка к профессионалу” и др.

Опубликовано

Представляем 5-е издание книги “PHP глазами хакера”

PHP глазами хакера. 5-е издание

В книге рассмотрены вопросы безопасности и оптимизации сценариев на языке PHP. Большое внимание уделено описанию типичных ошибок программистов, благодаря которым, хакеры проникают на сервер, а также представлены методы и приведены практические рекомендации противостояния внешним атакам. Показаны реальные примеры взлома Web-сайтов и рекомендации, которые помогут создавать более защищенные сайты. В 5-м издании переписаны примеры с учетом современных возможностей PHP 8 и добавлена глава по безопасности во фреймворках Laravel и Symfony.

Для Web-программистов, администраторов и специалистов по безопасности

Создание безопасных Web-приложений на PHP

Язык PHP уже давно является самым популярным языком программирования Web-приложений. В настоящее время на этом языке создается большинство сайтов, и их количество ежедневно растет. С другой стороны, хакерское движение также набирает обороты, и количество взломов и попыток взлома Web-сайтов также увеличивается. Открытость информации приводит к тому, что приходится больше внимания уделять безопасности сайта. Сценарии для серверов пишут люди, а им свойственно ошибаться, и хакеры пользуются этим.

В данной книге описываются основные методы хакеров, используемые для взлома Web-сценариев, основные ошибки программистов и методы решения проблем безопасности. Надеемся, что эта книга и многочисленные примеры позволят вам взглянуть на программирование Web-сайтов глазами взломщика и помогут создавать безопасные сценарии на языке PHP. Кроме того, рассмотрены вопросы оптимизации Web-сценариев. Чем быстрее сервер выполнит сценарий, тем быстрее пользователь увидит ответ, а сервер сможет обработать больше запросов.

В 5-м издании переписаны примеры с учетом современных возможностей PHP 8 и добавлена глава по безопасности во фреймворках Laravel и Symfony.

Книгу “PHP глазами хакера. 5-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие к пятому изданию……………………………………………………………….. 7

Предисловие…………………………………………………………………………………………….. 8

Об авторе……………………………………………………………………………………………………………………………………. 10

Благодарности…………………………………………………………………………………………………………………………… 10

Глава 1. Введение в PHP………………………………………………………………………… 11

1.1. Что такое PHP?……………………………………………………………………………………………………………………. 11

1.2. Создание сайта для Apache……………………………………………………………………………………………….. 12

1.3. Как работает PHP?……………………………………………………………………………………………………………… 15

1.4. Чего ждать дальше?……………………………………………………………………………………………………………. 17

Глава 2. Основы PHP…………………………………………………………………………….. 18

2.1. PHP-инструкции………………………………………………………………………………………………………………….. 18

2.2. Подключение файлов………………………………………………………………………………………………………….. 23

2.3. Вывод данных……………………………………………………………………………………………………………………… 27

2.4. Правила кодирования…………………………………………………………………………………………………………. 28

2.4.1. Комментарии…………………………………………………………………………………………………………………. 29

2.4.2. Чувствительность………………………………………………………………………………………………………….. 30

2.4.3. Переменные……………………………………………………………………………………………………………………. 32

2.4.4. Основные операции………………………………………………………………………………………………………. 35

2.4.5. Область видимости……………………………………………………………………………………………………….. 36

2.4.6. Константы……………………………………………………………………………………………………………………… 38

2.5. Управление выполнением программы………………………………………………………………………………. 39

2.6. Циклы…………………………………………………………………………………………………………………………………… 49

2.6.1. Цикл for………………………………………………………………………………………………………………………….. 50

2.6.2. Цикл while………………………………………………………………………………………………………………………. 52

2.6.3. Бесконечные циклы………………………………………………………………………………………………………. 52

2.6.4. Управление циклами…………………………………………………………………………………………………….. 53

2.7. Прерывание работы программы……………………………………………………………………………………….. 55

2.8. Функции……………………………………………………………………………………………………………………………….. 56

2.9. Классы…………………………………………………………………………………………………………………………………. 63

2.10. Массивы…………………………………………………………………………………………………………………………….. 66

2.11. Обработка ошибок……………………………………………………………………………………………………………. 69

2.12. Передача данных……………………………………………………………………………………………………………… 70

2.12.1. Переменные окружения………………………………………………………………………………………………. 71

2.12.2. Передача параметров…………………………………………………………………………………………………. 72

2.12.3. Метод GET…………………………………………………………………………………………………………………… 76

2.12.4. Метод POST…………………………………………………………………………………………………………………. 78

2.12.5. Скрытые параметры…………………………………………………………………………………………………… 80

2.13. Хранение параметров посетителя…………………………………………………………………………………… 81

2.13.1. Сеансы…………………………………………………………………………………………………………………………. 83

2.13.2. Cookies…………………………………………………………………………………………………………………………. 87

2.13.3. Безопасность cookie……………………………………………………………………………………………………. 91

2.14. Файлы………………………………………………………………………………………………………………………………… 93

2.14.1. Открытие файла………………………………………………………………………………………………………….. 94

2.14.2. Закрытие файла…………………………………………………………………………………………………………… 95

2.14.3. Чтение данных…………………………………………………………………………………………………………….. 95

2.14.4. Дополнительные функции чтения……………………………………………………………………………… 98

2.14.5. Запись данных…………………………………………………………………………………………………………….. 98

2.14.6. Позиционирование в файле………………………………………………………………………………………… 99

2.14.7. Свойства файлов……………………………………………………………………………………………………….. 100

Глава 3. Безопасность………………………………………………………………………….. 102

3.1. Комплексная защита………………………………………………………………………………………………………… 103

3.2. Права доступа…………………………………………………………………………………………………………………… 105

3.3. Как взламывают сценарии?……………………………………………………………………………………………… 105

3.4. Основы защиты сценариев……………………………………………………………………………………………….. 107

3.4.1. Реальный пример ошибки…………………………………………………………………………………………… 108

3.4.2. Рекомендации по защите……………………………………………………………………………………………. 111

3.4.3. Тюнинг PHP…………………………………………………………………………………………………………………. 112

3.5. Проверка корректности данных………………………………………………………………………………………. 113

3.6. Регулярные выражения…………………………………………………………………………………………………….. 118

3.6.1. Функции регулярных выражений PHP………………………………………………………………………. 119

Функция ereg()…………………………………………………………………………………………………………….. 119

Функция eregi()……………………………………………………………………………………………………………. 119

Функция ereg_replace()………………………………………………………………………………………………. 119

Функция eregi_replace()……………………………………………………………………………………………… 120

Функция split()…………………………………………………………………………………………………………….. 120

Функция spliti()……………………………………………………………………………………………………………. 120

3.6.2. Использование регулярных выражений PHP……………………………………………………………. 120

3.6.3. Использование регулярных выражений Perl…………………………………………………………….. 125

3.6.4. Функции регулярных выражений Perl……………………………………………………………………….. 127

Функция preg_match()………………………………………………………………………………………………… 127

Функция preg_match_all()………………………………………………………………………………………….. 128

Функция preg_split()…………………………………………………………………………………………………… 129

3.6.5. Проверка e-mail…………………………………………………………………………………………………………… 129

3.6.6. Советы по использованию регулярных выражений………………………………………………… 129

3.7. Что и как фильтровать?…………………………………………………………………………………………………….. 130

3.8. Базы данных……………………………………………………………………………………………………………………… 134

3.8.1. Основы баз данных…………………………………………………………………………………………………….. 134

3.8.2. Атака SQL Injection…………………………………………………………………………………………………….. 136

3.8.3. Реальное экранирование……………………………………………………………………………………………. 145

3.8.4. Параметризированные запросы………………………………………………………………………………… 146

3.8.5. Работа с файлами……………………………………………………………………………………………………….. 151

3.8.6. Практика работы с базами данных…………………………………………………………………………… 151

3.8.7. Проверка URL……………………………………………………………………………………………………………… 152

3.9. Работа с файлами……………………………………………………………………………………………………………… 153

3.10. Криптография………………………………………………………………………………………………………………….. 154

3.10.1. Симметричное шифрование…………………………………………………………………………………….. 154

3.10.2. Асимметричное шифрование…………………………………………………………………………………… 155

3.10.3. Необратимое шифрование……………………………………………………………………………………….. 156

3.10.4. Практика использования шифрования……………………………………………………………………. 158

3.11. Атака Cross-Site Scripting………………………………………………………………………………………………… 164

3.12. Флуд…………………………………………………………………………………………………………………………………. 169

3.12.1. Защита от флуда сообщениями……………………………………………………………………………….. 169

3.12.2. Защита от накрутки голосований……………………………………………………………………………. 170

3.13. Изменения формы и атака CSRF……………………………………………………………………………………. 172

3.14. Сопровождение журнала……………………………………………………………………………………………….. 175

3.15. Защита от неправомерных изменений………………………………………………………………………….. 176

3.16. Панель администратора………………………………………………………………………………………………… 178

3.17. Опасная переменная $REQUEST_URI…………………………………………………………………………… 179

3.18. CAPTCHA………………………………………………………………………………………………………………………… 180

3.19. Сериализация………………………………………………………………………………………………………………….. 185

Глава 4. Оптимизация………………………………………………………………………….. 188

4.1. Алгоритм……………………………………………………………………………………………………………………………. 188

4.2. Слабые места…………………………………………………………………………………………………………………….. 190

4.3. Базы данных……………………………………………………………………………………………………………………… 191

4.3.1. Оптимизация запросов……………………………………………………………………………………………….. 192

4.3.2. Оптимизация СУБД…………………………………………………………………………………………………….. 196

4.3.3. Выборка необходимых данных…………………………………………………………………………………. 198

4.3.4. Изучайте систему………………………………………………………………………………………………………… 200

4.4. Оптимизация PHP……………………………………………………………………………………………………………… 202

4.4.1. Кеширование вывода………………………………………………………………………………………………….. 202

4.4.2. Кеширование страниц………………………………………………………………………………………………… 203

4.5. Оптимизация или безопасность?……………………………………………………………………………………… 205

4.6. Переход на PHP 8……………………………………………………………………………………………………………… 207

Глава 5. Примеры работы с PHP………………………………………………………….. 208

5.1. Загрузка файлов на сервер………………………………………………………………………………………………. 208

5.2. Проверка корректности файла………………………………………………………………………………………… 213

5.3. Запретная зона………………………………………………………………………………………………………………….. 216

5.3.1. Аутентификация………………………………………………………………………………………………………….. 216

5.3.2. Защита сценариев правами доступа сервера Apache……………………………………………… 223

5.4. Работа с сетью…………………………………………………………………………………………………………………… 224

5.4.1. Работа с DNS……………………………………………………………………………………………………………….. 225

5.4.2. Протоколы…………………………………………………………………………………………………………………… 225

5.4.3. Сокеты………………………………………………………………………………………………………………………….. 226

Инициализация…………………………………………………………………………………………………………… 227

Серверные функции……………………………………………………………………………………………………. 227

Клиентские функции…………………………………………………………………………………………………… 228

Обмен данными…………………………………………………………………………………………………………… 229

Управление сокетами…………………………………………………………………………………………………. 230

5.5. Сканер портов…………………………………………………………………………………………………………………… 231

5.6. FTP-клиент низкого уровня………………………………………………………………………………………………. 234

5.7. Работа с электронной почтой………………………………………………………………………………………….. 237

5.7.1. Протокол SMTP…………………………………………………………………………………………………………… 237

5.7.2. Функция mail()……………………………………………………………………………………………………………… 239

5.7.3. Соединение с SMTP-сервером……………………………………………………………………………………. 241

5.7.4. Безопасность электронной почтовой службы………………………………………………………….. 242

5.7.5. Производительность отправки почты……………………………………………………………………….. 242

5.8. Защита ссылок………………………………………………………………………………………………………………….. 244

5.9. PHP в руках хакера…………………………………………………………………………………………………………… 245

5.10. Уловки……………………………………………………………………………………………………………………………… 247

5.10.1. Переадресация………………………………………………………………………………………………………….. 247

5.10.2. Всплывающие окна…………………………………………………………………………………………………… 249

5.10.3. Тег <iframe>………………………………………………………………………………………………………………. 250

5.10.4. Стой, не уходи!………………………………………………………………………………………………………….. 251

5.11. Как убрать теги?……………………………………………………………………………………………………………… 252

Глава 6. Фреймворки PHP……………………………………………………………………. 254

6.1. Знакомство с Laravel………………………………………………………………………………………………………… 254

6.2. Быстрый старт…………………………………………………………………………………………………………………… 256

6.3. Уязвимость CSRF………………………………………………………………………………………………………………. 259

6.4. Базы данных……………………………………………………………………………………………………………………… 261

6.4.1. Добавление данных……………………………………………………………………………………………………. 263

6.4.2. Чтение данных…………………………………………………………………………………………………………….. 264

6.4.3. Флуд при добавлении данных…………………………………………………………………………………… 266

6.4.4. Работа с базами данных в Symfony………………………………………………………………………….. 266

6.5. Фреймворки и защита от XSS…………………………………………………………………………………………… 267

6.5.1. XSS в Symfony…………………………………………………………………………………………………………….. 269

Литература…………………………………………………………………………………………… 270

Описание файлового архива, сопровождающего книгу……………………….. 270

Предметный указатель…………………………………………………………………………. 271

Фленов Михаил

Флёнов Михаил, профессиональный программист. Работал в журнале «Хакер», в котором несколько лет вел рубрики «Hack-FAQ» и «Кодинг» для программистов, печатался в журналах «Игромания» и «Chip-Россия». Автор бестселлеров «Библия Delphi», «Программирование в Delphi глазами хакера», «Программирование на C++ глазами хакера», «Компьютер глазами хакера» и др. Некоторые книги переведены на иностранные языки и изданы в США, Канаде, Польше и других странах.

Опубликовано

Представляем новинку: “PHP в подлиннике”

PHP 8

В обновленной серии “В подлиннике” вышла новая книга Дмитрия Котерова и Игоря Симдянова “PHP 8”.

Книга предоставляет детальное и полное изложение языка PHP 8 от простого к сложному. Ее можно использовать как для изучения языка с нуля, так и для структурирования знаний, изучения тонких моментов синтаксиса и новых возможностей последней версии. Описываются все значимые новвоведения. Рассматриваются новые типы, атрибуты, перечисления, именованные аргументы, сопоставления, объединенные типы, новые операторы ??= и ?-> и много другое. Основной упор в книге делается на объектно-ориентированные возможности языка, поэтому классы и объекты рассматриваются практически с первых глав. Приведено описание синтаксиса PHP, а тажке инструментов для работы с массивами, файлами, СУБД PostgreSQL, Redis, регулярными выражениями, графическими примитивами, сессиями и т. д.

По сравнению с предыдущей книгой авторов  “PHP 7 ” добавлены 23 новые главы, а остальные обновлены или переработаны.

На сайте издательства находятся  исходные коды всех листингов. В книге описаны:

  • Нововведения с PHP 7.1 по PHP 8.1
  • Объектно-ориентированное программирование
  • Шаблоны проектирования
  • Генераторы, итераторы, перечисления и атрибуты
  • Приемы работы с PostgreSQL и Redis
  • Стандарты PSR
Котеров Дмитрий Владимирович

Котеров Дмитрий Владимирович, системный программист, веб-разработчик с двадцатилетним стажем работы в области веб-программирования, администрирования Linux и Windows, ведущий разработчик хорошо известных в русскоязычном Интернете проектов Денвер (denwer.ru) и Orphus (orphus.ru). В повседневной практике использует языки PHP, JavaScript, Perl, C++, Java. Автор бестселлеров «Самоучитель PHP 4», «PHP 7» и более 50 статей, касающихся веб-программирования.

Симдянов Игорь Вячеславович

Симдянов Игорь Вячеславович, разработчик с двадцатилетним стажем в веб-программировании, ведущий разработчик российской финансово-технологической компании «Баланс-Платформа». Специалист по веб-разработке на PHP, Ruby, JavaScript, SQL. Автор двух десятков книг издательства БХВ по веб-программированию и базам данных, в том числе «PHP 7», «Самоучитель PHP 7», «Самоучитель Ruby».

 

Предисловие…………………………………………………………………………………………… 23

Для кого написана эта книга?…………………………………………………………………………………………………… 23

Исходные коды…………………………………………………………………………………………………………………………… 24

Четвертое издание……………………………………………………………………………………………………………………… 24

Общая структура книги…………………………………………………………………………………………………………….. 26

Часть I…………………………………………………………………………………………………………………………………. 26

Часть II………………………………………………………………………………………………………………………………… 26

Часть III………………………………………………………………………………………………………………………………. 26

Часть IV………………………………………………………………………………………………………………………………. 27

Часть V………………………………………………………………………………………………………………………………… 27

Часть VI………………………………………………………………………………………………………………………………. 27

Часть VII……………………………………………………………………………………………………………………………… 27

Листинги……………………………………………………………………………………………………………………………… 28

Предметный указатель………………………………………………………………………………………………………. 28

Благодарности от Дмитрия Котерова……………………………………………………………………………………… 28

Благодарности от Игоря Симдянова……………………………………………………………………………………….. 29

Часть I. Основы веб-разработки……………………………………………….. 31

Глава 1. Принципы работы Интернета………………………………………………….. 33

Протоколы передачи данных…………………………………………………………………………………………………… 34

Семейство TCP/IP………………………………………………………………………………………………………………………. 36

Протокол IP………………………………………………………………………………………………………………………………… 37

Версии протокола IP…………………………………………………………………………………………………………………. 38

Доменное имя……………………………………………………………………………………………………………………………… 39

Порт…………………………………………………………………………………………………………………………………………….. 41

Резюме…………………………………………………………………………………………………………………………………………. 42

Глава 2. Протокол HTTP………………………………………………………………………… 43

Зачем нужен протокол HTTP?………………………………………………………………………………………………….. 44

Ресурсы……………………………………………………………………………………………………………………………………….. 44

Параметры URL…………………………………………………………………………………………………………………………. 46

Методы……………………………………………………………………………………………………………………………………….. 47

HTTP-сообщения……………………………………………………………………………………………………………………….. 47

HTTP-заголовки…………………………………………………………………………………………………………………………. 50

Content-Type……………………………………………………………………………………………………………………….. 52

Host………………………………………………………………………………………………………………………………………. 52

User-Agent……………………………………………………………………………………………………………………………. 52

Referer………………………………………………………………………………………………………………………………….. 52

Content-length…………………………………………………………………………………………………………………….. 53

Cookie………………………………………………………………………………………………………………………………….. 53

Accept…………………………………………………………………………………………………………………………………… 53

HTTP-коды ответов……………………………………………………………………………………………………………………. 53

Утилита curl……………………………………………………………………………………………………………………………….. 54

Резюме…………………………………………………………………………………………………………………………………………. 57

Глава 3. Установка PHP…………………………………………………………………………. 58

Установка PHP в Windows…………………………………………………………………………………………………………. 58

Переменная окружения PATH…………………………………………………………………………………………………… 59

Установка PHP в macos…………………………………………………………………………………………………………….. 61

Установка PHP в Linux (Ubuntu)………………………………………………………………………………………………. 62

Проверочный скрипт…………………………………………………………………………………………………………………. 62

Ошибки в скриптах…………………………………………………………………………………………………………………….. 63

Запуск встроенного сервера……………………………………………………………………………………………………… 64

Файл hosts…………………………………………………………………………………………………………………………………… 65

Вещание вовне……………………………………………………………………………………………………………………………. 65

Конфигурирование PHP…………………………………………………………………………………………………………….. 66

Интерактивный PHP…………………………………………………………………………………………………………………… 66

Документация…………………………………………………………………………………………………………………………….. 67

Проверка стиля кода………………………………………………………………………………………………………………….. 67

Docker………………………………………………………………………………………………………………………………………….. 69

Резюме…………………………………………………………………………………………………………………………………………. 73

Часть II. Основы языка PHP…………………………………………………………. 75

Глава 4. Характеристика языка PHP……………………………………………………… 77

Что умеет PHP?…………………………………………………………………………………………………………………………… 77

Веб-программирование до PHP………………………………………………………………………………………………… 77

История PHP……………………………………………………………………………………………………………………………….. 79

Что нового в PHP 8?…………………………………………………………………………………………………………………… 82

Нововведения PHP 7.1……………………………………………………………………………………………………….. 82

Нововведения PHP 7.2……………………………………………………………………………………………………….. 83

Нововведения PHP 7.3……………………………………………………………………………………………………….. 83

Нововведения PHP 7.4……………………………………………………………………………………………………….. 83

Нововведения PHP 8.0……………………………………………………………………………………………………….. 83

Нововведения PHP 8.1……………………………………………………………………………………………………….. 84

Где можно узнать об изменениях в синтаксисе?……………………………………………………………… 84

Пример PHP-программы……………………………………………………………………………………………………………. 84

Начальные и конечные теги……………………………………………………………………………………………………… 85

Использование точки с запятой………………………………………………………………………………………………… 87

Фигурные скобки……………………………………………………………………………………………………………………….. 88

Комментарии……………………………………………………………………………………………………………………………… 89

Включение PHP-файла………………………………………………………………………………………………………………. 91

Элементы языка…………………………………………………………………………………………………………………………. 92

Резюме…………………………………………………………………………………………………………………………………………. 92

Глава 5. Переменные и типы данных…………………………………………………….. 93

Переменные………………………………………………………………………………………………………………………………… 94

Типы переменных………………………………………………………………………………………………………………………. 97

Целые числа: integer……………………………………………………………………………………………………………….. 100

Вещественные числа: double………………………………………………………………………………………………….. 102

Логический тип: boolean…………………………………………………………………………………………………………. 104

Строки: string…………………………………………………………………………………………………………………………… 105

Кавычки…………………………………………………………………………………………………………………………….. 105

Оператор <<<……………………………………………………………………………………………………………………. 108

Устройство строки…………………………………………………………………………………………………………… 109

Массивы: array………………………………………………………………………………………………………………………… 110

Объект: object…………………………………………………………………………………………………………………………… 111

Ресурс: resource……………………………………………………………………………………………………………………….. 111

Специальный тип null……………………………………………………………………………………………………………… 112

Действия с переменными…………………………………………………………………………………………………………. 112

Присвоение значения……………………………………………………………………………………………………….. 112

Уничтожение…………………………………………………………………………………………………………………….. 113

Проверка существования………………………………………………………………………………………………… 113

Определение типа переменной……………………………………………………………………………………………….. 115

Некоторые условные обозначения………………………………………………………………………………………… 116

Неявное приведение типа……………………………………………………………………………………………………….. 117

Явное приведение типа……………………………………………………………………………………………………………. 118

Ссылочные переменные………………………………………………………………………………………………………….. 121

Жесткие ссылки………………………………………………………………………………………………………………… 121

«Сбор мусора»………………………………………………………………………………………………………………….. 122

Символические ссылки……………………………………………………………………………………………………. 123

Ссылки на объекты………………………………………………………………………………………………………….. 124

Отладочные функции………………………………………………………………………………………………………………. 125

Резюме………………………………………………………………………………………………………………………………………. 128

Глава 6. Классы и объекты………………………………………………………………….. 129

Объектно-ориентированное программирование………………………………………………………………….. 129

Коды………………………………………………………………………………………………………………………………….. 129

Ассемблер…………………………………………………………………………………………………………………………. 131

Язык высокого уровня……………………………………………………………………………………………………… 132

Специализированный язык программирования……………………………………………………………. 132

Объектно-ориентированные языки программирования……………………………………………….. 133

Зачем нужны классы?……………………………………………………………………………………………………………… 133

Использование готовых классов…………………………………………………………………………………………….. 134

Создание классов…………………………………………………………………………………………………………………….. 136

Разделение классов и остального кода………………………………………………………………………………….. 138

Создание объекта…………………………………………………………………………………………………………………….. 139

Область видимости переменных класса………………………………………………………………………………… 141

Типы переменных класса………………………………………………………………………………………………………… 141

Спецификаторы доступа…………………………………………………………………………………………………………. 145

Свойства «только для чтения»………………………………………………………………………………………………… 146

Дамп объекта……………………………………………………………………………………………………………………………. 149

Статические переменные класса……………………………………………………………………………………………. 150

Ссылки на переменные……………………………………………………………………………………………………………. 151

Клонирование объектов………………………………………………………………………………………………………….. 152

Резюме………………………………………………………………………………………………………………………………………. 153

Глава 7. Константы……………………………………………………………………………… 154

Предопределенные константы……………………………………………………………………………………………….. 154

Создание константы………………………………………………………………………………………………………………… 156

Проверка существования константы……………………………………………………………………………………… 157

Константы с динамическими именами………………………………………………………………………………….. 157

Абсолютный и относительный пути к файлу………………………………………………………………………… 158

Константы класса……………………………………………………………………………………………………………………. 160

Резюме………………………………………………………………………………………………………………………………………. 161

Глава 8. Операторы……………………………………………………………………………… 162

Оператор «точка с запятой»……………………………………………………………………………………………………. 162

Оператор «точка»…………………………………………………………………………………………………………………….. 163

Оператор «запятая»…………………………………………………………………………………………………………………. 166

Арифметические операторы…………………………………………………………………………………………………… 167

Битовые операторы…………………………………………………………………………………………………………………. 170

Операторы сравнения……………………………………………………………………………………………………………… 176

Особенности операторов == и !=…………………………………………………………………………………… 177

Сравнение вещественных чисел……………………………………………………………………………………… 178

Сравнение строк………………………………………………………………………………………………………………. 179

Сравнение составных переменных………………………………………………………………………………… 180

Оператор эквивалентности……………………………………………………………………………………………… 181

Приоритет операторов……………………………………………………………………………………………………………. 183

Резюме………………………………………………………………………………………………………………………………………. 184

Глава 9. Условия………………………………………………………………………………….. 185

Зачем в программе нужно ветвление?……………………………………………………………………………………. 185

Конструкция if………………………………………………………………………………………………………………………….. 186

Логические операторы……………………………………………………………………………………………………………. 189

Логическое И: оператор &&……………………………………………………………………………………………. 190

Логическое ИЛИ: оператор ||………………………………………………………………………………………….. 190

Логическое отрицание: оператор !…………………………………………………………………………………. 194

Условный оператор x ? y : z…………………………………………………………………………………………………….. 194

Оператор ??……………………………………………………………………………………………………………………………… 196

Конструкция switch………………………………………………………………………………………………………………….. 197

Конструкция match………………………………………………………………………………………………………………….. 201

Конструкция goto…………………………………………………………………………………………………………………….. 204

Резюме………………………………………………………………………………………………………………………………………. 205

Глава 10. Циклы………………………………………………………………………………….. 206

Зачем нужны циклы?……………………………………………………………………………………………………………….. 206

Способы организации циклов в PHP……………………………………………………………………………………… 207

Цикл while…………………………………………………………………………………………………………………………………. 207

Вложенные циклы……………………………………………………………………………………………………………………. 209

Досрочное прекращение циклов…………………………………………………………………………………………….. 212

Цикл do … while………………………………………………………………………………………………………………………… 215

Цикл for…………………………………………………………………………………………………………………………………….. 215

Резюме………………………………………………………………………………………………………………………………………. 219

Глава 11. Ассоциативные массивы………………………………………………………. 220

Создание массива……………………………………………………………………………………………………………………. 220

Ассоциативные и индексные массивы…………………………………………………………………………………… 225

Многомерные массивы……………………………………………………………………………………………………………. 227

Интерполяция элементов массива в строки…………………………………………………………………………… 228

Конструкция list()…………………………………………………………………………………………………………………….. 229

Обход массива…………………………………………………………………………………………………………………………. 230

Цикл foreach……………………………………………………………………………………………………………………………… 230

Сечения массива………………………………………………………………………………………………………………………. 233

Слияние массивов……………………………………………………………………………………………………………………. 235

Сравнение массивов………………………………………………………………………………………………………………… 236

Проверка существования элементов массива……………………………………………………………………….. 240

Строки как массивы…………………………………………………………………………………………………………………. 243

Количество элементов в массиве……………………………………………………………………………………………. 243

Сумма элементов массива………………………………………………………………………………………………………. 245

Случайный элемент массива………………………………………………………………………………………………….. 245

Сортировка массива………………………………………………………………………………………………………………… 247

Добавление/удаление элементов…………………………………………………………………………………………… 254

Работа с ключами массива……………………………………………………………………………………………………… 257

Резюме………………………………………………………………………………………………………………………………………. 260

Глава 12. Функции и области видимости……………………………………………… 261

Зачем нужны функции?…………………………………………………………………………………………………………… 261

Создание функции……………………………………………………………………………………………………………………. 263

Ключевое слово return…………………………………………………………………………………………………….. 264

Объявление и вызов функции………………………………………………………………………………………….. 266

Параметры и аргументы…………………………………………………………………………………………………………. 267

Параметры по умолчанию………………………………………………………………………………………………. 270

Переменное число параметров……………………………………………………………………………………….. 272

Именованные аргументы…………………………………………………………………………………………………. 274

Типы аргументов и возвращаемого значения……………………………………………………………………….. 275

Передача параметров по ссылке……………………………………………………………………………………………. 278

Локальные переменные…………………………………………………………………………………………………………… 278

Глобальные переменные…………………………………………………………………………………………………………. 279

Массив $GLOBALS…………………………………………………………………………………………………………… 280

Как работает инструкция global?…………………………………………………………………………………… 282

Статические переменные………………………………………………………………………………………………………… 283

Резюме………………………………………………………………………………………………………………………………………. 284

Глава 13. Сложные функции………………………………………………………………… 285

Рекурсивные функции……………………………………………………………………………………………………………… 285

Вложенные функции………………………………………………………………………………………………………………… 288

Переменные функции………………………………………………………………………………………………………………. 289

Функции обратного вызова…………………………………………………………………………………………………….. 291

Анонимные функции………………………………………………………………………………………………………………… 300

Замыкания………………………………………………………………………………………………………………………………… 303

Стрелочные функции………………………………………………………………………………………………………………. 304

Резюме………………………………………………………………………………………………………………………………………. 305

Глава 14. Методы класса……………………………………………………………………… 306

Создание метода……………………………………………………………………………………………………………………… 306

Обращение к методам объекта……………………………………………………………………………………………….. 307

Проверка существования метода…………………………………………………………………………………………… 309

Специальные методы………………………………………………………………………………………………………………. 313

Конструктор __construct()………………………………………………………………………………………………………. 314

Параметры конструктора……………………………………………………………………………………………………….. 316

Деструктор __destruct()…………………………………………………………………………………………………………… 319

Методы-аксессоры………………………………………………………………………………………………………………….. 320

Статические методы………………………………………………………………………………………………………………… 325

Класс — self, объект — $this…………………………………………………………………………………………………… 325

Динамические методы…………………………………………………………………………………………………………….. 328

Интерполяция объекта…………………………………………………………………………………………………………….. 331

Тип callable………………………………………………………………………………………………………………………………. 332

Оператор ?->……………………………………………………………………………………………………………………………. 335

Резюме………………………………………………………………………………………………………………………………………. 337

Глава 15. Генераторы…………………………………………………………………………… 338

Отложенные вычисления………………………………………………………………………………………………………… 338

Манипуляция массивами………………………………………………………………………………………………………… 341

Делегирование генераторов……………………………………………………………………………………………………. 343

Экономия ресурсов………………………………………………………………………………………………………………….. 344

Использование ключей……………………………………………………………………………………………………………. 345

Использование ссылки…………………………………………………………………………………………………………….. 346

Связь генераторов c объектами………………………………………………………………………………………………. 347

Резюме………………………………………………………………………………………………………………………………………. 349

Часть III. Обработка текста и язык разметки HTML…………. 351

Глава 16. Строковые функции……………………………………………………………… 353

Кодировки………………………………………………………………………………………………………………………………… 353

Строки как массивы…………………………………………………………………………………………………………………. 357

UTF-8: расширение mbstring…………………………………………………………………………………………………… 358

Поиск в строке………………………………………………………………………………………………………………………….. 360

Отрезание пробелов………………………………………………………………………………………………………………… 361

Замена в тексте………………………………………………………………………………………………………………………… 363

Установка локали (локальных настроек)……………………………………………………………………………… 365

Работа с HTML-кодом…………………………………………………………………………………………………………….. 367

Функции форматных преобразований…………………………………………………………………………………… 373

Объединение и разбиение строк…………………………………………………………………………………………….. 376

Сериализация объектов и массивов……………………………………………………………………………………….. 377

JSON-формат…………………………………………………………………………………………………………………………….. 378

Резюме………………………………………………………………………………………………………………………………………. 381

Глава 17. Язык разметки HTML…………………………………………………………… 382

Зачем нужен HTML?……………………………………………………………………………………………………………….. 382

HTML-код страницы……………………………………………………………………………………………………………….. 383

Устройство HTML-страницы…………………………………………………………………………………………………. 385

Параграф: тег <p>…………………………………………………………………………………………………………… 388

Гиперссылки: тег <a>……………………………………………………………………………………………………… 391

Комментарии……………………………………………………………………………………………………………………. 391

Заголовки: теги <h1><h6>………………………………………………………………………………………….. 392

Блоки: тег <div>………………………………………………………………………………………………………………. 392

Списки: теги <ul>, <ol> и <li>…………………………………………………………………………………………… 394

HTML на уровне текста…………………………………………………………………………………………………… 395

Изображения: тег <img>…………………………………………………………………………………………………. 397

Каскадные таблицы стилей……………………………………………………………………………………………………. 399

Резюме………………………………………………………………………………………………………………………………………. 402

Глава 18. Работа с данными формы……………………………………………………… 403

Передача параметров методом GET……………………………………………………………………………………… 403

HTML-форма и ее обработчик……………………………………………………………………………………………….. 406

Текстовое поле…………………………………………………………………………………………………………………………. 411

Поле для приема пароля…………………………………………………………………………………………………………. 411

Текстовая область……………………………………………………………………………………………………………………. 412

Скрытое поле……………………………………………………………………………………………………………………………. 414

Флажок……………………………………………………………………………………………………………………………………… 415

Список………………………………………………………………………………………………………………………………………. 417

Переключатель………………………………………………………………………………………………………………………… 419

Переадресация…………………………………………………………………………………………………………………………. 420

Резюме………………………………………………………………………………………………………………………………………. 423

Глава 19. Загрузка файлов на сервер……………………………………………………. 424

Multipart-формы………………………………………………………………………………………………………………………. 424

Тег выбора файла…………………………………………………………………………………………………………………….. 425

Закачка файлов и безопасность……………………………………………………………………………………………… 425

Поддержка закачки в PHP……………………………………………………………………………………………………….. 426

Простые имена полей закачки………………………………………………………………………………………… 426

Получение закачанного файла……………………………………………………………………………………….. 428

Пример: фотоальбом……………………………………………………………………………………………………….. 429

Сложные имена полей……………………………………………………………………………………………………… 432

Резюме………………………………………………………………………………………………………………………………………. 434

Глава 20. Суперглобальные массивы…………………………………………………… 435

Типы суперглобальных массивов………………………………………………………………………………………….. 435

Cookie……………………………………………………………………………………………………………………………………….. 436

Сессии……………………………………………………………………………………………………………………………………….. 438

Переменные окружения…………………………………………………………………………………………………………… 440

Массив $_SERVER…………………………………………………………………………………………………………………… 441

Элемент $_SERVER[‘DOCUMENT_ROOT’]……………………………………………………………………. 441

Элемент $_SERVER[‘HTTP_ACCEPT’]…………………………………………………………………………… 441

Элемент $_SERVER[‘HTTP_HOST’]………………………………………………………………………………… 442

Элемент $_SERVER[‘HTTP_REFERER’]…………………………………………………………………………. 442

Элемент $_SERVER[‘HTTP_USER_AGENT’]………………………………………………………………….. 443

Элемент $_SERVER[‘REMOTE_ADDR’]………………………………………………………………………….. 443

Элемент $_SERVER[‘SCRIPT_FILENAME’]……………………………………………………………………. 443

Элемент $_SERVER[‘SERVER_NAME’]………………………………………………………………………….. 444

Элемент $_SERVER[‘REQUEST_METHOD’]…………………………………………………………………… 444

Элемент $_SERVER[‘QUERY_STRING’]………………………………………………………………………….. 444

Элемент $_SERVER[‘PHP_SELF’]…………………………………………………………………………………… 445

Элемент $_SERVER[‘REQUEST_URI’]……………………………………………………………………………. 445

Резюме………………………………………………………………………………………………………………………………………. 446

Глава 21. Фильтрация и проверка данных…………………………………………… 447

Фильтрация или проверка?…………………………………………………………………………………………………….. 447

Проверка данных…………………………………………………………………………………………………………………….. 449

Фильтры проверки…………………………………………………………………………………………………………………… 450

Значения по умолчанию…………………………………………………………………………………………………………. 455

Фильтры очистки……………………………………………………………………………………………………………………… 456

Пользовательская фильтрация данных…………………………………………………………………………………. 459

Фильтрация внешних данных…………………………………………………………………………………………………. 460

Конфигурационный файл php.ini…………………………………………………………………………………………… 462

Резюме………………………………………………………………………………………………………………………………………. 463

Часть IV. Стандартные функции PHP…………………………………….. 465

Глава 22. Математические функции…………………………………………………….. 467

Встроенные константы……………………………………………………………………………………………………………. 467

Функции округления………………………………………………………………………………………………………………… 468

Функция abs()……………………………………………………………………………………………………………………. 468

Функция round()……………………………………………………………………………………………………………….. 468

Функция ceil()……………………………………………………………………………………………………………………. 469

Функция floor()…………………………………………………………………………………………………………………. 470

Случайные числа…………………………………………………………………………………………………………………….. 470

Функция rand()………………………………………………………………………………………………………………….. 470

Функция getrandmax()………………………………………………………………………………………………………. 472

Функция random_int()………………………………………………………………………………………………………. 472

Перевод в различные системы счисления……………………………………………………………………………… 472

Функция base_convert()……………………………………………………………………………………………………. 472

Функции bindec(), hexdec() и octdec()……………………………………………………………………………… 473

Функции decbin(), decoct() и dechex()……………………………………………………………………………… 473

Минимум и максимум……………………………………………………………………………………………………………… 473

Функция min()……………………………………………………………………………………………………………………. 473

Функция max()…………………………………………………………………………………………………………………… 473

Не-числа…………………………………………………………………………………………………………………………………… 474

Функция is_nan()………………………………………………………………………………………………………………. 474

Функция is_infinite()…………………………………………………………………………………………………………. 474

Степенные функции…………………………………………………………………………………………………………………. 474

Функция sqrt()…………………………………………………………………………………………………………………… 474

Функция log()……………………………………………………………………………………………………………………. 475

Функция exp()……………………………………………………………………………………………………………………. 475

Функция pow()…………………………………………………………………………………………………………………… 475

Тригонометрия…………………………………………………………………………………………………………………………. 475

Резюме………………………………………………………………………………………………………………………………………. 477

Глава 23. Работа с файлами………………………………………………………………….. 478

О текстовых и бинарных файлах……………………………………………………………………………………………. 478

Открытие файла……………………………………………………………………………………………………………………….. 479

Различия текстового и бинарного режимов…………………………………………………………………… 481

Сетевые соединения…………………………………………………………………………………………………………. 481

Прямые и обратные слеши………………………………………………………………………………………………. 482

Безымянные временные файлы……………………………………………………………………………………….. 483

Закрытие файла……………………………………………………………………………………………………………………….. 483

Чтение и запись………………………………………………………………………………………………………………………… 483

Блочные чтение/запись……………………………………………………………………………………………………. 484

Построчные чтение/запись……………………………………………………………………………………………… 485

Чтение CSV-файла……………………………………………………………………………………………………………. 485

Положение указателя текущей позиции………………………………………………………………………………… 486

Работа с путями……………………………………………………………………………………………………………………….. 488

Манипулирование целыми файлами……………………………………………………………………………………… 490

Чтение и запись целого файла………………………………………………………………………………………… 490

Чтение INI-файла……………………………………………………………………………………………………………… 492

Другие функции……………………………………………………………………………………………………………………….. 493

Блокирование файла……………………………………………………………………………………………………………….. 494

Рекомендательная и жесткая блокировки……………………………………………………………………… 494

Функция flock()…………………………………………………………………………………………………………………. 495

Типы блокировок……………………………………………………………………………………………………………… 495

Исключительная блокировка…………………………………………………………………………………. 495

«Не убий!»……………………………………………………………………………………………………….. 496

«Посади дерево»……………………………………………………………………………………………… 497

«Следи за собой, будь осторожен»……………………………………………………………….. 497

Выводы……………………………………………………………………………………………………………. 498

Разделяемая блокировка………………………………………………………………………………………… 498

Выводы……………………………………………………………………………………………………………. 500

Блокировки с запретом «подвисания»……………………………………………………………………………. 500

Пример счетчика………………………………………………………………………………………………………………. 500

Резюме………………………………………………………………………………………………………………………………………. 501

Глава 24. Работа с каталогами……………………………………………………………… 502

Текущий каталог……………………………………………………………………………………………………………………… 502

Создание каталога…………………………………………………………………………………………………………………… 503

Работа с записями……………………………………………………………………………………………………………………. 504

Рекурсивный обход каталога…………………………………………………………………………………………………. 505

Фильтрация содержимого каталога………………………………………………………………………………………. 506

Удаление каталога………………………………………………………………………………………………………………….. 508

Класс Directory…………………………………………………………………………………………………………………………. 509

Резюме………………………………………………………………………………………………………………………………………. 511

Глава 25. Права доступа и атрибуты файлов……………………………………….. 512

Идентификатор пользователя…………………………………………………………………………………………………. 512

Идентификатор группы…………………………………………………………………………………………………………… 513

Владелец файла……………………………………………………………………………………………………………………….. 514

Права доступа………………………………………………………………………………………………………………………….. 514

Числовое представление прав доступа………………………………………………………………………….. 515

Особенности каталогов…………………………………………………………………………………………………… 515

Примеры……………………………………………………………………………………………………………………………. 517

Домашний каталог пользователя………………………………………………………………………….. 517

Защищенный от записи файл…………………………………………………………………………………. 517

CGI-скрипт………………………………………………………………………………………………………………. 517

Системные утилиты………………………………………………………………………………………………… 517

Закрытые системные файлы………………………………………………………………………………….. 518

Функции PHP……………………………………………………………………………………………………………………………. 518

Назначение прав доступа……………………………………………………………………………………………….. 518

Определение атрибутов файла……………………………………………………………………………………….. 520

Специальные функции……………………………………………………………………………………………. 521

Определение типа файла……………………………………………………………………………………….. 522

Определение возможности доступа……………………………………………………………………………….. 523

Ссылки………………………………………………………………………………………………………………………………………. 524

Символические ссылки……………………………………………………………………………………………………. 524

Жесткие ссылки………………………………………………………………………………………………………………… 524

Резюме………………………………………………………………………………………………………………………………………. 525

Глава 26. Запуск внешних программ……………………………………………………. 526

Запуск утилит…………………………………………………………………………………………………………………………… 526

Оператор «обратные кавычки»………………………………………………………………………………………………. 528

Экранирование командной строки………………………………………………………………………………………… 528

Каналы……………………………………………………………………………………………………………………………………… 529

Временные файлы……………………………………………………………………………………………………………. 529

Открытие канала……………………………………………………………………………………………………………… 530

Взаимная блокировка (deadlock)……………………………………………………………………………………. 531

Резюме………………………………………………………………………………………………………………………………………. 533

Глава 27. Работа с датой и временем……………………………………………………. 534

Представление времени в формате timestamp………………………………………………………………………. 534

Вычисление времени работы скрипта……………………………………………………………………………. 535

Большие вещественные числа………………………………………………………………………………………… 536

Построение строкового представления даты………………………………………………………………… 537

Построение timestamp……………………………………………………………………………………………………… 539

Разбор timestamp……………………………………………………………………………………………………………… 541

Календарик………………………………………………………………………………………………………………………………. 542

Географическая привязка……………………………………………………………………………………………………….. 544

Хранение абсолютного времени…………………………………………………………………………………….. 547

Перевод времени………………………………………………………………………………………………………………. 548

Окончательное решение задачи……………………………………………………………………………………… 549

Календарные классы PHP………………………………………………………………………………………………………. 549

Класс DateTime…………………………………………………………………………………………………………………. 549

Класс DateTimeZone…………………………………………………………………………………………………………. 551

Класс DateInterval……………………………………………………………………………………………………………. 551

Класс DatePeriod……………………………………………………………………………………………………………… 553

Резюме………………………………………………………………………………………………………………………………………. 554

Глава 28. Основы регулярных выражений…………………………………………… 555

Начнем с примеров………………………………………………………………………………………………………………….. 555

Пример первый…………………………………………………………………………………………………………………. 555

Пример второй………………………………………………………………………………………………………………….. 556

Пример третий………………………………………………………………………………………………………………….. 556

Пример четвертый……………………………………………………………………………………………………………. 557

Что такое регулярные выражения?………………………………………………………………………………………… 558

Терминология…………………………………………………………………………………………………………………………… 558

Использование регулярных выражений в PHP……………………………………………………………………… 559

Сопоставление…………………………………………………………………………………………………………………. 559

Сопоставление с заменой………………………………………………………………………………………………… 560

Язык регулярных выражений…………………………………………………………………………………………………. 561

Ограничители…………………………………………………………………………………………………………………… 561

Альтернативные ограничители……………………………………………………………………………… 562

Отмена действия спецсимволов…………………………………………………………………………….. 563

Простые символы…………………………………………………………………………………………………………….. 564

Классы символов…………………………………………………………………………………………………….. 564

Альтернативы………………………………………………………………………………………………………….. 564

Отрицательные классы…………………………………………………………………………………………… 566

Квантификаторы повторений…………………………………………………………………………………………. 566

Ноль или более совпадений…………………………………………………………………………………… 566

Одно или более совпадений…………………………………………………………………………………… 566

Ноль или одно совпадение…………………………………………………………………………………….. 567

Заданное число совпадений………………………………………………………………………………….. 567

Мнимые символы……………………………………………………………………………………………………………… 567

Оператор альтернативы………………………………………………………………………………………………….. 568

Группирующие скобки…………………………………………………………………………………………………….. 568

«Карманы»………………………………………………………………………………………………………………………… 568

Карманы в функции замены…………………………………………………………………………………… 570

Карманы в функции сопоставления………………………………………………………………………. 571

Игнорирование карманов………………………………………………………………………………………. 572

Именованные карманы…………………………………………………………………………………………… 572

«Жадность» квантификаторов………………………………………………………………………………………… 572

Рекуррентные структуры……………………………………………………………………………………….. 574

Модификаторы…………………………………………………………………………………………………………………. 574

Модификатор /i — игнорирование регистра……………………………………………………….. 574

Модификатор /x — пропуск пробелов и комментариев………………………………………. 574

Модификатор /m — многострочность…………………………………………………………………… 575

Модификатор /s — однострочный поиск……………………………………………………………… 576

Модификатор /u — UTF-8………………………………………………………………………………………. 576

Модификатор /U — инвертируем «жадность»……………………………………………………… 576

Незахватывающий поиск………………………………………………………………………………………………… 576

Позитивный просмотр вперед………………………………………………………………………………… 576

Негативный просмотр вперед………………………………………………………………………………… 577

Позитивный просмотр назад………………………………………………………………………………….. 577

Негативный просмотр назад………………………………………………………………………………….. 578

Другие возможности регулярных выражений……………………………………………………………….. 578

Функции PHP……………………………………………………………………………………………………………………………. 578

Поиск совпадений…………………………………………………………………………………………………………….. 578

Замена совпадений………………………………………………………………………………………………………….. 582

Разбиение по регулярному выражению…………………………………………………………………………. 585

Выделение всех уникальных слов из текста………………………………………………………… 585

Экранирование символов………………………………………………………………………………………………… 586

Фильтрация массива………………………………………………………………………………………………………… 587

Примеры регулярных выражений………………………………………………………………………………………….. 588

Преобразование адресов e-mail……………………………………………………………………………………… 588

Преобразование гиперссылок…………………………………………………………………………………………. 588

Быть или не быть?……………………………………………………………………………………………………………………. 589

Ссылки………………………………………………………………………………………………………………………………………. 590

Резюме………………………………………………………………………………………………………………………………………. 590

Глава 29. Разные функции…………………………………………………………………… 591

Информационные функции……………………………………………………………………………………………………… 591

Принудительное завершение программы……………………………………………………………………………… 593

Генерация кода во время выполнения……………………………………………………………………………………. 593

Функции хеширования…………………………………………………………………………………………………………….. 595

Подсветка PHP-кода………………………………………………………………………………………………………………… 600

Резюме………………………………………………………………………………………………………………………………………. 601

Часть V. Основы объектно-ориентированного программирования 603

Глава 30. Наследование……………………………………………………………………….. 605

Расширение класса………………………………………………………………………………………………………………….. 606

Метод включения…………………………………………………………………………………………………………….. 607

Недостатки метода включения……………………………………………………………………………… 608

Несовместимость типов………………………………………………………………………………………….. 609

Наследование…………………………………………………………………………………………………………………… 609

Переопределение методов………………………………………………………………………………………………. 611

Модификаторы доступа при переопределении…………………………………………………… 611

Доступ к методам базового класса……………………………………………………………………….. 611

Финальные методы…………………………………………………………………………………………………. 612

Запрет наследования……………………………………………………………………………………………… 612

Константы __CLASS__ и __METHOD__………………………………………………………………………… 613

Позднее статическое связывание……………………………………………………………………………………. 613

Анонимные классы………………………………………………………………………………………………………………….. 614

Полиморфизм……………………………………………………………………………………………………………………………. 616

Абстрагирование……………………………………………………………………………………………………………… 616

Виртуальные методы………………………………………………………………………………………………………. 621

Расширение иерархии……………………………………………………………………………………………………… 625

Абстрактные классы и методы……………………………………………………………………………………………….. 625

Совместимость родственных типов……………………………………………………………………………………….. 627

Уточнение типа в функциях…………………………………………………………………………………………….. 627

Оператор instanceof…………………………………………………………………………………………………………. 628

Обратное преобразование типа……………………………………………………………………………………… 629

Резюме………………………………………………………………………………………………………………………………………. 629

Глава 31. Интерфейсы………………………………………………………………………….. 630

Ограничения наследования…………………………………………………………………………………………………….. 630

Создание интерфейса………………………………………………………………………………………………………………. 633

Наследование интерфейсов……………………………………………………………………………………………………. 635

Реализация нескольких интерфейсов…………………………………………………………………………………….. 638

Реализует ли объект интерфейс?……………………………………………………………………………………………. 640

Резюме………………………………………………………………………………………………………………………………………. 641

Глава 32. Трейты………………………………………………………………………………….. 642

Создание трейта………………………………………………………………………………………………………………………. 642

Трейты и наследование…………………………………………………………………………………………………………… 645

Разрешение конфликтов………………………………………………………………………………………………………….. 648

Вложенные трейты………………………………………………………………………………………………………………….. 650

Резюме………………………………………………………………………………………………………………………………………. 651

Глава 33. Перечисления……………………………………………………………………….. 652

Создание перечисления…………………………………………………………………………………………………………… 652

Типизированные перечисления………………………………………………………………………………………………. 655

Сравнение значений………………………………………………………………………………………………………………… 658

Перечисления как классы……………………………………………………………………………………………………….. 658

Ограничения перечислений…………………………………………………………………………………………….. 658

Методы перечислений…………………………………………………………………………………………………….. 659

Использование трейтов……………………………………………………………………………………………………. 662

Константы………………………………………………………………………………………………………………………… 663

Резюме………………………………………………………………………………………………………………………………………. 664

Глава 34. Исключения………………………………………………………………………….. 665

Базовый синтаксис…………………………………………………………………………………………………………………… 665

Конструкция throw…………………………………………………………………………………………………………………… 667

Раскрутка стека……………………………………………………………………………………………………………………….. 667

Исключения и деструкторы…………………………………………………………………………………………………….. 668

Интерфейс класса Exception…………………………………………………………………………………………………… 670

Генерация исключений в классах………………………………………………………………………………………….. 672

Создание собственных исключений………………………………………………………………………………………. 675

Перехват собственных исключений………………………………………………………………………………………. 678

Повторная генерация исключений…………………………………………………………………………………………. 679

Блок finally……………………………………………………………………………………………………………………………….. 681

Использование интерфейсов…………………………………………………………………………………………………… 682

Резюме………………………………………………………………………………………………………………………………………. 684

Глава 35. Обработка ошибок……………………………………………………………….. 685

Что такое ошибка?…………………………………………………………………………………………………………………… 685

Роли ошибок……………………………………………………………………………………………………………………… 686

Виды ошибок……………………………………………………………………………………………………………………. 686

Ошибки и исключения……………………………………………………………………………………………………………… 687

Контроль ошибок…………………………………………………………………………………………………………………….. 689

Директивы контроля ошибок………………………………………………………………………………………….. 689

Установка режима вывода ошибок………………………………………………………………………………… 691

Оператор отключения ошибок……………………………………………………………………………………….. 692

Предостережения……………………………………………………………………………………………………. 693

Перехват ошибок……………………………………………………………………………………………………………… 693

Проблемы с оператором @……………………………………………………………………………………. 695

Генерация ошибок……………………………………………………………………………………………………………. 696

Стек вызовов функций……………………………………………………………………………………………………… 697

Резюме………………………………………………………………………………………………………………………………………. 699

Глава 36. Пространство имен……………………………………………………………….. 700

Проблема именования…………………………………………………………………………………………………………….. 700

Объявление пространства имен……………………………………………………………………………………………… 701

Иерархия пространства имен…………………………………………………………………………………………………. 705

Текущее пространство имен…………………………………………………………………………………………………… 706

Импортирование………………………………………………………………………………………………………………………. 707

Автозагрузка классов………………………………………………………………………………………………………………. 708

Функция spl_autoload_register()……………………………………………………………………………………… 708

Резюме………………………………………………………………………………………………………………………………………. 711

Глава 37. Шаблоны проектирования……………………………………………………. 712

Зачем нужны шаблоны проектирования?……………………………………………………………………………… 713

Одиночка (Singleton)………………………………………………………………………………………………………………… 713

Фабричный метод (Factory Method)………………………………………………………………………………………. 715

Модель-Представление-Контроллер…………………………………………………………………………………….. 720

Резюме………………………………………………………………………………………………………………………………………. 731

Глава 38. Итераторы…………………………………………………………………………….. 732

Стандартное поведение foreach…………………………………………………………………………………………….. 732

Интерфейсы для создания итераторов…………………………………………………………………………………… 733

Интерфейс Iterator……………………………………………………………………………………………………………. 734

Интерфейс IteratorAggregate…………………………………………………………………………………………… 736

Пример собственного итератора……………………………………………………………………………………. 737

Как PHP обрабатывает итераторы?………………………………………………………………………………………. 740

Множественные итераторы……………………………………………………………………………………………………. 740

Виртуальные массивы…………………………………………………………………………………………………………….. 741

Библиотека SPL……………………………………………………………………………………………………………………….. 743

Класс ArrayObject…………………………………………………………………………………………………………….. 744

Класс DirectoryIterator…………………………………………………………………………………………………….. 744

Класс FilterIterator…………………………………………………………………………………………………………… 745

Класс LimitIterator……………………………………………………………………………………………………………. 746

Рекурсивные итераторы………………………………………………………………………………………………….. 747

Резюме………………………………………………………………………………………………………………………………………. 748

Глава 39. Отражения……………………………………………………………………………. 749

Механизм отражений………………………………………………………………………………………………………………. 749

Отражение функции: ReflectionFunction……………………………………………………………………….. 750

Отражение параметра функции: ReflectionParameter………………………………………………….. 753

Отражение класса: ReflectionClass………………………………………………………………………………… 755

Пояснение: отражения и наследование…………………………………………………………………………. 760

Отражение свойства класса: ReflectionProperty…………………………………………………………… 762

Отражение метода класса: ReflectionMethod………………………………………………………………… 763

Отражение библиотеки расширения: ReflectionExtension……………………………………………. 765

Полезное добавление: класс Reflection………………………………………………………………………….. 766

Обработка исключений: ReflectionException………………………………………………………………… 767

Иерархия…………………………………………………………………………………………………………………………… 767

Резюме………………………………………………………………………………………………………………………………………. 767

Часть VI. Расширения PHP………………………………………………………….. 769

Глава 40. Подключение и настройка расширений……………………………….. 771

Подключение расширений……………………………………………………………………………………………………… 771

Конфигурационный файл php.ini…………………………………………………………………………………………… 773

Структура php.ini…………………………………………………………………………………………………………….. 773

Параметры языка PHP……………………………………………………………………………………………………… 774

Ограничение ресурсов…………………………………………………………………………………………………….. 776

Загрузка файлов……………………………………………………………………………………………………………….. 777

Обзор расширений…………………………………………………………………………………………………………………… 777

Резюме………………………………………………………………………………………………………………………………………. 778

Глава 41. Работа с PostgreSQL……………………………………………………………… 779

Что такое база данных?………………………………………………………………………………………………………….. 780

Неудобство работы с файлами………………………………………………………………………………………. 780

Почему PostgreSQL?…………………………………………………………………………………………………………. 781

Установка PostgreSQL……………………………………………………………………………………………………………… 782

Установка в Windows……………………………………………………………………………………………………….. 782

Установка в macos…………………………………………………………………………………………………………… 784

Установка в Linux Ubuntu……………………………………………………………………………………………….. 784

Администрирование базы данных…………………………………………………………………………………. 785

Введение в СУБД и SQL………………………………………………………………………………………………………….. 785

Первичные ключи…………………………………………………………………………………………………………….. 788

Управление базами данных……………………………………………………………………………………………. 790

Управление таблицами……………………………………………………………………………………………………. 792

Создание таблицы………………………………………………………………………………………………….. 792

Извлечение структуры таблицы……………………………………………………………………………. 793

Изменение структуры таблицы……………………………………………………………………………… 793

Удаление таблицы………………………………………………………………………………………………….. 796

Комментарии в SQL…………………………………………………………………………………………………………. 797

Вставка записей в таблицу……………………………………………………………………………………………… 798

Удаление записей…………………………………………………………………………………………………………….. 801

Обновление записей…………………………………………………………………………………………………………. 802

Выборка данных………………………………………………………………………………………………………………. 803

Условная выборка…………………………………………………………………………………………………… 804

Псевдонимы столбцов…………………………………………………………………………………………….. 807

Сортировка записей……………………………………………………………………………………………….. 808

Вывод записей в случайном порядке……………………………………………………………………. 811

Ограничение выборки…………………………………………………………………………………………….. 811

Вывод уникальных значений…………………………………………………………………………………. 812

Резюме………………………………………………………………………………………………………………………………………. 813

Глава 42. Расширение PDO………………………………………………………………….. 814

Настройка PDO………………………………………………………………………………………………………………………… 814

Установка соединения с базой данных…………………………………………………………………………………. 815

Выполнение SQL-запросов……………………………………………………………………………………………………… 816

Обработка ошибок…………………………………………………………………………………………………………………… 817

Извлечение данных………………………………………………………………………………………………………………….. 818

Параметризация SQL-запросов………………………………………………………………………………………………. 820

Заполнение связанных таблиц……………………………………………………………………………………………….. 822

Резюме………………………………………………………………………………………………………………………………………. 824

Глава 43. Работа с изображениями……………………………………………………….. 825

Универсальная функция getimagesize()………………………………………………………………………………….. 826

Работа с изображениями и библиотека GD…………………………………………………………………………… 827

Пример создания изображения………………………………………………………………………………………………. 828

Создание изображения……………………………………………………………………………………………………………. 829

Загрузка изображения…………………………………………………………………………………………………………….. 829

Определение параметров изображения…………………………………………………………………………………. 830

Сохранение изображения……………………………………………………………………………………………………….. 831

Преобразование изображения в палитровое………………………………………………………………………… 832

Работа с цветом в формате RGB…………………………………………………………………………………………….. 832

Создание нового цвета…………………………………………………………………………………………………….. 832

Текстовое представление цвета……………………………………………………………………………………… 833

Получение ближайшего в палитре цвета………………………………………………………………………. 833

Эффект прозрачности………………………………………………………………………………………………………. 834

Получение RGB-составляющих……………………………………………………………………………………… 835

Использование полупрозрачных цветов……………………………………………………………………….. 835

Графические примитивы…………………………………………………………………………………………………………. 836

Копирование изображений……………………………………………………………………………………………… 836

Прямоугольники……………………………………………………………………………………………………………….. 838

Выбор пера……………………………………………………………………………………………………………………….. 839

Линии………………………………………………………………………………………………………………………………… 840

Дуга сектора…………………………………………………………………………………………………………………….. 840

Закраска произвольной области…………………………………………………………………………………….. 841

Закраска текстурой………………………………………………………………………………………………………….. 841

Многоугольники………………………………………………………………………………………………………………. 842

Работа с пикселами………………………………………………………………………………………………………….. 843

Работа с фиксированными шрифтами……………………………………………………………………………………. 843

Загрузка шрифта………………………………………………………………………………………………………………. 844

Параметры шрифта………………………………………………………………………………………………………….. 844

Вывод строки……………………………………………………………………………………………………………………. 844

Работа со шрифтами TrueType……………………………………………………………………………………………….. 845

Вывод строки……………………………………………………………………………………………………………………. 845

Проблемы с русскими буквами……………………………………………………………………………………….. 846

Определение границ строки……………………………………………………………………………………………. 846

Коррекция функции imageTtfBBox()……………………………………………………………………………….. 847

Пример………………………………………………………………………………………………………………………………. 849

Резюме………………………………………………………………………………………………………………………………………. 851

Глава 44. Работа с сетью………………………………………………………………………. 852

Файловые функции и потоки…………………………………………………………………………………………………… 852

Другие схемы……………………………………………………………………………………………………………………. 853

Контекст потока……………………………………………………………………………………………………………….. 854

Работа с сокетами……………………………………………………………………………………………………………………. 857

«Эмуляция» браузера………………………………………………………………………………………………………. 858

Неблокирующее чтение…………………………………………………………………………………………………… 859

Функции для работы с DNS…………………………………………………………………………………………………….. 859

Расширение CURL…………………………………………………………………………………………………………………… 860

Отправка данных методом POST……………………………………………………………………………………………. 865

Передача пользовательского агента……………………………………………………………………………………… 867

Резюме………………………………………………………………………………………………………………………………………. 868

Глава 45. NoSQL-база данных Redis…………………………………………………….. 869

Почему Redis?…………………………………………………………………………………………………………………………… 870

Установка сервера Redis…………………………………………………………………………………………………………. 871

В среде Linux Ubuntu……………………………………………………………………………………………………….. 871

В среде macos…………………………………………………………………………………………………………………… 871

В среде Windows………………………………………………………………………………………………………………. 871

Проверка работоспособности………………………………………………………………………………………… 872

Клиент redis-cli………………………………………………………………………………………………………………………….. 872

Вставка и получение значений………………………………………………………………………………………………. 873

Обновление и удаление значений………………………………………………………………………………………….. 874

Управление ключами………………………………………………………………………………………………………………. 876

Время жизни ключа…………………………………………………………………………………………………………………. 876

Типы данных……………………………………………………………………………………………………………………………. 877

Хеш …………………………………………………………………………………………………………………………………………… 878

Множество……………………………………………………………………………………………………………………………….. 879

Отсортированное множество………………………………………………………………………………………………….. 881

Базы данных…………………………………………………………………………………………………………………………….. 882

Производительность Redis………………………………………………………………………………………………………. 883

PHP-расширение Redis…………………………………………………………………………………………………………….. 884

Установка расширения php-redis……………………………………………………………………………………. 884

Хранение сессий в Redis………………………………………………………………………………………………….. 885

Методы для обслуживания данных в Redis…………………………………………………………………… 886

Кеширование данных………………………………………………………………………………………………………. 888

Резюме………………………………………………………………………………………………………………………………………. 893

Часть VII. Компоненты………………………………………………………………. 895

Глава 46. Управление компонентами…………………………………………………… 897

Composer: управление компонентами…………………………………………………………………………………… 897

Установка Composer……………………………………………………………………………………………………………….. 898

Установка в Windows……………………………………………………………………………………………………….. 898

Установка в macos…………………………………………………………………………………………………………… 900

Установка в Linux Ubuntu……………………………………………………………………………………………….. 900

Где искать компоненты?…………………………………………………………………………………………………………. 900

Установка компонента……………………………………………………………………………………………………………. 900

Использование компонента…………………………………………………………………………………………………….. 903

Полезные компоненты…………………………………………………………………………………………………………….. 904

Компонент psySH: интерактивный отладчик………………………………………………………………… 904

Компонент phinx: миграции……………………………………………………………………………………………. 905

Инициализация компонента…………………………………………………………………………………… 906

Подготовка миграций……………………………………………………………………………………………… 908

Выполнение миграций……………………………………………………………………………………………. 911

Откат миграций……………………………………………………………………………………………………….. 912

Операции со столбцами…………………………………………………………………………………………. 913

Подготовка тестовых данных………………………………………………………………………………… 914

Резюме………………………………………………………………………………………………………………………………………. 916

Глава 47. Стандарты PSR…………………………………………………………………….. 917

PSR-стандарты…………………………………………………………………………………………………………………………. 917

PSR-1: основной стандарт кодирования……………………………………………………………………………….. 918

PHP-теги……………………………………………………………………………………………………………………………. 919

Кодировка UTF-8……………………………………………………………………………………………………………… 919

Разделение объявлений и выполнения действий…………………………………………………………… 919

Пространство имен………………………………………………………………………………………………………….. 920

Именование классов, методов и констант классов……………………………………………………….. 920

PSR-12. Руководство по стилю кода………………………………………………………………………………………. 921

Соблюдение PSR-1…………………………………………………………………………………………………………… 921

Отступы…………………………………………………………………………………………………………………………….. 921

Файлы……………………………………………………………………………………………………………………………….. 922

Строки……………………………………………………………………………………………………………………………….. 922

Ключевые слова……………………………………………………………………………………………………………….. 922

Пространства имен………………………………………………………………………………………………………….. 922

Классы………………………………………………………………………………………………………………………………. 923

Методы……………………………………………………………………………………………………………………………… 924

Управляющие структуры………………………………………………………………………………………………… 925

Автоматическая проверка стиля…………………………………………………………………………………….. 926

PSR-4: автозагрузка…………………………………………………………………………………………………………………. 927

Резюме………………………………………………………………………………………………………………………………………. 927

Глава 48. Документирование……………………………………………………………….. 928

Установка…………………………………………………………………………………………………………………………………. 928

Документирование PHP-элементов………………………………………………………………………………………… 928

Теги                                                                                                                                                                 930

Резюме………………………………………………………………………………………………………………………………………. 933

Глава 49. Атрибуты……………………………………………………………………………… 934

Синтаксис…………………………………………………………………………………………………………………………………. 935

Отражения для работы атрибутами………………………………………………………………………………………. 937

Класс атрибута………………………………………………………………………………………………………………………… 938

Аргументы атрибутов……………………………………………………………………………………………………………… 940

Резюме………………………………………………………………………………………………………………………………………. 942

Глава 50. Разработка собственного компонента…………………………………… 943

Имя компонента и пространство имен…………………………………………………………………………………… 943

Организация компонента………………………………………………………………………………………………………… 944

Реализация компонента…………………………………………………………………………………………………………… 947

Базовый класс навигации Pager……………………………………………………………………………………… 948

Постраничная навигация по содержимому папки………………………………………………………… 951

Базовый класс представления View……………………………………………………………………………….. 954

Представление: список страниц……………………………………………………………………………………… 955

Собираем все вместе………………………………………………………………………………………………………… 957

Постраничная навигация по содержимому файла……………………………………………………….. 958

Постраничная навигация по содержимому базы данных……………………………………………. 962

Представление: диапазон элементов……………………………………………………………………………… 966

Публикация компонента…………………………………………………………………………………………………………. 970

Зачем разрабатывать собственные компоненты?………………………………………………………………… 972

Резюме………………………………………………………………………………………………………………………………………. 972

Заключение………………………………………………………………………………………….. 973

Приложение. Описание электронного архива………………………………………. 975

Предметный указатель…………………………………………………………………………. 976

Опубликовано

Талисман PHP своими руками

elePHPant Origami

Немного истории

В 1998 году один из создателей языка PHP, Франсуа Бюффьер обратился к своему другу, французскому дизайнеру Винсенту Понтье (Vincent PONTIER) с просьбой разработать логотип для нового языка программирования.

Винсент создал логотип и во время работы обратил внимание, что заглавные буквы немного напоминают по форме слона.

По воле случая один из друзей дизайнера —  Жан-Пьер Дезелю — коллекционировал игрушечных слонов и вел сайт, посвященный PHP. Когда он узнал о дизайнерских наблюдениях друга, то попросил нарисовать ему такого слона. Изображение получило название elePHPant, как игра слов “elephant” и “PHP”.

Первые плюшевые игрушки в виде слона с символикой “PHP” появились только спустя 10 лет после создания рисунка elePHPant. Первоначально талисман был синего цвета, но в последние годы появились  розовые, желтые, красные, фиолетовые и оранжевые слоны.

Делай раз, делай два… делай тридцать семь

Вы можете самостоятельно за 7 минут изготовить из бумаги слоника elePHPant.

Для этого:

  1. Cкачайте выкройку оригами с сайта Винсента Понтье (elephpant.com)
  2. Распечатайте выкройку на принтере (лучше цветном). Как вариант, можно напечатать на ч/б принтере на цветной бумаге.
  3. Следуйте пошаговой инструкции по сборке.
elePHPant-Origami-php-diagramme

РЕКОМЕНДУЕМ КНИГИ ПО PHP