Предисловие 29
Для кого написана эта книга 29
Исходные коды 30
Третье издание 31
Общая структура книги 31
Часть I 31
Часть II 32
Часть III 32
Часть IV 32
Часть V 33
Часть VI 33
Часть VII 33
Часть VIII 33
Часть IX 33
Часть X 33
Листинги 34
Благодарности от Дмитрия Котерова 34
Благодарности от Игоря Симдянова 35
Предисловие к первому изданию 39
Часть I. Основы Web-программирования
41
Глава 1. Принципы работы Интернета
43
Протоколы передачи данных 43
Семейство TCP/IP 45
Адресация в Сети 46
IP-адрес 46
Версии протокола IP 47
Доменное имя 48
Порт 50
Установка соединения 51
Обмен данными 52
Терминология 52
Сервер 52
Узел 53
Порт 53
Сетевой демон, сервис, служба 53
Хост 54
Виртуальный хост 54
Провайдер 55
Хостинг-провайдер (хостер) 55
Хостинг 55
Виртуальный сервер 55
Сайт 56
HTML-документ 56
Страница (или HTML-страница) 56
Скрипт, сценарий 56
Web-программирование 56
Взаимосвязь терминов 57
World Wide Web и URL 57
Протокол 58
Имя хоста 58
Порт 58
Путь к странице 59
Резюме 59
Глава 2. Интерфейс CGI и протокол HTTP
60
Что такое CGI? 60
Секреты URL 61
Заголовки запроса и метод GET 62
GET 63
POST 64
Content-Type 64
Host 64
User-Agent 65
Referer 65
Content-length 65
Cookie 66
Accept 66
Эмуляция браузера через telnet 66
Метод POST 67
URL-кодирование 68
Что такое формы и для чего они нужны? 68
Передача параметров "вручную" 69
Использование формы 69
Абсолютный и относительный пути к сценарию 70
Метод POST и формы 71
Резюме 71
Глава 3. CGI изнутри
72
Язык C 72
Работа с исходными текстами на C 73
Компиляция программ 73
Передача документа пользователю 74
Заголовки ответа 74
Заголовок кода ответа 74
"Подделывание" заголовка ответа 75
Content-type 75
Pragma 75
Location 75
Set-cookie 76
Date 76
Server 76
Примеры CGI-сценариев на C 76
Вывод бинарного файла 77
Передача информации CGI-сценарию 78
Переменные окружения 78
Передача параметров методом GET 80
Передача параметров методом POST 81
Расшифровка URL-кодированных данных 83
Формы 86
Тег — различные поля ввода 87
Текстовое поле (text) 87
Поле ввода пароля (password) 87
Скрытое текстовое поле (hidden) 88
Независимый переключатель (checkbox) 89
Зависимый переключатель (radio) 89
Кнопка отправки формы (submit) 90
Кнопка сброса формы (reset) 90
Рисунок для отправки формы (image) 90
Тег — многострочное поле ввода текста 90
Тег — список 91
Списки множественного выбора (multiple) 92
HTML-сущности 92
Загрузка файлов 93
Формат данных 94
Тег загрузки файла (file) 95
Что такое cookies и "с чем их едят"? 96
Установка cookie 98
Получение cookies из браузера 100
Пример программы для работы с cookies 100
Аутентификация 101
Резюме 103
Глава 4. Встроенный сервер PHP
104
Установка PHP в Windows 104
Переменная окружения PATH 105
Установка PHP в Mac OS X 107
Установка PHP в Linux (Ubuntu) 109
Запуск встроенного сервера 109
Файл hosts 110
Вещание вовне 110
Конфигурирование PHP 111
Резюме 111
Часть II. Основы языка PHP
113
Глава 5. Характеристика языка PHP
115
История PHP 115
Что нового в PHP 7? 119
Пример PHP-программы 120
Использование PHP в Web 124
Резюме 126
Глава 6. Переменные, константы, типы данных
127
Переменные 127
Копирование переменных 128
Типы переменных 128
integer (целое число) 128
double (вещественное число) 129
string (строка текста) 130
array (ассоциативный массив) 130
object (ссылка на объект) 131
resource (ресурс) 131
boolean (логический тип) 131
null (специальное значение) 132
callable (функция обратного вызова) 132
Действия с переменными 132
Присвоение значения 132
Проверка существования 132
Уничтожение 133
Определение типа переменной 133
Установка типа переменной 134
Оператор присваивания 136
Ссылочные переменные 136
Жесткие ссылки 136
"Сбор мусора" 137
Символические ссылки 138
Ссылки на объекты 138
Некоторые условные обозначения 139
Константы 141
Предопределенные константы 142
Определение констант 143
Проверка существования константы 143
Константы с динамическими именами 143
Отладочные функции 144
Резюме 146
Глава 7. Выражения и операции PHP
147
Выражения 147
Логические выражения 148
Строковые выражения 148
Строка в апострофах 149
Строка в кавычках 149
Here-документ 150
Now-документ 151
Вызов внешней программы 151
Операции 151
Арифметические операции 151
Строковые операции 152
Операции присваивания 152
Операции инкремента и декремента 153
Битовые операции 153
Операции сравнения 158
Особенности операторов == и != 159
Сравнение сложных переменных 160
Операция эквивалентности 160
Оператор <=> 162
Логические операции 162
Операция отключения предупреждений 163
Особенности оператора @ 164
Противопоказания к использованию 165
Условные операции 165
Резюме 167
Глава 8. Работа с данными формы
168
Передача данных командной строки 168
Формы 170
Трансляция полей формы 171
Трансляция переменных окружения 173
Трансляция cookies 173
Обработка списков 174
Обработка массивов 175
Диагностика 176
Порядок трансляции переменных 177
Особенности флажков checkbox 177
Резюме 179
Глава 9. Конструкции языка
180
Инструкция if-else 180
Использование альтернативного синтаксиса 181
Цикл с предусловием while 182
Цикл с постусловием do-while 183
Универсальный цикл for 183
Инструкции break и continue 184
Нетрадиционное использование do-while и break 185
Цикл foreach 187
Конструкция switch-case 188
Инструкции goto 188
Инструкции require и include 189
Инструкции однократного включения 190
Суть проблемы 191
Решение: require_once 192
Другие инструкции 193
Резюме 193
Глава 10. Ассоциативные массивы
194
Создание массива "на лету". Автомассивы 195
Конструкция list() 196
Списки и ассоциативные массивы: путаница? 197
Конструкция array() и многомерные массивы 197
Массивы-константы 199
Операции над массивами 199
Доступ по ключу 199
Функция count() 199
Слияние массивов 200
Слияние списков 200
Обновление элементов 200
Косвенный перебор элементов массива 201
Перебор списка 201
Перебор ассоциативного массива 202
Недостатки косвенного перебора 203
Вложенные циклы 203
Нулевой ключ 203
Прямой перебор массива 204
Старый способ перебора 204
Перебор циклом foreach 204
Ссылочный синтаксис foreach 204
Списки и строки 205
Сериализация 206
Упаковка 207
Распаковка 207
Резюме 208
Глава 11. Функции и области видимости
209
Пример функции 209
Общий синтаксис определения функции 211
Инструкция return 211
Объявление и вызов функции 213
Параметры по умолчанию 213
Передача параметров по ссылке 214
Переменное число параметров 215
Типы аргументов и возвращаемого значения 217
Локальные переменные 218
Глобальные переменные 219
Массив $GLOBALS 220
Самовложенность 221
Как работает инструкция global 221
Статические переменные 222
Рекурсия 223
Факториал 223
Пример функции: dumper() 223
Вложенные функции 225
Условно определяемые функции 226
Эмуляция функции virtual() 227
Передача функций по ссылке 228
Использование call_user_func() 228
Использование call_user_func_array() 229
Анонимные функции 229
Замыкания 230
Возврат функцией ссылки 232
Технология отложенного копирования 233
Несколько советов по использованию функций 235
Резюме 236
Глава 12. Генераторы
237
Отложенные вычисления 237
Манипуляция массивами 240
Делегирование генераторов 242
Экономия ресурсов 243
Использование ключей 244
Использование ссылки 244
Связь генераторов c объектами 245
Резюме 247
Часть III. Стандартные функции PHP
249
Глава 13. Строковые функции
251
Кодировки 251
UTF-8 и PHP 255
Конкатенация строк 258
О сравнении строк 258
Особенности strpos() 259
Отрезание пробелов 260
Базовые функции 261
Работа с подстроками 262
Замена 262
Подстановка 263
Преобразования символов 267
Изменение регистра 269
Установка локали (локальных настроек) 270
Функции форматных преобразований 271
Форматирование текста 273
Работа с бинарными данными 274
Хэш-функции 276
Сброс буфера вывода 278
Резюме 278
Глава 14. Работа с массивами
279
Лексикографическая и числовая сортировки 279
Сортировка произвольных массивов 280
Сортировка по значениям 280
Сортировка по ключам 280
Пользовательская сортировка по ключам 281
Пользовательская сортировка по значениям 282
Переворачивание массива 282
"Естественная" сортировка 283
Сортировка списков 284
Сортировка списка 284
Пользовательская сортировка списка 285
Сортировка многомерных массивов 285
Перемешивание списка 288
Ключи и значения 288
Слияние массивов 289
Работа с подмассивами 290
Работа со стеком и очередью 291
Переменные и массивы 292
Применение в шаблонах 293
Создание диапазона чисел 294
Работа с множествами 295
Пересечение 295
Разность 295
Объединение 295
JSON-формат 296
Резюме 301
Глава 15. Математические функции
302
Встроенные константы 302
Функции округления 303
Случайные числа 305
Перевод в различные системы счисления 308
Минимум и максимум 308
Не-числа 309
Степенные функции 310
Тригонометрия 310
Резюме 312
Глава 16. Работа с файлами и каталогами
313
О текстовых и бинарных файлах 313
Открытие файла 314
Конструкция or die() 316
Различия текстового и бинарного режимов 316
Сетевые соединения 317
Прямые и обратные слеши 317
Безымянные временные файлы 318
Закрытие файла 319
Чтение и запись 319
Блочные чтение/запись 320
Построчные чтение/запись 320
Чтение CSV-файла 321
Положение указателя текущей позиции 322
Работа с путями 323
Манипулирование целыми файлами 325
Чтение и запись целого файла 325
Чтение INI-файла 326
Другие функции 328
Блокирование файла 329
Рекомендательная и жесткая блокировки 329
Функция flock() 329
Типы блокировок 330
Исключительная блокировка 330
"Не убий!" 331
"Посади дерево" 331
"Следи за собой, будь осторожен" 332
Выводы 333
Разделяемая блокировка 333
Выводы 335
Блокировки с запретом "подвисания" 335
Пример счетчика 335
Работа с каталогами 336
Манипулирование каталогами 336
Работа с записями 337
Пример: печать дерева каталогов 338
Получение содержимого каталога 339
Резюме 341
Глава 17. Права доступа и атрибуты файлов
342
Идентификатор пользователя 342
Идентификатор группы 343
Владелец файла 344
Права доступа 344
Числовое представление прав доступа 345
Особенности каталогов 345
Примеры 347
Домашний каталог пользователя 347
Защищенный от записи файл 347
CGI-скрипт 347
Системные утилиты 348
Закрытые системные файлы 348
Функции PHP 348
Права доступа 348
Определение атрибутов файла 350
Специальные функции 351
Определение типа файла 352
Определение возможности доступа 353
Ссылки 353
Символические ссылки 353
Жесткие ссылки 354
Резюме 355
Глава 18. Запуск внешних программ
356
Запуск утилит 356
Оператор "обратные апострофы" 358
Экранирование командной строки 358
Каналы 359
Временные файлы 359
Открытие канала 360
Взаимная блокировка (deadlock) 360
Резюме 362
Глава 19. Работа с датой и временем
363
Установка часового пояса 363
Представление времени в формате timestamp 363
Вычисление времени работы скрипта 364
Большие вещественные числа 364
Построение строкового представления даты 365
Построение timestamp 367
Разбор timestamp 369
Григорианский календарь 370
Проверка даты 371
Календарик 371
Дата и время по Гринвичу 373
Время по GMT 373
Хранение абсолютного времени 374
Перевод времени 375
Окончательное решение задачи 376
Резюме 376
Глава 20. Основы регулярных выражений
377
Начнем с примеров 377
Пример первый 377
Пример второй 378
Пример третий 378
Пример четвертый 379
What is the PCRE? 380
Терминология 380
Использование регулярных выражений в PHP 381
Сопоставление 381
Сопоставление с заменой 382
Язык PCRE 383
Ограничители 383
Альтернативные ограничители 384
Отмена действия спецсимволов 384
Простые символы (литералы) 385
Классы символов 386
Альтернативы 386
Отрицательные классы 387
Квантификаторы повторений 388
Ноль или более совпадений 388
Одно или более совпадений 388
Ноль или одно совпадение 389
Заданное число совпадений 389
Мнимые символы 389
Оператор альтернативы 390
Группирующие скобки 390
"Карманы" 390
Использование карманов в функции замены 392
Использование карманов в функции сопоставления 393
Игнорирование карманов 394
Именованные карманы 394
"Жадность" квантификаторов 394
Рекуррентные структуры 396
Модификаторы 396
Модификатор /i: игнорирование регистра 396
Модификатор /x: пропуск пробелов и комментариев 396
Модификатор /m: многострочность 397
Модификатор /s: (однострочный поиск) 398
Модификатор /e: выполнение PHP-программы при замене 398
Модификатор /u: UTF-8 399
Незахватывающий поиск 399
Позитивный просмотр вперед 399
Негативный просмотр вперед 400
Позитивный просмотр назад 400
Негативный просмотр назад 401
Другие возможности PCRE 401
Функции PHP 401
Поиск совпадений 401
Замена совпадений 404
Разбиение по регулярному выражению 407
Выделение всех уникальных слов из текста 407
Экранирование символов 409
Фильтрация массива 409
Примеры использования регулярных выражений 410
Преобразование адресов e-mail 410
Преобразование гиперссылок 411
Быть или не быть? 412
Ссылки 412
Резюме 412
Глава 21. Разные функции
413
Информационные функции 413
Принудительное завершение программы 414
Финализаторы 415
Генерация кода во время выполнения 416
Выполнение кода 416
Генерация функций 418
Другие функции 420
Резюме 420
Часть IV. Основы объектно-ориентированного программирования
421
Глава 22. Объекты и классы
423
Класс как тип данных 423
Создание нового класса 425
Работа с классами 426
Создание объекта некоторого класса 426
Доступ к свойствам объекта 426
Доступ к методам 427
Создание нескольких объектов 428
Перегрузка преобразования в строку 429
Инициализация и разрушение 430
Конструктор 430
Параметры по умолчанию 431
Старый способ создания конструктора 432
Деструктор 432
Вопрос освобождения ресурсов 433
Описание деструктора 434
Алгоритм сбора мусора 436
Циклические ссылки 437
Проблема циклических ссылок 439
Права доступа к членам класса 440
Модификаторы доступа 440
Public: открытый доступ 441
Private: доступ только из методов класса 441
Protected: доступ из методов производного класса 442
Неявное объявление свойств 442
Общие рекомендации 443
Класс — self, объект — $this 443
Пример: счетчик объектов 444
Пример: кэш ресурсов 445
Константы класса 446
Перехват обращений к членам класса 447
Клонирование объектов 449
Переопределение операции клонирования 450
Запрет клонирования 450
Перехват сериализации 451
Сериализация объектов 451
Упаковка и распаковка объектов 452
Методы __sleep() и __wakeup() 453
Резюме 458
Глава 23. Наследование
459
Расширение класса 460
Метод включения 461
Недостатки метода 462
Несовместимость типов 463
Наследование 463
Переопределение методов 464
Модификаторы доступа при переопределении 465
Доступ к методам базового класса 465
Финальные методы 465
Запрет наследования 466
Константы __CLASS__ и __METHOD__ 466
Позднее статическое связывание 466
Анонимные классы 468
Полиморфизм 469
Абстрагирование 470
Виртуальные методы 475
Расширение иерархии 478
Абстрактные классы и методы 479
Совместимость родственных типов 481
Уточнение типа в функциях 481
Оператор instanceof 482
Обратное преобразование типа 482
Резюме 483
Глава 24. Интерфейсы и трейты
484
Интерфейсы 484
Наследование интерфейсов 486
Интерфейсы и абстрактные классы 488
Трейты 488
Трейты и наследование 490
Резюме 491
Глава 25. Пространство имен
492
Проблема именования 492
Объявление пространства имен 493
Иерархия пространства имен 496
Импортирование 498
Автозагрузка классов 498
Функция __autoload() 498
Функция spl_autoload_register() 501
Резюме 502
Глава 26. Обработка ошибок и исключения
503
Что такое ошибка? 503
Роли ошибок 504
Виды ошибок 504
Контроль ошибок 505
Директивы контроля ошибок 505
Установка режима вывода ошибок 507
Оператор отключения ошибок 508
Пример использования оператора @ 509
Предостережения 509
Перехват ошибок 510
Проблемы с оператором @ 512
Генерация ошибок 513
Стек вызовов функций 514
Исключения 515
Базовый синтаксис 515
Инструкция throw 517
Раскрутка стека 517
Исключения и деструкторы 518
Исключения и set_error_handler() 519
Классификация и наследование 521
Базовый класс Exception 522
Использование интерфейсов 523
Исключения в PHP 7 526
Блоки-финализаторы 527
Перехват всех исключений 528
Трансформация ошибок 529
Серьезность "несерьезных" ошибок 530
Преобразование ошибок в исключения 531
Пример 531
Код библиотеки PHP_Exceptionizer 532
Иерархия исключений 535
Фильтрация по типам ошибок 536
Резюме 537
Часть V. Предопределенные классы PHP
539
Глава 27. Предопределенные классы PHP
541
Класс Directory 541
Класс Generator 544
Класс Closure 545
Класс IntlChar 548
Резюме 549
Глава 28. Календарные классы PHP
550
Класс DateTime 550
Класс DateTimeZone 551
Класс DateInterval 552
Класс DatePeriod 554
Резюме 555
Глава 29. Итераторы
556
Стандартное поведение foreach 556
Определение собственного итератора 557
Как PHP обрабатывает итераторы 560
Множественные итераторы 561
Виртуальные массивы 561
Библиотека SPL 563
Класс DirectoryIterator 563
Класс FilterIterator 565
Класс LimitIterator 566
Рекурсивные итераторы 566
Резюме 567
Глава 30. Отражения
568
Неявный доступ к классам и методам 568
Неявный вызов метода 568
Неявный список аргументов 569
Инстанцирование классов 570
Использование неявных аргументов 570
Аппарат отражений 571
Функция: ReflectionFunction 572
Параметр функции: ReflectionParameter 574
Класс: ReflectionClass 574
Наследование и отражения 577
Свойство класса: ReflectionProperty 579
Метод класса: ReflectionMethod 580
Библиотека расширения: ReflectionExtension 580
Различные утилиты: Reflection 581
Исключение: ReflectionException 581
Иерархия 582
Резюме 582
Часть VI. Работа с сетью в PHP
583
Глава 31. Работа с HTTP и WWW
585
Заголовки ответа 585
Вывод заголовка ответа 585
Проблемы с заголовками 585
Запрет кэширования 586
Получение выведенных заголовков 587
Получение заголовков запроса 588
Работа с cookies 588
Немного теории 588
Установка cookie 589
Массивы и cookie 590
Получение cookie 591
Разбор URL 591
Разбиение и "склеивание" QUERY_STRING 591
Разбиение и "склеивание" URL 593
Пример 594
Резюме 595
Глава 32. Сетевые функции
596
Файловые функции и потоки 596
Проблемы безопасности 597
Другие схемы 598
Контекст потока 598
Работа с сокетами 601
"Эмуляция" браузера 601
Неблокирующее чтение 602
Функции для работы с DNS 603
Преобразование IP-адреса в доменное имя и наоборот 603
Резюме 604
Глава 33. Посылка писем через PHP
605
Формат электронного письма 605
Отправка письма 606
Почтовые шаблоны 607
Расщепление заголовков 608
Анализ заголовков 609
Кодировка UTF-8 611
Заголовок Content-type и кодировка 611
Кодировка заголовков 611
Кодирование тела письма 613
Активные шаблоны 613
Отправка писем с вложением 616
Отправка писем со встроенными изображениями 619
Резюме 621
Глава 34. Управление сессиями
622
Что такое сессия? 623
Зачем нужны сессии? 623
Механизм работы сессий 624
Инициализация сессии 625
Пример использования сессии 625
Уничтожение сессии 626
Идентификатор сессии и имя группы 627
Имя группы сессий 627
Идентификатор сессии 628
Путь к временному каталогу 629
Стоит ли изменять группу сессий? 629
Установка обработчиков сессии 630
Обзор обработчиков 630
Регистрация обработчиков 631
Пример: переопределение обработчиков 632
Резюме 634
Часть VII. Расширения PHP
635
Глава 35. Расширения PHP
637
Подключение расширений 637
Конфигурационный файл php.ini 640
Структура php.ini 640
Параметры языка PHP 641
Ограничение ресурсов 643
Загрузка файлов 644
Обзор расширений 644
Резюме 645
Глава 36. Фильтрация и проверка данных
646
Фильтрация или проверка? 646
Проверка данных 649
Фильтры проверки 651
Значения по умолчанию 656
Фильтры очистки 657
Пользовательская фильтрация данных 660
Фильтрация внешних данных 661
Конфигурационный файл php.ini 663
Резюме 665
Глава 37. Работа с СУБД MySQL
666
Что такое база данных? 666
Неудобство работы с файлами 667
Администрирование базы данных 668
Язык запросов СУБД MySQL 668
Первичные ключи 671
Создание и удаление базы данных 673
Выбор базы данных 675
Типы полей 675
Целые числа 675
Вещественные числа 676
Строки 676
Бинарные данные 677
Дата и время 677
Перечисления 678
Множества 678
Модификаторы и флаги типов 678
Создание и удаление таблиц 679
Вставка числовых значений в таблицу 684
Вставка строковых значений в таблицу 686
Вставка календарных значений 687
Вставка уникальных значений 689
Механизм AUTO_INCREMENT 690
Многострочный оператор INSERT 690
Удаление данных 691
Обновление записей 692
Выборка данных 694
Условная выборка 695
Псевдонимы столбцов 699
Сортировка записей 700
Вывод записей в случайном порядке 702
Ограничение выборки 702
Вывод уникальных значений 703
Расширение PDO 704
Установка соединения с базой данных 705
Выполнение SQL-запросов 706
Обработка ошибок 707
Извлечение данных 709
Параметризация SQL-запросов 711
Заполнение связанных таблиц 712
Резюме 715
Глава 38. Работа с изображениями
716
Универсальная функция getimagesize() 717
Работа с изображениями и библиотека GD 718
Пример создания изображения 719
Создание изображения 720
Загрузка изображения 720
Определение параметров изображения 721
Сохранение изображения 722
Преобразование изображения в палитровое 723
Работа с цветом в формате RGB 723
Создание нового цвета 723
Текстовое представление цвета 723
Получение ближайшего в палитре цвета 724
Эффект прозрачности 725
Получение RGB-составляющих 725
Использование полупрозрачных цветов 726
Графические примитивы 727
Копирование изображений 727
Прямоугольники 728
Выбор пера 729
Линии 730
Дуга сектора 730
Закраска произвольной области 730
Закраска текстурой 731
Многоугольники 731
Работа с пикселами 732
Работа с фиксированными шрифтами 732
Загрузка шрифта 733
Параметры шрифта 733
Вывод строки 734
Работа со шрифтами TrueType 734
Вывод строки 734
Проблемы с русскими буквами 735
Определение границ строки 735
Коррекция функции imageTtfBBox() 735
Пример 737
Резюме 739
Глава 39. Работа с сетью
740
Подключение расширений 740
Получение точного времени 745
Отправка данных методом POST 745
Передача пользовательского агента 747
Резюме 748
Глава 40. Сервер memcached
749
Настройка сервера memcached 749
Хранение сессий в memcached 750
Установка соединения с сервером 751
Помещение данных в memcached 752
Обработка ошибок 753
Замена данных в memcached 754
Извлечение данных из memcached 756
Удаление данных из memcached 758
Установка времени жизни 758
Работа с несколькими серверами 758
Резюме 763
Часть VIII. Библиотеки
765
Глава 41. Компоненты
767
Composer: управление компонентами 767
Установка Composer 768
Установка в Windows 768
Установка в Mac OS X 770
Установка в Ubuntu 770
Где искать компоненты? 770
Установка компонента 770
Использование компонента 773
Полезные компоненты 773
Компонент psySH. Интерактивный отладчик 773
Компонент phinx. Миграции 775
Инициализация компонента 776
Подготовка миграций 776
Выполнение миграций 779
Откат миграций 780
Операции со столбцами 781
Подготовка тестовых данных 782
Резюме 784
Глава 42. Стандарты PSR
785
PSR-стандарты 785
PSR-1. Основной стандарт кодирования 786
PHP-теги 786
Кодировка UTF-8 786
Разделение объявлений и выполнения действий 787
Пространство имен 788
Именование классов, методов и констант классов 788
PSR-2. Руководство по стилю кода 789
Соблюдение PSR-1 789
Отступы 789
Файлы 790
Строки 790
Ключевые слова 790
Пространства имен 791
Классы 791
Методы 792
Управляющие структуры 793
Автоматическая проверка стиля 794
PSR-3. Протоколирование 795
PSR-4. Автозагрузка 797
PSR-6. Кэширование 797
PSR-7. HTTP-сообщения 799
Базовый интерфейс MessageInterface 800
Тело сообщения StreamInterface 802
Ответ сервера ResponseInterface 803
Запрос клиента RequestInterface 804
Запрос сервера ServerRequestInterface 806
Загрузка файлов UploadedFileInterface 807
Резюме 808
Глава 43. Документирование
809
Установка 809
Документирование PHP-элементов 810
Теги 811
Типы 815
Резюме 815
Глава 44. Разработка собственного компонента
816
Имя компонента и пространство имен 816
Организация компонента 817
Реализация компонента 820
Базовый класс навигации Pager 821
Постраничная навигация по содержимому папки 824
Базовый класс представления View 827
Представление: список страниц 828
Собираем все вместе 829
Постраничная навигация по содержимому файла 830
Постраничная навигация по содержимому базы данных 833
Представление: диапазон элементов 837
Публикация компонента 840
Зачем разрабатывать собственные компоненты? 842
Резюме 842
Глава 45. PHAR-архивы
843
Создание архива 843
Чтение архива 845
Распаковка архива 848
Упаковка произвольных файлов 848
Преобразование содержимого архива 851
Сжатие PHAR-архива 852
Утилита phar 854
Резюме 854
Часть IX. Приемы программирования на PHP
855
Глава 46. XML
857
Что такое XML? 858
Чтение XML-файла 859
XPath 862
Формирование XML-файла 863
Резюме 865
Глава 47. Загрузка файлов на сервер
866
Multipart-формы 867
Тег выбора файла 867
Закачка файлов и безопасность 867
Поддержка закачки в PHP 868
Простые имена полей закачки 868
Получение закачанного файла 870
Пример: фотоальбом 871
Сложные имена полей 872
Резюме 874
Глава 48. Использование перенаправлений
875
Внешний редирект 875
Внутренний редирект 876
Самопереадресация 878
Резюме 881
Глава 49. Перехват выходного потока
882
Функции перехвата 882
Стек буферов 883
Недостатки "ручного" перехвата 884
Использование объектов и деструкторов 885
Класс для перехвата выходного потока 886
Недостатки класса 889
Проблемы с отладкой 889
Обработчики буферов 890
GZip-сжатие 891
Печать эффективности сжатия 892
Резюме 894
Глава 50. Код и шаблон страницы
895
Первый способ: "вкрапление" HTML в код 895
Второй способ: вставка кода в шаблон 897
Третий способ: Model—View—Controller 898
Шаблон (View) 899
Контроллер (Controller) 899
Модель (Model) 901
Взаимодействие элементов 902
Активные и пассивные шаблоны 903
Активные шаблоны 903
Пассивные шаблоны 904
Недостатки MVC 906
Четвертый способ: компонентный подход 908
Блочная структура Web-страниц 908
Взаимодействие элементов 909
Шаблон (View) 911
Компоненты (Components) 913
Добавление записи 913
Показ записей 914
Показ новостей 914
Проверка корректности входных данных 915
Полномочия Компонентов 916
Достоинства подхода 917
Система Smarty 917
Трансляция в код на PHP 917
Использование Smarty в MVC-схеме 919
Инструкции Smarty 920
Одиночные и парные теги 920
Вставка значения переменной: {$variable ...} 921
Модификаторы 921
Перебор массива: {foreach}...{/foreach} 921
Ветвление: {if}...{else}...{/if} 922
Вставка содержимого внешнего файла: {include} 922
Вывод отладочной консоли: {debug} 923
Удаление пробелов: {strip}...{/strip} 923
Оператор присваивания: {assign} 924
Оператор перехвата блока: {capture} 924
Циклическая подстановка: {cycle} 924
Глоссарий 925
Резюме 926
Глава 51. AJAX
927
Что такое AJAX? 927
Что такое jQuery? 928
Обработка событий 930
Манипуляция содержимым страницы 932
Асинхронное обращение к серверу 936
AJAX-обращение к базе данных 937
Отправка данных методом POST 941
Двойной выпадающий список 946
Запоминание состояний флажков 949
Резюме 951
Часть X. Развертывание
953
Глава 52. Протокол SSH
955
Ubuntu 956
Сервер OpenSSH 956
Установка SSH-сервера 956
Настройка SSH-сервера 956
Настройка доступа 956
Смена порта 958
Управление сервером 959
Клиент SSH 959
Обращение к удаленному серверу 959
Настройка клиента SSH 960
Псевдонимы 961
Доступ по ключу 961
Проброс ключа 963
SSH-агент ключа 964
Массовое выполнение команд 964
Загрузка и скачивание файлов по SSH-протоколу 965
Mac OS X 965
Windows 966
SSH-клиент PuTTY 966
Доступ по SSH-ключу 967
Копирование файлов по SSH-протоколу 970
Утилита pscp.exe 970
Клиент FileZilla 970
Cygwin 971
Установка 972
SSH-соединение 975
Резюме 975
Глава 53. Виртуальные машины
976
VirtualBox 977
Установка VirtualBox 977
Создание виртуальной машины 979
Установка операционной системы 981
Vagrant 985
Установка Vagrant 985
Создание виртуальной машины 986
Запуск виртуальной машины 986
Остановка виртуальной машины 989
Удаление виртуальной машины 989
Установка соединения с виртуальной машиной 989
Конфигурационный файл Vagrant 991
Управление оперативной памятью 991
Управление образами 992
Общие папки 992
Проброс порта 993
Установка программного обеспечения 994
Резюме 995
Глава 54. Система контроля версий Git
996
Основы Git 996
Установка Git 999
Установка в Ubuntu 999
Установка в Mac OS X 999
Установка в Windows 1000
Постустановочная настройка 1003
Локальная работа с Git-репозиторием 1003
Инициализация репозитория 1003
Клонирование репозитория 1004
Публикация изменений 1004
История изменений 1006
Игнорирование файлов с помощью .gitignore 1007
Откат по истории проекта 1007
Метки 1012
Ветки 1013
Разрешение конфликтов 1016
Удаленная работа с Git-репозиторием 1018
Удаленный репозиторий GitHub 1018
Получение изменений 1020
Развертывание сетевого Git-репозитория 1021
Резюме 1022
Глава 55. Web-сервер nginx
1023
Установка nginx 1024
Управление сервером 1024
Конфигурационные файлы 1025
Иерархия секций 1028
Виртуальные хосты 1029
Журнальные файлы 1031
Местоположения 1034
Резюме 1037
Глава 56. PHP-FPM
1038
Установка 1038
Управление сервером 1038
Конфигурационные файлы 1039
Подключение к Web-серверу nginx 1042
Резюме 1044
Глава 57. Администрирование MySQL
1045
Установка 1045
Управление сервером 1046
Конфигурационный файл сервера 1047
Выделение памяти MySQL 1050
Пользовательский конфигурационный файл 1054
Создание MySQL-пользователей 1055
Удаленный доступ к MySQL 1055
Привилегии 1056
Восстановление утерянного пароля 1059
Перенос баз данных с одного сервера на другой 1060
Копирование бинарных файлов 1060
Создание SQL-дампа 1061
Резюме 1062

Приложение. HTTP-коды 1063