Предисловие | 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 |