Скляр Д., Трахтенберг А. "PHP. Рецепты программирования" Питер, 2015 год, 784 стр. 3-е изд.

Скляр Д., Трахтенберг А. «PHP. Рецепты программирования» Питер, 2015 год, 784 стр. 3-е изд.

Питер http://www.piter.com/

Третье издание этой популярной книги представляет собой подборку готовых решений наиболее распространенных задач на языке РНР. Изложен материал, интересный каждому разработчику: базовые типы данных, операции с ними, файлы cookie, функции РНР, аутентификация пользователей, работа со слоями, проблемы безопасности, ускорение действия программ, работа в сети, создание графических изображений, обработка ошибок, отладка сценариев и написание тестов. Даны рецепты, затрагивающие основы объектно-ориентированного программирования и новые функциональные возможности РНР.

Каждый рецепт является самодостаточным и показывает весь путь решения задачи. Третье издание книги полностью обновлено под версию PHP 5.4, а также включает ряд новых разделов по работе с данными.
ISBN: 978-5-496-01592-9 Бестселлеры O’Reilly.

Оглавление книги

Предисловие 18
Для кого предназначена эта книга 18
О чем говорится в книге 19
Другие ресурсы 21
Благодарности 22

Глава 1 .Строки 24
1 .0 .Введение 24
1 .1 .Обращение к подстрокам 28
1 .2 .Выделение подстрок 29
1 .3 .Замена подстрок 31
1 .4 .Обработка строки по одному байту 32
1 .5 .Обратная перестановка строки по словам или байтам 34
1 .6 .Генерирование случайной строки 35
1 .7 .Сжатие и свертка табуляций 35
1 .8 .Управление регистром символов 38
1 .9 .Интерполяция функций и выражений в строках 39
1 .10 .Удаление начальных или конечных пропусков в строке 41
1 .11 .Генерирование данных, разделенных запятыми 42
1 .12 .Разбор данных, разделенных запятыми 44
1 .13 .Генерирование записей с полями фиксированной длины 45
1 .14 .Разбор данных с полями фиксированной длины 46
1 .15 .Разбиение строк на фрагменты 49
1 .16 .Перенос текста по заданной длине строки 51
1 .17 .Хранение двоичных данных в строках 52
1 .18 .Программа: загрузка файла в формате CSV 55

Глава 2 .Числа 58
2 .0 .Введение 58
2 .1 .Проверка значения переменной 59
2 .2 .Сравнение чисел с плавающей точкой 60
2 .3 .Округление чисел с плавающей точкой 61
2 .4 .Работа с последовательностями целых чисел 63
2 .5 .Генерирование случайных чисел в заданном диапазоне 65
2 .6 .Генерирование предсказуемых случайных чисел 66
2 .7 .Генерирование случайных чисел с неравномерным распределением 67
2 .8 .Вычисление логарифмов 69
2 .9 .Вычисление экспоненты 70
2 .10 .Форматирование чисел 71
2 .11 .Форматирование денежных сумм 72
2 .12 .Вывод формы множественного числа 73
2 .13 .Вычисление тригонометрических функций 75
2 .14 .Выполнение тригонометрических операций в градусах 76
2 .15 .Работа с очень большими или очень малыми числами 77
2 .16 .Преобразование между системами счисления 79
2 .17 .Математические операции в других системах счисления 80
2 .18 .Определение расстояния между двумя географическими точками 82

Глава 3 .Дата и время 84
3 .0 .Введение 84
3 .1 .Определение текущей даты и времени 86
3 .2 .Преобразование компонентов времени и даты во временную метку 89
3 .3 .Преобразование временной метки в компоненты времени и даты 91
3 .4 .Вывод даты или времени в заданном формате .92
3 .5 .Вычисление разности двух дат 95
3 .6 .Определение дня недели, месяца или года 97
3 .7 .Проверка существования введенной даты 99
3 .8 .Разбор строк даты и времени 101
3 .9 .Операции сложения и вычитания с датами 103
3 .10 .Вычисление времени с учетом часовых поясов и летнего времени 105
3 .11 .Получение времени с высокой точностью 106
3 .12 .Генерирование временных диапазонов 108
3 .13 .Использование негригорианских календарей 109
3 .14 .Программа: календарь 112

