Предисловие | 15 |
| |
| 1. Строки | 23 |
| |
| 1.0. Введение | 23 |
| 1.1. Доступ к подстрокам | 26 |
| 1.2. Замещение подстрок | 27 |
| 1.3. Посимвольная обработка строк | 28 |
| 1.4. Пословный или посимвольный переворот строки | 30 |
| 1.5. Расширение и сжатие табуляций | 30 |
| 1.6. Управление регистром | 32 |
| 1.7. Включение функций и выражений в строки | 34 |
| 1.8. Удаление пробельных символов из строки | 35 |
| 1.9. Анализ данных, разделённых запятой | 36 |
| 1.10. Анализ данных, состоящих из полей фиксированной |
ширины | 37 |
| 1.11. Разбиение строк | 40 |
| 1.12. Упаковка текста в строки определённой длины | 42 |
| 1.13. Хранение двоичных данных в строках | 44 |
| |
| 2. Числа | 47 |
| |
| 2.0. Введение | 47 |
| 2.1. Проверка правильности записи числа в строке | 48 |
| 2.2. Сравнение чисел с плавающей точкой | 49 |
| 2.3. Округление чисел с плавающей точкой | 50 |
| 2.4. Работа с последовательностью целых чисел | 51 |
| 2.5. Генерация случайных чисел в пределах диапазона | 52 |
| 2.6. Генерация случайных чисел со смещением | 54 |
| 2.7. Взятие логарифмов | 55 |
| 2.8. Вычисление степеней | 56 |
| 2.9. Форматирование чисел | 57 |
| 2.10. Правильная печать слов во множественном числе | 57 |
| 2.11. Вычисление тригонометрических функций | 59 |
| 2.12. Тригонометрические вычисления не в радианах, |
а в градусах | 60 |
| 2.13. Работа с очень большими и очень маленькими числами | 61 |
| 2.14. Преобразование из одной системы счисления в другую | 62 |
| 2.15. Вычисления с недесятичными числами | 63 |
| |
| 3. Дата и время | 65 |
| |
| 3.0. Введение | 65 |
| 3.1. Определение текущей даты и времени | 67 |
| 3.2. Преобразование времени и частей времени |
в метку времени UNIX | 70 |
| 3.3. Преобразование метки времени в части времени и даты | 71 |
| 3.4. Вывод на печать даты и времени в определённом формате | 72 |
| 3.5. Определение разности между двумя датами | 77 |
| 3.6. Определение разности между датами юлианского календаря | 79 |
| 3.7. Определение дня недели, месяца, года или номера недели |
в году | 81 |
| 3.8. Проверка корректности даты | 82 |
| 3.9. Выделение дат и времен из строк | 84 |
| 3.10. Сложение и вычитание дат | 87 |
| 3.11. Учёт часовых поясов при определении времени | 88 |
| 3.12. Учёт перехода на летнее время | 93 |
| 3.13. Выработка высокоточного времени | 94 |
| 3.14. Получение интервалов времени | 95 |
| 3.15. Работа с негригорианскими календарями | 96 |
| 3.16. Программа: Календарь | 98 |
| |
| 4. Массивы | 101 |
| |
| 4.0. Введение | 101 |
| 4.1. Определение массива с ненулевым начальным индексом | 104 |
| 4.2. Хранение множества элементов массива с одним ключом | 105 |
| 4.3. Инициализация массива диапазоном целых чисел | 106 |
| 4.4. Перебор элементов массива | 107 |
| 4.5. Удаление элементов из массива | 110 |
| 4.6. Изменение длины массива | 112 |
| 4.7. Добавление одного массива к другому | 114 |
| 4.8. Преобразование массива в строку | 116 |
| 4.9. Печать массивов с запятыми | 118 |
| 4.10. Проверка наличия ключа в массиве | 119 |
| 4.11. Проверка наличия элемента в массиве | 119 |
| 4.12. Определение позиции элемента в массиве | 121 |
| 4.13. Нахождение элементов, удовлетворяющих |
определённому критерию | 122 |
| 4.14. Нахождение элемента массива с наибольшим |
или наименьшим значением | 123 |
| 4.15. Обращение массива | 124 |
| 4.16. Сортировка массива | 125 |
| 4.17. Сортировка массива по вычисляемому полю | 126 |
| 4.18. Сортировка множества массивов | 129 |
| 4.19. Сортировка массива с использованием метода |
вместо функции | 130 |
| 4.20. Рандомизация массива | 131 |
| 4.21. Тасование колоды карт | 132 |
| 4.22. Удаление двойных элементов из массива | 133 |
| 4.23. Определение объединения, пересечения или разности |
двух массивов | 134 |
| 4.24. Определение всех комбинаций элементов массива | 136 |
| 4.25. Нахождение всех перестановок массива | 139 |
| 4.26. Программа: Печать массива в виде HTML-таблицы | 141 |
| |
| 5. Переменные | 145 |
| |
| 5.0. Введение | 145 |
| 5.1. Операторы == и =: как избежать путаницы | 146 |
| 5.2. Установка значения по умолчанию | 147 |
| 5.3. Обмен значениями без временных переменных | 148 |
| 5.4. Создание динамического имени переменной | 149 |
| 5.5. Статические переменные | 150 |
| 5.6. Совместное использование переменных процессами | 152 |
| 5.7. Сериализация данных сложных типов в виде строки | 154 |
| 5.8. Получение дампа содержимого переменных в виде строк | 156 |
| |
| 6. Функции | 160 |
| |
| 6.0. Введение | 160 |
| 6.1. Доступ к параметрам функций | 161 |
| 6.2. Установка значений по умолчанию для параметров функции | 162 |
| 6.3. Передача значений по ссылке | 164 |
| 6.4. Именованные параметры | 165 |
| 6.5. Создание функции, принимающей переменное |
количество аргументов | 167 |
| 6.6. Возвращение значений по ссылке | 169 |
| 6.7. Возвращение более одного значения | 170 |
| 6.8. Пропуск определённых возвращаемых значений | 171 |
| 6.9. Возвращение информации об ошибке | 173 |
| 6.10. Вызов переменных функций | 174 |
| 6.11. Доступ к глобальной переменной внутри функции | 175 |
| 6.12. Создание динамических функций | 177 |
| |
| 7. Классы и объекты | 178 |
| |
| 7.1. Реализация объектов | 182 |
| 7.2. Определение конструкторов объектов | 183 |
| 7.3. Уничтожение объекта | 184 |
| 7.4. Клонирование объектов | 185 |
| 7.5. Присваивание ссылок на объекты | 185 |
| 7.6. Применение методов к объекту, возвращённому |
другим методом | 186 |
| 7.7. Доступ к переопределённым методам | 187 |
| 7.8. Перегрузка свойств | 189 |
| 7.9. Полиморфизм методов | 190 |
| 7.10. Обнаружение методов и свойств объекта | 192 |
| 7.11. Добавление свойств в базовый объект | 194 |
| 7.12. Динамическое создание класса | 195 |
| 7.13. Динамическая реализация объекта | 196 |
| |
| 8. Основы Web | 198 |
| |
| 8.0. Введение | 198 |
| 8.1. Установка cookies | 200 |
| 8.2. Чтение значений cookie | 201 |
| 8.3. Удаление cookies | 202 |
| 8.4. Перенаправление по другому адресу | 203 |
| 8.5. Отслеживание сеанса работы с сайтом | 204 |
| 8.6. Хранение сеансов в базе данных | 205 |
| 8.7. Идентификация различных броузеров | 209 |
| 8.8. Формирование строки запроса GET | 211 |
| 8.9. Применение базовой аутентификации HTTP | 213 |
| 8.10. Аутентификация, основанная на cookies | 216 |
| 8.11. Передача выходной информации в броузер | 218 |
| 8.12. Буферизация вывода в броузер | 219 |
| 8.13. Сжатие веб-вывода с помощью gzip | 220 |
| 8.14. Сокрытие от пользователей сообщений об ошибках | 221 |
| 8.15. Настройка обработки ошибок | 222 |
| 8.16. Применение пользовательского обработчика ошибок | 225 |
| 8.17. Регистрация ошибок | 226 |
| 8.18. Устранение ошибок «headers already sent» |
(заголовки уже посланы) | 227 |
| 8.19. Регистрация отладочной информации | 229 |
| 8.20. Чтение переменных окружения | 231 |
| 8.21. Установка переменных окружения | 232 |
| 8.22. Чтение конфигурационных переменных | 233 |
| 8.23. Установка конфигурационных переменных | 235 |
| 8.24. Взаимодействие в рамках Apache | 235 |
| 8.25. Профилирование программы | 237 |
| 8.26. Программа: (Де)активатор учётной записи на веб-сайте | 240 |
| 8.27. Программа: Контролер злоумышленных пользователей | 242 |
| |
| 9. Формы | 249 |
| |
| 9.0. Введение | 249 |
| 9.1. Обработка информации, полученной из формы | 251 |
| 9.2. Проверка корректности введенных в форму данных | 253 |
| 9.3. Работа с многостраничными формами | 255 |
| 9.4. Повторный вывод форм с информацией и сообщениями |
об ошибках | 258 |
| 9.5. Защита от многократной отправки одной и той же формы | 261 |
| 9.6. Обработка загруженных файлов | 263 |
| 9.7. Организация безопасности обработки форм в PHP | 265 |
| 9.8. Пользовательские данные и escape-последовательности | 267 |
| 9.9. Обработка внешних переменных с точками в именах | 268 |
| 9.10. Использование элементов формы с несколькими |
вариантами значений | 270 |
| 9.11. Создание выпадающих меню на основе текущей даты | 271 |
| |
| 10. Доступ к базам данных | 273 |
| |
| 10.0. Введение | 273 |
| 10.1. Работа с базами данных, состоящих из текстовых файлов | 279 |
| 10.2. Работа с базами данных DBM | 280 |
| 10.3. Соединение с базой данных SQL | 284 |
| 10.4. Выполнение запросов к базе данных SQL | 286 |
| 10.5. Извлечение строк без цикла | 288 |
| 10.6. Модификация данных в базе данных SQL | 291 |
| 10.7. Эффективное повторение запросов | 292 |
| 10.8. Определение количества строк, возвращенных запросом | 294 |
| 10.9. Преобразование кавычек в escape-последовательности | 295 |
| 10.10. Регистрация отладочной информации и ошибок | 297 |
| 10.11. Автоматическое присваивание уникальных значений идентификаторов | 300 |
| 10.12. Программное создание запросов | 301 |
| 10.13. Постраничный вывод большого количества записей | 305 |
| 10.14. Кэширование запросов и результатов | 310 |
| 10.15. Программа: Хранение сообщений форума, разбитых |
на темы | 312 |
| |
| 11. Автоматизация работы с Web | 320 |
| |
| 11.0. Введение | 320 |
| 11.1. Получение содержимого URL методом GET | 322 |
| 11.2. Извлечение содержимого URL с помощью метода POST | 324 |
| 11.3. Получение содержимого URL, если требуется |
отправить cookies | 326 |
| 11.4. Получение содержимого URL, требующее отправки |
заголовков | 328 |
| 11.5. Получение содержимого HTTPS URL | 329 |
| 11.6. Отладка обмена заголовками HTTP | 330 |
| 11.7. Выделение информации на веб-странице | 333 |
| 11.8. Извлечение ссылок из HTML-файла | 334 |
| 11.9. Преобразование ASCII в HTML | 336 |
| 11.10. Преобразование HTML в ASCII | 337 |
| 11.11. Удаление тегов HTML и PHP | 338 |
| 11.12. Использование шаблонов системы Smarty | 339 |
| 11.13. Анализ файла протокола веб-сервера | 341 |
| 11.14. Программа: обнаружение устаревших сылок | 343 |
| 11.15. Программа: Обнаружение свежих ссылок | 345 |
| |
| 12. XML | 349 |
| |
| 12.0. Введение | 349 |
| 12.1. Генерация XML вручную | 352 |
| 12.2. Генерация XML с применением D0M | 354 |
| 12.3. Анализ XML с помощью DOM | 357 |
| 12.4. Анализ XML с помощью SAX | 360 |
| 12.5. Преобразование XML с помощью XSLT | 366 |
| 12.6. Посылка запросов XML-RPC | 369 |
| 12.7. Прием запросов XML-RPC | 372 |
| 12.8. Посылка SOAP-запросов | 376 |
| 12.9. Приём SOAP-запросов | 379 |
| 12.10. Обмен данными с помощью WDDX | 382 |
| 12.11. Чтение RSS-рассылок | 384 |
| |
| 13. Регулярные выражения | 387 |
| |
| 13.0. Введение | 387 |
| 13.1. Переход от ereg к preg | 391 |
| 13.2. Поиск слов | 393 |
| 13.3. Нахождение n-го совпадения | 394 |
| 13.4. Выбор между поглощающим и непоглощающим сравнением | 395 |
| 13.5. Проверка правильности адресов электронной почты | 398 |
| 13.6. Поиск в файле всех строк, соответствующих шаблону | 401 |
| 13.7. Сборка текста, заключ ённого в теги HTML | 402 |
| 13.8. Экранирование специальных символов внутри |
регулярного выражения | 404 |
| 13.9. Чтение записей с шаблоном-разделителем | 405 |
| |
| 14. Шифрование и безопасность | 407 |
| |
| 14.0. Введение | 407 |
| 14.1. Не храните пароли на своём сайте | 409 |
| 14.2. Сокрытие данных при помощи кодирования | 410 |
| 14.3. Проверка данных с помощью хеширования | 410 |
| 14.4. Хранение паролей | 412 |
| 14.5. Проверка надёжности пароля | 414 |
| 14.6. Работа с потерянными паролями | 416 |
| 14.7. Шифрование и дешифрование данных | 417 |
| 14.8. Хранение зашифрованных данных в файле или базе данных | 423 |
| 14.9. Совместное использование зашифрованных данных |
с другим веб-сайтом | 426 |
| 14.10. Обнаружение SSL-соединения | 428 |
| 14.11. Шифрование сообщений электронной почты |
с помощью GPG | 429 |
| |
| 15. Графика | 432 |
| |
| 15.0. Введение | 432 |
| 15.1. Рисование линий, прямоугольников и многоугольников | 436 |
| 15.2. Рисование дуг, эллипсов и окружностей | 438 |
| 15.3. Рисование узорными линиями | 440 |
| 15.4. Рисование текста | 441 |
| 15.5. Рисование центрированного текста | 444 |
| 15.6. Построение динамических изображений | 449 |
| 15.7. Создание и установка прозрачного цвета | 451 |
| 15.8. Безопасная работа с изображениями | 452 |
| 15.9. Программа: создание гистограмм результатов голосования | 454 |
| |
| 16. Интернационализация и локализация | 458 |
| |
| 16.0. Введение | 458 |
| 16.1. Перечень допустимых локалей | 460 |
| 16.2. Использование определённой локали | 460 |
| 16.3. Установка локали по умолчанию | 461 |
| 16.4. Локализация текстовых сообщений | 462 |
| 16.5. Локализация дат и времени | 466 |
| 16.6. Локализация денежных значений | 467 |
| 16.7. Локализация изображений | 470 |
| 16.8. Локализация включаемых файлов | 471 |
| 16.9. Управление ресурсами локализации | 472 |
| 16.10. Расширение gettext | 474 |
| 16.11. Чтение и запись символов Unicode | 475 |
| |
| 17. Интернет-службы | 477 |
| |
| 17.0. Введение | 477 |
| 17.1. Отправка почты | 478 |
| 17.2. Отправка почты в кодировке MIME | 481 |
| 17.3. Чтение почты с помощью IMAP или РОРЗ | 483 |
| 17.4. Отправка сообщений в новостные группы Usenet | 486 |
| 17.5. Чтение новостей из Usenet | 489 |
| 17.6. Получение и размещение файлов с помощью FTP | 494 |
| 17.7. Поиск адресов с помощью LDAP | 497 |
| 17.8. Применение LDAP для аутентификации пользователей | 499 |
| 17.9. Поиск в DNS | 502 |
| 17.10. Проверка функционирования хоста | 503 |
| 17.11. Получение информации о доменном имени | 505 |
| |
| 18. Файлы | 507 |
| |
| 18.0. Введение | 507 |
| 18.1. Создание или открытие локального файла | 511 |
| 18.2. Создание временного файла | 513 |
| 18.3. Открытие удалённого файла | 514 |
| 18.4. Чтение из стандартного потока ввода | 515 |
| 18.5. Чтение файла в строку | 515 |
| 18.6. Подсчёт строк, абзацев или записей в файле | 517 |
| 18.7. Обработка каждого слова в файле | 519 |
| 18.8. Чтение определённой строки в файле | 521 |
| 18.9. Обработка файла по строкам или абзацам |
в обратном направлении | 522 |
| 18.10. Выбор случайной строки из файла | 522 |
| 18.11. Рандомизация всех строк в файле | 523 |
| 18.12. Обработка текстовых полей переменной длины | 524 |
| 18.13. Чтение файлов конфигурации | 525 |
| 18.14. Чтение или запись в определённое место в файле | 528 |
| 18.15. Удаление из файла последней строки | 529 |
| 18.16. Непосредственная модификация файла |
без временной копии | 531 |
| 18.17. Сброс вывода в файл | 532 |
| 18.18. Запись в стандартный поток вывода | 533 |
| 18.19. Запись в несколько файловых дескрипторов одновременно | 534 |
| 18.20. Преобразование метасимволов среды |
в escape-последовательности | 535 |
| 18.21. Передача входной информации в программу | 537 |
| 18.22. Чтение из стандартного потока вывода программы | 537 |
| 18.23. Чтение из стандартного потока ошибок программы | 539 |
| 18.24. Блокировка файла | 540 |
| 18.25. Чтение и запись сжатых файлов | 543 |
| 18.26. Программа: Unzip | 545 |
| |
| 19. Каталоги | 547 |
| |
| 19.0. Введение | 547 |
| 19.1. Получение и установка меток даты/времени файла | 550 |
| 19.2. Получение информации о файле | 551 |
| 19.3. Изменение прав доступа к файлу или его владельца | 553 |
| 19.4. Разделение имени файла на составляющие | 554 |
| 19.5. Удаление файла | 556 |
| 19.6. Копирование и перемещение файла | 556 |
| 19.7. Обработка всех файлов в каталоге | 557 |
| 19.8. Получение списка имён файлов, соответствующих |
шаблону | 558 |
| 19.9. Обработка всех файлов в каталоге | 559 |
| 19.10. Создание новых каталогов | 561 |
| 19.11. Удаление каталога и его содержимого | 563 |
| 19.12. Программа: Перечень каталогов веб-сервера | 564 |
| 19.13. Программа: Поиск сайта | 568 |
| |
| 20. PHP на стороне клиента | 572 |
| |
| 20.0. Введение | 572 |
| 20.1. Анализ аргументов программы | 577 |
| 20.2. Анализ аргументов программы с помощью getopt | 578 |
| 20.3. Чтение ввода с клавиатуры | 582 |
| 20.4. Чтение паролей | 583 |
| 20.5. Показ в окне графических элементов управления | 586 |
| 20.6. Показ в окне нескольких графических элементов |
управления | 587 |
| 20.7. Реакция на действия пользователя | 590 |
| 20.8. Показ меню | 592 |
| 20.9. Программа: Командная оболочка | 595 |
| 20.10. Программа: Служба погоды | 598 |
| |
| 21. PEAR | 607 |
| |
| 21.0. Введение | 607 |
| 21.1. Работа с менеджером пакетов PEAR | 610 |
| 21.2. Нахождение пакетов PEAR | 612 |
| 21.3. Поиск информации о пакете | 613 |
| 21.4. Установка пакетов PEAR | 615 |
| 21.5. Установка пакетов PECL | 616 |
| 21.6. Обновление пакетов PEAR | 618 |
| 21.7. Удаление пакетов PEAR | 619 |
| 21.8. Документирование классов с помощью PHPDoc | 620 |
| |
Алфавитный указатель | 623 |