Книга представляет собой сборник решений наиболее распространенных задач на PHP. Изложен материал, интересный каждому разработчику: базовые типы данных, операции с ними, файлы cookie, функции PHP, аутен-тификация пользователей, работа со слоями, проблемы безопасности, ускорение действия программ, работа в се-ти, создание графических изображений, обработка ошибок, отладка сценариев и написание тестов. Даны рецеп-ты, затрагивающие основы объектно-ориентированного программирования и новые функциональные возможно-сти PHP. Каждый рецепт является самодостаточным и показывает весь путь решения задачи. Книгу завершают главы об использовании PHP вне рамок Web-программирования. Для специалистов в области информационных технологий. Предыдущее издание издавалось под названием "PHP.
Оглавление
ОБ АВТОРАХ 1 ПРЕДИСЛОВИЕ 3 Для кого эта книга 3 Что вы найдете в этой книге 3 Web-сайты 5 Соглашения, принятые в этой книге 6 Благодарности 6
ГЛАВА 1. СТРОКИ 9 1.1. Обзор 9 1.2. Доступ к подстрокам 12 1.3. Извлечение подстрок 13 1.4. Замена подстрок 15 1.5. Побайтная обработка строк 16 1.6. Перестановка слов или байтов в обратном порядке 18 1.7. Расширение и сжатие позиций табуляции 19 1.8. Управление регистром 21 1.9. Функции и выражения внутри строк 23 1.10. Удаление пробелов из строки 24 1.11. Разделение запятыми данных в строке 25 1.12. Синтаксический анализ разделенных запятыми данных 27 1.13. Генерация записей данных, состоящих из полей фиксированной длины 28 1.14. Анализ записей данных фиксированной длины 29 1.15. Разбиение строк на подстроки 32 1.16. Перенос текста в строке заданной длины 35 1.17. Хранение двоичных данных в строках 36 1.18. Пример программы: загружаемый CSV-файл 39
ГЛАВА 2. ЧИСЛА 43 2.1. Обзор 43 2.2. Проверка, содержит ли переменная допустимое число 44 2.3. Сравнение чисел с плавающей точкой 45 2.4. Округление чисел с плавающей точкой 45 2.5. Работа с последовательностями целых чисел 47 2.6. Генерация случайных чисел в пределах заданного диапазона 48 2.7. Генерация смещенных случайных чисел 50 2.8. Вычисление логарифмов 51 2.9. Вычисление степеней 51 2.10. Форматирование чисел 52 2.11. Форматирование значений денежных единиц 53 2.12. Единственное и множественное число 55 2.13. Вычисление тригонометрических функций в радианах 56 2.14. Вычисление тригонометрических функций в градусах 57 2.15. Обработка очень больших или очень маленьких чисел 57 2.16. Преобразования чисел с разными основаниями 59 2.17. Выполнение вычислений над недесятичными числами 60 2.18. Вычисление расстояния между двумя географическими точками 61
ГЛАВА 3. ДАТА И ВРЕМЯ 63 3.1. Обзор 63 3.2. Обнаружение текущей даты и времени 64 3.3. Преобразование времени и даты к форме timestamp 67 3.4. Преобразование времени к покомпонентному представлению времени и даты 69 3.5. Вывод даты или времени в заданном формате 69 3.6. Временной интервал между двумя датами 74 3.7. Обнаружение разницы двух дат по Юлианскому календарю 76 3.8. Поиск дня недели, месяца или года 78 3.9. Проверка даты 80 3.10. Синтаксический разбор строк даты и времени 81 3.11. Сложение и вычитание дат 84 3.12. Вычисления времени при работе с часовыми поясами 85 3.13. Учет светлого времени дня 91 3.14. Генерация времени высокой точности 92 3.15. Создание диапазонов времени 93 3.16. Использование негригорианского календаря 95 3.17. Использование даты за пределами диапазона эпохи timestamp 99 3.18. Пример программы: Календарь 101
ГЛАВА 4. МАССИВЫ 105 4.1. Обзор 105 4.2. Задание массива, не начинающегося элементом 0 107 4.3. Хранение в массиве нескольких элементов под одним ключом 109 4.4. Инициализация массива для диапазона целых чисел 110 4.5. Выполнение итераций по элементам массива 110 4.6. Удаление элементов из массива 113 4.7. Изменение размера массива 114 4.8. Добавление одного массива к другому 117 4.9. Преобразование массива в строку 118 4.10. Печать массива с запятыми 120 4.11. Проверка присутствия ключа в массиве 121 4.12. Проверка наличия элемента в массиве 121 4.13. Обнаружение позиции значения в массиве 123 4.14. Поиск элементов, удовлетворяющих заданному требованию 124 4.15. Поиск в массиве элемента с наибольшим или наименьшим значением 125 4.16. Изменение порядка следования элементов в массиве на обратный 125 4.17. Сортировка массива 126 4.18. Сортировка массива по вычисляемому полю 127 4.19. Сортировка нескольких массивов 129 4.20. Сортировка массива с применением метода вместо функции 131 4.21. Хеширование массива 131 4.22. Удаление дублирующего элемента из массива 132 4.23. Применение функции к каждому элементу массива 133 4.24. Объединение, пересечение, исключение двух массивов 135 4.25. Обработка объекта как массива 137 4.26. Программа: печать HTML-таблицы с горизонтальными колонками 139
ГЛАВА 5. ПЕРЕМЕННЫЕ 141 5.1. Обзор 141 5.2. Возможные проблемы применения = = или = 142 5.3. Установка значения по умолчанию 142 5.4. Обмен значениями без использования временных переменных 144 5.5. Создание динамического имени переменной 144 5.6. Использование статических переменных 145 5.7. Совместное использование переменных процессами 147 5.8. Инкапсуляция сложных типов данных в строку 151 5.9. Формирование строки как части значения переменной 152
ГЛАВА 6. ФУНКЦИИ 157 6.1. Обзор 157 6.2. Доступ к параметрам функции 158 6.3. Установка значений параметров функции по умолчанию 159 6.4. Передача значений по ссылке 160 6.5. Использование именованных параметров 161 6.6. Функции с переменным числом аргументов 162 6.7. Возвращение значений по ссылке 164 6.8. Возвращение более одного значения 166 6.9. Пропуск выбранных возвращаемых значений 167 6.10. Неудачная попытка выполнения функции 168 6.11. Вызов функций в зависимости от переменной 169 6.12. Доступ к глобальной переменной внутри функции 171 6.13. Создание динамических функций 172
ГЛАВА 7. КЛАССЫ И ОБЪЕКТЫ 173 7.1. Обзор 173 7.2. Создание экземпляров объектов 177 7.3. Определение конструкторов объекта 177 7.4. Определение деструкторов объекта 179 7.5. Выполнение контроля доступа 180 7.6. Предотвращение изменений для классов и методов 182 7.7. Преобразование объекта в строку 183 7.8. Определение интерфейсов 185 7.9. Создание абстрактных классов 187 7.10. Копирование объекта по ссылке 189 7.11. Клонирование объектов 190 7.12. Изменение доступа к свойству в процессе исполнения 193 7.13. Вызов методов по объекту, возвращенному другим методом 196 7.14. Объединение объектов 197 7.15. Доступ к переопределенным методам 200 7.16. Использование полиморфизма 201 7.17. Определение констант класса 203 7.18. Определение статических свойств и методов 205 7.19. Управление сериализацией объекта 207 7.20. Исследование объектов 208 7.21. Проверка, является ли объект экземпляром конкретного класса 212 7.22. Автозагрузка файлов класса при объявлении объекта 214 7.23. Динамическое объявление объекта 216 7.24. Пример программы: whereis 217
ГЛАВА 8. ОСНОВНЫЕ WEB-ПОНЯТИЯ 219 8.1. Обзор 219 8.2. Установка сookies 220 8.3. Чтение значений cookies 221 8.4. Удаление сookies 222 8.5. Переадресация к другому местоположению 223 8.6. Определение браузера 224 8.7. Формирование строки запроса 225 8.8. Чтение тела запроса POST 226 8.9. Создание HTML-таблиц с чередующимися стилями строк 227 8.10. Механизмы авторизации пользователя - базовая аутентификация HTTP и вставочная аутентификация 228 8.11. Использование cookies-аутентификации 232 8.12. Сбрасывание накопленного вывода браузеру 235 8.13. Буферизация вывода браузером 236 8.14. Сжатие результата вывода для Web 237 8.15. Чтение переменных среды 238 8.16. Установка переменных среды 239 8.17. Работа в качестве модуля сервера Apache 240 8.18. Пример программы: активатор/деактиватор учетной записи Web-сайта 241 8.19. Пример программы: Tiny Wiki 243
ГЛАВА 9. ФОРМА 247 9.1. Обзор 247 9.2. Обработка формы ввода 249 9.3. Проверка корректности ввода в форме: обязательное к заполнению поле 250 9.4. Проверка корректности ввода в форме: числа 251 9.5. Проверка корректности ввода в форме: адреса электронной почты 254 9.6. Проверка корректности ввода в форме: выпадающее меню 255 9.7. Проверка корректности ввода в форме: переключатели 257 9.8. Проверка корректности ввода в форме: флажки 258 9.9. Проверка корректности ввода в форме: даты и времена 259 9.10. Проверка корректности ввода в форме: кредитные карточки 260 9.11. Защита сценария 261 9.12. Работа с многостраничными формами 262 9.13. Повторный показ форм со вставленными сообщениями об ошибках 264 9.14. Принятие мер против многократного представления данных одной и той же формы 266 9.15. Обработка выгруженных файлов 268 9.16. Предотвращение внешнего изменения значений глобальной переменной 270 9.17. Обработка удаленных переменных с точкой в их именах 271 9.18. Использование элементов формы с несколькими опциями 272 9.19. Создание выпадающих меню, основанных на текущей дате 273
ГЛАВА 10. РАБОТА С БАЗАМИ ДАННЫХ 275 10.1. Обзор 275 10.2. Применение баз данных DBM 277 10.3. Применение базы данных SQLite 280 10.4. Соединение с базой данных SQL 282 10.5. Запрос к базе данных SQL 284 10.6. Получение строк без цикла 286 10.7. Модификация данных в базе данных SQL 287 10.8. Эффективное повторение запросов 288 10.9. Определение количества строк, возвращенных запросом 291 10.10. Экранирование кавычек 292 10.11. Ведение журнала ошибок и отладочной информации 294 10.12. Создание уникальных идентификаторов 295 10.13. Программное формирование запросов 297 10.14. Постраничные ссылки на последовательность записей 302 10.15. Кэширование запросов и результатов 305 10.16. Обращение к соединению с базой данных из любого места программы 307 10.17. Пример программы: хранение форума 309
ГЛАВА 11. СЕАНСЫ И ПОСТОЯНСТВО ДАННЫХ 317 11.1. Обзор 317 11.2. Отслеживание сеанса 317 11.3. Защита от похищения сеанса 319 11.4. Защита от фиксирования идентификатора сеанса 321 11.5. Хранение сеансов в базе данных 322 11.6. Хранение сеансов в совместно используемой памяти 323 11.7. Хранение произвольных данных в совместно используемой памяти 328 11.8. Кэширование результатов в сводных таблицах 329
ГЛАВА 12. XML 333 12.1. Обзор 333 12.2. Генерирование XML-документа в виде строки 335 12.3. Генерирование XML-документа с помощью DOM 337 12.4. Анализ простейших XML-документов 339 12.5. Анализ сложных XML-документов 342 12.6. Анализ больших XML-документов 344 12.7. Извлечение информации с помощью XPath 350 12.8. Преобразование XML с помощью XSLT 353 12.9. Установка параметров XSLT из PHP 355 12.10. Вызов PHP-функций из таблицы стилей XSLT 357 12.11. Проверка корректности XML-документов 360 12.12. Преобразование кодировки содержимого 362 12.13. Чтение лент новостей RSS и Atom 363 12.14. Создание RSS-лент новостей 365 12.15. Создание Atom-лент новостей 369
ГЛАВА 13. WEB-АВТОМАТИЗАЦИЯ 373 13.1. Обзор 373 13.2. Получение содержимого по URL-адресу с помощью метода GET 374 13.3. Получение содержимого по URL-адресу с помощью метода POST 379 13.4. Получение содержимого по URL-адресу с помощью cookies 381 13.5. Получение содержимого по URL-адресу с помощью произвольных заголовков 383 13.6. Получение содержимого по URL-адресу с применением произвольного метода 384 13.7. Получение содержимого по URL-адресу с использованием тайм-аута 386 13.8. Получение содержимого по URL-адресу через протокол HTTPS 388 13.9. Анализ необработанных данных при обмене по протоколу HTTP 389 13.10. Маркировка элементов Web-страницы 394 13.11. Коррекция ошибочного или нестандартного HTML-кода 397 13.12. Извлечение ссылок из HTML-файла 398 13.13. Преобразование простого текста в HTML-код 400 13.14. Преобразование HTML-кода в простой текст 401 13.15. Удаление тегов HTML и PHP из документа 402 13.16. Ответ на запрос Ajax 403 13.17. Интеграция с JavaScript 405 13.18. Пример программы: поиск устаревших ссылок 409 13.19. Пример программы: поиск обновленных ссылок 411
ГЛАВА 14. ОБРАЩЕНИЕ К WEB-СЛУЖБАМ 415 14.1. Обзор 415 14.2. Вызов метода REST 416 14.3. Вызов метода SOAP с использованием WSDL 417 14.4. Вызов метода SOAP без использования WSDL 419 14.5. Отладка SOAP-запросов 420 14.6. Применение сложных типов SOAP 421 14.7. Определение типов SOAP 422 14.8. Применение заголовков SOAP 423 14.9. Аутентификация и SOAP 425 14.10. Переопределение конечной точки 426 14.11. Обработка ошибок SOAP 428 14.12. Отображение типов XML Schema в PHP-классы 430 14.13. Вызов метода XML-RPC 431 14.14. Аутентификация и XML-RPC 433
ГЛАВА 15. СОЗДАНИЕ WEB-СЛУЖБ 435 15.1. Обзор 435 15.2. Обслуживание метода REST 435 15.3. Обслуживание метода SOAP 441 15.4. Прием аргументов SOAP-метода 444 15.5. Автоматическое генерирование WSDL-файла 445 15.6. Генерирование SOAP-ошибок 446 15.7. Обработка SOAP-заголовка 448 15.8. Генерирование SOAP-заголовка 451 15.9. Аутентификация в SOAP 452 15.10. Обслуживание метода XML-RPC 457
ГЛАВА 16. ИНТЕРНЕТ-СЛУЖБЫ 463 16.1. Обзор 463 16.2. Отправка электронной почты 464 16.3. Отправка MIME-почты 466 16.4. Чтение почты с помощью протокола IMAP или POP3 468 16.5. Отправка сообщений в группы новостей Usenet 470 16.6. Чтение сообщений Usenet 473 16.7. Прием и отправка файлов по протоколу FTP 477 16.8. Просмотр адресов на сервере LDAP 479 16.9. Аутентификация пользователей с помощью LDAP-сервера 481 16.10. Просмотр DNS 483 16.11. Проверка хоста 484 16.12. Получение информации о доменном имени 486
ГЛАВА 17. ГРАФИКА 489 17.1. Обзор 489 17.2. Рисование линий, прямоугольников и многоугольников 492 17.3. Рисование дуг, эллипсов и окружностей 493 17.4. Другие стили линий 495 17.5. Вывод текста 496 17.6. Вывод отцентрированного текста 498 17.7. Построение динамических изображений 502 17.8. Установка и чтение прозрачного цвета 504 17.9. Чтение данных в формате EXIF 505 17.10. Безопасная отправка изображений 507 17.11. Пример программы: генерирование гистограмм по результатам опроса 509
ГЛАВА 18. БЕЗОПАСНОСТЬ И ШИФРОВАНИЕ 513 18.1. Обзор 513 18.2. Предотвращение фиксирования идентификатора сеанса 514 18.3. Защита от подделки формы 515 18.4. Фильтрование входных данных 516 18.5. Защита от межсайтового скриптинга 516 18.6. Защита от SQL-инъекции 517 18.7. Хранение паролей вне каталогов сайта 518 18.8. Хранение паролей 519 18.9. Что делать при утере пароля 520 18.10. Проверка подлинности данных с помощью хешей 522 18.11. Шифрование и дешифрование данных 524 18.12. Хранение зашифрованной информации в файле или базе данных 529 18.13. Обмен зашифрованными данными с другим Web-сайтом 532 18.14. Распознавание SSL 534 18.15. Шифрование электронной почты с помощью GPG 535
ГЛАВА 19. ИНТЕРНАЦИОНАЛИЗАЦИЯ И ЛОКАЛИЗАЦИЯ 537 19.1. Обзор 537 19.2. Получение списка доступных локалей 538 19.3. Использование конкретной локали 539 19.4. Установка локали по умолчанию 540 19.5. Локализация текстовых сообщений 541 19.6. Локализация даты и времени 545 19.7. Локализация обозначений валюты 546 19.8. Локализация изображений 550 19.9. Локализация подключаемых файлов 551 19.10. Управление локализационными ресурсами 552 19.11. Расширение gettext 554 19.12. Установка кодировки символов в выводимых данных 555 19.13. Установка кодировки символов для входных данных 556 19.14. Манипулирование текстом в кодировке UTF-8 556
ГЛАВА 20. ОБРАБОТКА ОШИБОК, ОТЛАДКА И ТЕСТИРОВАНИЕ 561 20.1. Обзор 561 20.2. Поиск и направление синтаксических ошибок 562 20.3. Создание собственных классов исключений 563 20.4. Вывод содержимого стека 566 20.5. Чтение переменных конфигурации 567 20.6. Установка настроек конфигурации 569 20.7. Сокрытие сообщений об ошибках от пользователей 570 20.8. Настройка обработки ошибок 571 20.9. Использование собственного обработчика ошибок 573 20.10. Запись ошибок в журнал 574 20.11. Как избавиться от сообщений "headers already sent" 575 20.12. Запись отладочной информации в журнал 576 20.13. Работа с отладочным расширением 578 20.14. Создание автономного теста 584 20.15. Создание комплекта автономных тестов 586 20.16. Применение автономного теста к Web-странице 588 20.17. Настройка среди тестирования 589 ГЛАВА 21. ПОВЫШЕНИЕ ПРОИЗВОДИТЕЛЬНОСТИ И ТЕСТИРОВАНИЕ НАГРУЗКИ 591 21.1. Обзор 591 21.2. Хронометраж выполнения функции 592 21.3. Хронометраж выполнения программы 593 21.4. Профилирование с помощью расширения Debugger 596 21.5. Тестирование сайта в условиях повышенной нагрузки 599 21.6. Как обойтись без регулярных выражений 600 21.7. Работа с акселератором 601
ГЛАВА 22. РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ 603 22.1. Введение 603 22.2. Переход с ereg на preg 606 22.3. Поиск соответствия словам 607 22.4. Поиск n-го вхождения слова 608 22.5. Выбор между "жадными" и "нежадными" шаблонами 610 22.6. Поиск в файле всех строчек, соответствующих шаблону 612 22.7. Выделение текста внутри HTML-тегов 612 22.8. Как исключить текст, соответствующий подшаблону 614 22.9. Экранирование специальных символов в регулярном выражении 616 22.10. Чтение записей с учетом разделителей 617 22.11. Использование PHP-функции в регулярном выражении 618
ГЛАВА 23. ФАЙЛЫ 623 23.1. Обзор 623 23.2. Создание или открытие локального файла 627 23.3. Создание временного файла 628 23.4. Открытие удаленного файла 629 23.5. Чтение из стандартного потока ввода 630 23.6. Чтение файла в строку 631 23.7. Подсчет строчек, абзацев или записей в файле 632 23.8. Обработка каждого слова в файле 636 23.9. Чтение произвольной строчки файла 637 23.10. "Перетасовка" строчек в файле 638 23.11. Обработка текстовых полей переменной длины 638 23.12. Чтение файлов конфигурации 639 23.13. Редактирование файла без создания временного файла 642 23.14. Сброс содержимого буфера вывода 643 23.15. Запись в стандартный поток вывода 644 23.16. Запись с применением нескольких дескрипторов файлов 645 23.17. Экранирование метасимволов оболочки 646 23.18. Передача входных аргументов программе 647 23.19. Чтение вывода программы через стандартный поток 648 23.20. Чтение вывода программы в стандартный поток сообщений об ошибках 650 23.21. Блокировка файла 651 23.22. Чтение и запись файлов нестандартных типов 654 23.23. Чтение и запись сжатых файлов 658 ГЛАВА 24. КАТАЛОГИ 661 24.1. Обзор 661 24.2. Получение и постановка отметок времени 664 24.3. Получение информации о файле 665 24.4. Изменение прав доступа к файлу и смена владельца 666 24.5. Разбивка имени файла на составляющие элементы 667 24.6. Удаление файла 669 24.7. Копирование или перемещение файла 669 24.8. Обработка всех файлов в каталоге 670 24.9. Получение списка имен файлов по шаблону 672 24.10. Рекурсивная обработка всех элементов каталога 673 24.11. Создание новых каталогов 674 24.12. Удаление каталога и его содержимого 675 24.13. Пример программы: список файлов и каталогов Web-сервера 676 24.14. Пример программы: поиск по сайту 680
ГЛАВА 25. КОМАНДНАЯ СТРОКА PHP 685 25.1. Обзор 685 25.2. Анализ аргументов программы 686 25.3. Анализ аргументов программы методом getopt() 688 25.4. Чтение ввода с клавиатуры 691 25.5. Выполнение PHP-кода для каждой строки входного файла 692 25.6. Чтение паролей 694 25.7. Пример программы: командная оболочка 696
ГЛАВА 26. PEAR И PECL 701 26.1. Обзор 701 26.2. Установщик PEAR 703 26.3. Поиск пакетов PEAR 706 26.4. Поиск информации о пакете 708 26.5. Установка пакетов PEAR 709 26.6. Обновление версий PEAR-пакетов 711 26.7. Удаление PEAR-пакетов из системы 712 26.8. Установка PECL-пакетов 713
В данном практическом руководстве продемонстрирована вся мощь и гибкость языка PHP и даны полезные советы программистам. В этой книге показано, как построить масштабируемую и высокопроизводительную инфраструктуру на языке PHP5, подробно описан набор инструментов, который можно многократно использовать, и приведены многочисленные практические примеры.
В книжке PHP на примерах 2-е изд. Кузнецов рассмотрены приемы программирования на PHP, позволяющие разрабатывать современные эффективные Web-приложения. Использованы многочисленные примеры, взятые из реальной практики. I-е издание книжки под названием "PHP 5 на примерах..