Глава 4 .Массивы 117
4 .0 .Введение 117
4 .1 .Определение массивов с начальным индексом, отличным от 0 120
4 .2 .Хранение нескольких элементов для каждого ключа 122
4 .3 .Инициализация массива диапазоном целых чисел 123
4 .4 .Перебор элементов массива 124
4 .5 .Удаление элементов из массива 126
4 .6 .Изменение размера массива 128
4 .7 .Слияние массивов 130
4 .8 .Преобразование массива в строку 132
4 .9 .Вывод массива с разделением запятыми 134
4 .10 .Проверка присутствия ключа в массиве 135
4 .11 .Проверка присутствия элемента в массиве 136
4 .12 .Определение позиции значения в массиве 137
4 .13 .Поиск элементов, удовлетворяющих некоторому условию 138
4 .14 .Поиск элемента с наибольшим или наименьшим значением 140
4 .15 .Перестановка в обратном порядке 141
4 .16 .Сортировка массива 142
4 .17 .Сортировка массива по вычисляемому полю 143
4 .18 .Сортировка нескольких массивов 145
4 .19 .Сортировка массива с использованием метода вместо функции 147
4 .20 .Случайная перестановка 148
4 .21 .Удаление дубликатов из массива 149
4 .22 .Применение функции к каждому элементу массива 150
4 .23 .Вычисление объединения, пересечения и разности двух массивов 152
4 .24 .Эффективный перебор больших или высокозатратных наборов данных 154
4 .25 .Работа с объектом в синтаксисе массива 156

Глава 5 .Переменные 159
5 .0 .Введение 159
5 .1 .Предотвращение путаницы между == и = 161
5 .2 .Определение значения по умолчанию 162
5 .3 .Переключение значений без использования временных переменных 163
5 .4 .Динамическое создание имени переменной 164
5 .5 .Сохранение значения локальной переменной между вызовами функции 166
5 .6 .Совместный доступ к переменным между процессами 167
5 .7 .Строковое представление сложных типов данных 174
5 .8 .Вывод содержимого переменной в строковом виде 176

Глава 6 .Функции 180
6 .0 .Введение 180
6 .1 .Обращение к параметрам функции 181
6 .2 .Определение значений по умолчанию для параметров функции 182
6 .3 .Передача по ссылке 184
6 .4 .Именованные параметры 185
6 .5 .Контроль типа аргументов 186
6 .6 .Создание функций с переменным количеством аргументов 187
6 .7 .Возвращение значений по ссылке 190
6 .8 .Возвращение нескольких значений из функции 192
6 .9 .Пропуск отдельных возвращаемых значений 194
6 .10 .Возвращение признака ошибки 195
6 .11 .Вызов разных функций в зависимости от значения переменной 196
6 .12 .Обращение к глобальной переменной внутри функции 198
6 .13 .Создание динамических функций 200

Глава 7 .Классы и объект .202
7 .0 .Введение 202
7 .1 .Создание объектов 206
7 .2 .Определение конструкторов 207
7 .3 .Определение деструкторов объектов 208
7 .4 .Управление доступом 209
7 .5 .Запрет на изменение классов и методов 212
7 .6 .Определение строкового представления объекта 213
7 .7 .Результат сходного поведения в разных классах 215
7 .8 .Создание абстрактных базовых классов 218
7 .9 .Присваивание ссылок на объекты 221
7 .10 .Клонирование объектов 221
7 .11 .Переопределение обращений к свойствам 224
7 .12 .Вызов методов объекта, возвращаемого другим методом 228
7 .13 .Композиция объектов 230
7 .14 .Обращение к переопределенным методам 233
7 .15 .Динамическое создание методов 235
7 .16 .Полиморфизм методов 236
7 .17 .Определение констант класса 238
7 .18 .Определение статических методов и свойств 240
7 .19 .Управление сериализацией объектов 243
7 .20 .Интроспекция 245
7 .21 .Проверка объекта на принадлежность к определенному классу 249
7 .22 .Автоматическая загрузка файлов классов при создании объекта 251
7 .23 .Динамическое создание объекта 253
7 .24 .Программа: whereis 254

Глава 8 .Основы веб-программирования 256
8 .0 .Введение 256
8 .1 .Запись cookie 257
8 .2 .Чтение cookie 259
8 .3 .Удаление cookie 260
8 .4 .Построение строки запроса 260
8 .5 .Чтение тела запроса POST 262
8 .6 .Использование аутентификации HTTP 262
8 .7 .Аутентификация с использованием cookie 267
8 .8 .Чтение заголовка HTTP 269
8 .9 .Запись заголовка HTTP 271
8 .10 .Отправка конкретного кода статуса HTTP 272
8 .11 .Перенаправление запросов 273
8 .12 .Принудительная отправка вывода браузеру 274
8 .13 .Буферизация вывода 275
8 .14 .Сжатие вывода 277
8 .15 .Чтение переменных окружения 277
8 .16 .Запись переменных окружения 278
8 .17 .Взаимодействие с Apache 280
8 .18 .Перенаправление мобильных браузеров 281
8 .19 .Программа: (де)активизация учетных записей .282
8 .20 .Программа: Tiny Wiki 284
8 .21 .Программа: HTTP Range 287

Глава 9 .Формы 296
9 .0 .Введение 296
9 .1 .Обработка ввода 298
9 .2 .Проверка ввода на форме: обязательные поля 300
9 .3 .Проверка ввода на форме: числа 302
9 .4 .Проверка ввода на форме: адреса электронной почты 304
9 .5 .Проверка ввода на форме: раскрывающиеся меню 305
9 .6 .Проверка ввода на форме: переключатели 307
9 .7 .Проверка ввода на форме: флажки 308
9 .8 .Проверка ввода на форме: дата и время 310
9 .9 .Проверка ввода на форме: кредитные карты 311
9 .10 .Предотвращение межсайтовых сценарных атак 312
9 .11 .Обработка отправленных файлов 314
9 .12 .Работа с многостраничными формами 316
9 .13 .Повторное отображение форм со встроенными сообщениями об ошибках 318
9 .14 .Защита от повторной отправки одной формы 320
9 .15 .Предотвращение внедрения глобальных переменных 322
9 .16 .Работа с переменными, имена которых содержат точки 324
9 .17 .Использование элементов форм с множественным выбором 325
9 .18 .Создание раскрывающихся меню на основании текущей даты 326

Глава 10 .Базы данных 328
10 .0 .Введение 328
10 .1 .Использование баз данных DBM 331
10 .2 .Использование базы данных SQLite 334
10 .3 .Подключение к базе данных SQL 336
10 .4 .Запрос к базе данных SQL 338
10 .5 .Выборка строк данных без цикла 341
10 .6 .Модификация данных в базах данных SQL 341
10 .7 .Эффективное повторение запросов 343
10 .8 .Получение количества строк данных, возвращаемых запросом 346
10 .9 .Экранирование в запросах 347
10 .10 .Работа с журналом отладочной информации и сообщений об ошибках 348
10 .11 .Создание уникальных идентификаторов 350
10 .12 .Программное построение запросов 352
10 .13 .Создание страничных ссылок на серии записей 357
10 .14 .Кэширование запросов и результатов 360
10 .15 .Использование подключения к базе данных в любой точке программы 362
10 .16 .Программа: база данных сообщений интернет-форума 364
10 .17 .Использование Redis 371

Глава 11 .Сеансы и долгосрочное хранение данных 373
11 .0 .Введение 373
11 .1 .Отслеживание сеанса 374
11 .2 .Предотвращение перехвата сеанса 376
11 .3 .Предотвращение фиксации сеанса 377
11 .4 .Хранение сеансовых данных в Memcached 378
11 .5 .Хранение сеансовых данных в базе данных 379
11 .6 .Хранение произвольных данных в общей памяти 382
11 .7 .Кэширование вычисленных результатов в сводных таблицах 385

Глава 12 .XML 388
12 .0 .Введение 388
12 .1 .Генерирование XML в строковом формате 391
12 .2 .Генерирование XML с использованием DOM 393
12 .3 .Разбор базовых документов XML 395
12 .4 .Разбор сложных документов XML 398
12 .5 .Разбор больших документов XML 400
12 .6 .Извлечение информации с использованием XPath 406
12 .7 .Преобразование XML с использованием XSLT 409
12 .8 .Настройка параметров XSLT из PHP 411
12 .9 .Вызов функций PHP из таблиц стилей XSLT 413
12 .10 .Проверка действительности документов XML 417
12 .11 .Преобразование кодировки контента 419
12 .12 .Чтение каналов RSS и Atom 420
12 .13 .Генерирование каналов RSS 423
12 .14 .Генерирование каналов Atom 426

Глава 13 .Автоматизация в веб-приложениях 430
13 .1 .Пометки в веб-страницах 431
13 .2 .Удаление некорректной или нестандартной разметки HTML 433
13 .3 .Извлечение ссылок из файлов HTML 436
13 .4 .Преобразование простого текста в HTML 439
13 .5 .Преобразование HTML в простой текст 440
13 .6 .Удаление тегов HTML и PHP 441
13 .7 .Обработка запросов Ajax 444
13 .8 .Интеграция с JavaScript 446
13 .9 .Программа: поиск устаревших ссылок 449
13 .10 .Программа: проверка актуальности ссылок 452

Глава 14 .Потребление REST-совместимых API 455
14 .0 .Введение 455
14 .1 .Получение данных по URL-адресу методом GET 457
14 .2 .Обращение по URL-адресу с методом POST и данными формы 460
14 .3 .Обращение по URL-адресу с произвольным методом и телом POST 462
14 .4 .Обращение по URL-адресу с cookie 464
14 .5 .Обращение по URL-адресу с произвольными заголовками 466
14 .6 .Обращение по URL-адресу с тайм-аутом 467
14 .7 .Обращение по URL-адресу по протоколу HTTPS 469
14 .8 .Отладка низкоуровневой передачи данных HTTP 470
14 .9 .Выдача запросов OAuth 1 .0 475
14 .10 .Выдача запросов OAuth 2 .0 .476

Глава 15 .Предоставление доступа к REST-совместимым API 480
15 .0 .Введение 480
15 .1 .Предоставление доступа к ресурсу и обработка запроса 483
15 .2 .Использование «чистых» путей для доступа к ресурсам .486
15 .3 .Предоставление доступа к ресурсу для чтения 487
15 .4 .Создание ресурса 490
15 .5 .Редактирование ресурса 494
15 .6 .Удаление ресурса 496
15 .7 .Сообщения об ошибках и сбоях 497
15 .8 .Поддержка нескольких форматов 499

Глава 16 .Сервисы Интернета 503
16 .0 .Введение 503
16 .1 .Отправка почты 504
16 .2 .Отправка почты с контентом MIME 506
16 .3 .Чтение почты с использованием протокола IMAP или POP3 507
16 .4 .Получение и отправка файлов с использованием протокола FTP 512
16 .5 .Поиск адресов с использованием LDAP 514
16 .6 .Использование сервера LDAP для аутентификации пользователей 516
16 .7 .Выполнение поиска DNS 519
16 .8 .Проверка доступности хоста 521
16 .9 .Получение информации о доменном имени 522

Глава 17 .Графика 525
17 .0 .Введение 525
17 .1 .Рисование линий, прямоугольников и многоугольников 529
17 .2 .Рисование дуг, эллипсов и кругов 531
17 .3 .Рисование узорных линий 533
17 .4 .Вывод текста 534
17 .5 .Выравнивание текста по центру 536
17 .6 .Построение динамических изображений 540
17 .7 .Назначение и получение цвета прозрачности 542
17 .8 .Наложение водяных знаков 543
17 .9 .Создание миниатюр 546
17 .10 .Чтение данных EXIF 549
17 .11 .Защита изображений 551
17 .12 .Программа: генерирование гистограммы по результатам опроса 553

Глава 18 .Безопасность и шифрование 557
18 .0 .Введение .557
18 .1 .Предотвращение фиксации сеанса 558
18 .2 .Защита от фальсификации форм 560
18 .3 .Обеспечение фильтрации входных данных 561
18 .4 .Предотвращение межсайтовых сценарных атак 562
18 .5 .Предотвращение внедрения SQL 563
18 .6 .Хранение паролей отдельно от файлов .563
18 .7 .Хранение паролей 564
18 .8 .Восстановление утраченных паролей 568
18 .9 .Проверка данных с использованием хешей 570
18 .10 .Шифрование и дешифрование данных 571
18 .11 .Хранение шифрованных данных в файле или в базе данных 574
18 .12 .Обмен зашифрованными данными с другим сайтом 577
18 .13 .Обнаружение SSL 579
18 .14 .Шифрование электронной почты и GPG 580

Глава 19 .Интернационализация и локализация 583
19 .0 .Введение 583
19 .1 .Определение локального контекста пользователя 585
19 .2 .Локализация текстовых сообщений 586
19 .3 .Локализация даты и времени 589
19 .4 .Локализация числовых данных 593
19 .5 .Локализация денежных сумм .596
19 .6 .Локализация графики 598
19 .7 .Локализация включаемых файлов 599
19 .8 .Сортировка с учетом локального контекста 600
19 .9 .Управление ресурсами локализации 601
19 .10 .Выбор кодировки символов для выходных данных 603
19 .11 .Назначение кодировки символов для входных данных 604
19 .12 .Работа с текстом в кодировке UTF-8 605

Глава 20 .Обработка ошибок 610
20 .0 .Введение 610
20 .1 .Поиск и исправление ошибок разбора 611
20 .2 .Создание классов исключений 613
20 .3 .Вывод трассировки стека 616
20 .4 .Чтение конфигурационных переменных 619
20 .5 .Присваивание значений конфигурационным переменным 621
20 .6 .Сокрытие сообщений об ошибках от пользователей 621
20 .7 .Настройка обработки ошибок 623
20 .8 .Применение пользовательских обработчиков ошибок 626
20 .9 .Регистрация ошибок 627
20 .10 .Устранение ошибок «заголовки уже отправлены» 628
20 .11 .Сохранение отладочной информации 630

Глава 21 .Технология программирования 633
21 .0 .Введение 633
21 .1 .Использование отладочного расширения 633
21 .2 .Написание модульного теста 636
21 .3 .Написание пакета модульных тестов 638
21 .4 .Применение модульного теста к веб-странице 640
21 .5 .Настройка среды тестирования 642
21 .6 .Использование встроенного веб-сервера 643

Глава 22 .Оптимизация 646
22 .0 .Введение 646
22 .1 .Использование акселератора 647
22 .2 .Хронометраж выполнения функций 648
22 .3 .Хронометраж функций 650
22 .4 .Хронометраж по командам 651
22 .5 .Хронометраж по секциям 653
22 .6 .Профилирование с отладочным расширением 655
22 .7 .Нагрузочное тестирование сайта 659
22 .8 .Альтернативы для регулярных выражений 660

Глава 23 .Регулярные выражения 663
23 .0 .Введение 663
23 .1 .Переход с ereg на preg 667
23 .2 .Поиск слов 669
23 .3 .Поиск n-го совпадения 670
23 .4 .Выбор между максимальным и минимальным совпадением 672
23 .5 .Поиск в файле всех строк, соответствующих шаблону 674
23 .6 .Выделение текста из тегов HTML 675
23 .7 .Незахватывающие круглые скобки 677
23 .8 .Экранирование специальных символов в регулярных выражениях 678
23 .9 .Чтение записей с разделителями-шаблонами .679
23 .10 .Использование функции PHP в регулярном выражении 681

Глава 24 .Файлы 683
24 .0 .Введение 683
24 .1 .Создание или открытие локального файла 687
24 .2 .Создание временного файла 688
24 .3 .Дистанционное открытие файла 689
24 .4 .Чтение из стандартного ввода 690
24 .5 .Чтение файла в строку 691
24 .6 .Подсчет строк, абзацев или записей в файле .692
24 .7 .Обработка каждого слова в файле 696
24 .8 .Выбор случайной строки из файла 697
24 .9 .Случайная перестановка всех строк в файле 698
24 .10 .Обработка текстовых полей переменной длины 698
24 .11 .Чтение конфигурационных файлов 700
24 .12 .Изменение файла «на месте» без использования временного файла 702
24 .13 .Сброс буферизованного вывода в файл 704
24 .14 .Запись в стандартный вывод 705
24 .15 .Одновременная запись по нескольким файловым дескрипторам 706
24 .16 .Экранирование метасимволов командного процессора 707
24 .17 .Передача входных данных программе 708
24 .18 .Получение стандартного вывода от программ 709
24 .19 .Получение стандартного потока ошибок от программы 711
24 .20 .Блокировка файла 712
24 .21 .Чтение и запись нестандартных типов файлов 715
24 .22 .Чтение и запись сжатых файлов 719

Глава 25 .Каталоги 721
25 .0 .Введение 721
25 .1 .Чтение и запись временных меток 724
25 .2 .Чтение метаданных 725
25 .3 .Изменение разрешений или владельца файла 727
25 .4 .Получение компонентов имени файла 728
25 .5 .Удаление файла 729
25 .6 .Копирование и перемещение файла 730
25 .7 .Обработка всех файлов в каталоге 730
25 .8 .Получение списка файлов по шаблону 732
25 .10 .Создание новых каталогов 734
25 .11 .Удаление каталога и его содержимого 735
25 .12 .Программа: вывод содержимого каталога веб-сервера 736
25 .13 .Программа: поиск по сайту 740

Глава 26 .PHP в режиме командной строки 743
26 .0 .Введение 743
26 .1 .Разбор аргументов 745
26 .2 .Разбор аргументов функцией getopt 746
26 .3 .Чтение с клавиатуры 748
26 .4 .Выполнение кода PHP для каждой строки входного файла 750
26 .5 .Чтение паролей 752
26 .6 .Консольный вывод в цвете 755
26 .7 .Программа: DOM Explorer 756

Глава 27 .Пакеты 760
27 .0 .Введение 760
27 .1 .Определение и установка зависимостей Composer 763
27 .2 .Поиск пакетов Composer 764
27 .3 .Установка пакетов Composer 766
27 .4 .Использование программы установки PEAR 769
27 .5 .Поиск пакетов PEAR 772
27 .6 .Поиск информации о пакете 774
27 .7 .Установка пакетов PEAR 775
27 .8 .Обновление пакетов PEAR 777
27 .9 .Удаление пакетов PEAR 778
27 .10 .Установка пакетов PECL 780
Об авторах 782

Скачать книгу можете здесь

Похожая литература