21 April 2021
Автор: Колисниченко Денис Николаевич
На практических примерах описана разработка Web-приложений на языке PHP версий 5 и 6. Бoльшая часть кода примеров совместима с обеими версиями PHP, но особое внимание уделено новым функциям PHP 6. Даны начала программирования на PHP: установка и настройка PHP и MySQL, выбор редактора PHP-кода, основы синтаксиса и самые полезные функции PHP.
Рассмотрено создание собственного движка сайта и ряда дополнительных модулей - фотогалереи, RSS-граббера, модуля для работы с MP3, модуля автопродажи, гостевой книги, а также применение мощного шаблонизатора Smarty и создание простейшего собственного шаблонизатора. В качестве хранилища данных использованы два сервера - самая современная версия MySQL 6 и "суперлегкий" сервер баз данных SQLite. Описаны две версии самого популярного форума phpBB2 и phpBB3 и способы интеграции с ними создаваемого движка сайта. Показано, как с помощью технологии AJAX добиться обновления данных на странице без ее перезагрузки.
ВВЕДЕНИЕ | 1 |
Немного истории | 1 |
PHP 6 | 2 |
MySQL | 3 |
Поддержка читателей | 4 |
Где взять листинги | 4 |
ЧАСТЬ I. БЫСТРЫЙ СТАРТ | 5 |
ГЛАВА 1. УСТАНОВКА НЕОБХОДИМОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ | 7 |
1.1. Нужно ли устанавливать программное обеспечение | 7 |
1.2. Выбор PHP-редактора и FTP-клиента | 9 |
1.3. Установка Apache + PHP + MySQL в Windows | 12 |
1.4. Установка Apache + PHP + MySQL в Linux | 16 |
1.5. Несколько советов | 17 |
ГЛАВА 2. ПЕРВАЯ PHP-ПРОГРАММА | 18 |
2.1. Ваша первая программа | 18 |
2.2. Запуск PHP-программы | 19 |
2.3. Вывод текста без echo | 20 |
ГЛАВА 3. ОСНОВЫ СИНТАКСИСА PHP | 23 |
3.1. Переменные | 23 |
3.1.1. Правила объявления переменных. Имена переменных | 23 |
3.1.2. Типы данных переменных | 24 |
3.1.3. Булевы переменные | 26 |
3.1.4. Операции над переменными | 27 |
3.1.5. Ссылки | 28 |
3.2. Константы | 29 |
3.3. Выражения и операции | 30 |
3.3.1. Что такое выражение | 30 |
3.3.2. Арифметические операции | 31 |
3.3.3. Логические выражения | 31 |
3.3.4. Приоритеты операций | 32 |
3.3.5. Операторы эквивалентности == и === | 33 |
3.3.6. Операции со строками | 34 |
3.4. Условный оператор | 35 |
3.5. Циклы | 36 |
3.5.1. Цикл со счетчиком | 36 |
3.5.2. Цикл while | 37 |
3.5.3. Цикл do-while | 37 |
3.5.4. Принудительное завершение цикла и пропуск итерации | 38 |
3.6. Оператор выбора switch-case | 39 |
ЧАСТЬ II. ПЕРЕДАЧА ПАРАМЕТРОВ PHP-ПРОГРАММАМ | 41 |
ГЛАВА 4. МЕТОДЫ GET И POST | 43 |
4.1. Интерфейс CGI | 43 |
4.2. Метод GET | 45 |
4.3. Метод POST | 46 |
ГЛАВА 5. ПРОТОКОЛ HTTP И ИНТЕРФЕЙС CGI | 47 |
5.1. Специальные переменные окружения CGI | 47 |
5.2. Заголовки протокола HTTP | 48 |
5.3. Коды ответов протокола HTTP | 50 |
ГЛАВА 6. ПЕРЕДАЧА ПАРАМЕТРОВ ПОСРЕДСТВОМ HTML-ФОРМЫ | 51 |
6.1. Создание простейшей формы и ее обработка в сценарии | 51 |
6.2. Создание пользовательского интерфейса с помощью формы | 54 |
6.2.1. Ввод текста. Теги INPUT и TEXTAREA | 56 |
6.2.2. Зависимые и независимые переключатели | 57 |
6.2.3. Списки выбора | 59 |
6.2.4. Форма для передачи файлов | 61 |
6.2.5. Кнопки | 61 |
6.3. Проверка параметров формы | 62 |
6.3.1. Проверка корректности e-mail | 63 |
6.3.2. Проверка правильности номера кредитной карты | 64 |
6.3.3. Удаление лишних пробелов | 66 |
ГЛАВА 7. ЗАПОМИНАНИЕ ПАРАМЕТРОВ С ПОМОЩЬЮ COOKIES И СЕССИЙ | 67 |
7.1. Что такое Cookies и как с ними работать | 67 |
7.2. Механизм сессий | 70 |
7.2.1. Сессии и Cookies: преимущества и недостатки | 70 |
7.2.2. Для чего нужны сессии | 70 |
7.2.3. Как работает механизм сессий | 72 |
7.2.4. Обход Cookies | 74 |
7.3. Массивы и Cookie | 74 |
ГЛАВА 8. ОТДЕЛЬНОЕ СЛОВО О ДИРЕКТИВЕ REGISTER_GLOBALS | 75 |
8.1. Почему опасно использовать register_globals | 75 |
8.2. Если register_globals отключена | 80 |
8.3. PHP 6 и register_globals | 83 |
ЧАСТЬ III. МАССИВЫ И СПИСКИ | 85 |
ГЛАВА 9. ОСНОВНЫЕ ОПЕРАЦИИ НАД МАССИВАМИ И СПИСКАМИ | 87 |
9.1. Массив и список. Цикл foreach | 87 |
9.2. Функции list() и array() | 89 |
9.3. Удаление массива | 90 |
9.4. Слияние массивов | 91 |
9.5. Функция print_r() | 93 |
ГЛАВА 10. ФУНКЦИИ СОРТИРОВКИ МАССИВОВ | 95 |
10.1. Функции для сортировки массивов | 95 |
10.2. Функция sort() — сортировка списка | 95 |
10.3. Функция asort() — сортировка массива по значениям | 96 |
10.4. Функция ksort() — сортировка по ключам | 97 |
10.5. Функции array_reverse() и shuffle() | 98 |
10.6. Собственная функция сортировки | 99 |
ГЛАВА 11. ОСОБЫЕ ОПЕРАЦИИ НАД МАССИВАМИ | 101 |
11.1. Добавление и удаление элементов массива | 101 |
11.2. Упаковка переменных в массив и их извлечение | 103 |
11.3. Получение части массива | 104 |
ЧАСТЬ IV. ФУНКЦИИ В PHP | 105 |
ГЛАВА 12. ПОЛЕЗНЫЕ СТАНДАРТНЫЕ ФУНКЦИИ | 107 |
12.1. Генератор случайных чисел | 107 |
12.2. Дата и время | 108 |
12.2.1. Кратко о timestamp | 108 |
12.2.2. Функции strtotime() и checkdate() | 109 |
12.2.3. Вывод даты | 110 |
12.3. Математические функции | 112 |
ГЛАВА 13. ФУНКЦИИ ДЛЯ РАБОТЫ СО СТРОКАМИ | 114 |
13.1. Основные строковые функции | 114 |
13.2. Специальные функции замены | 116 |
13.3. Преобразование строки | 116 |
13.4. Функции преобразования кодировок | 118 |
13.5. Функции для работы с отдельными символами строки | 119 |
13.6. Функция md5() | 119 |
13.7. Функция explode(): выделение подстрок | 120 |
ГЛАВА 14. РАБОТАЕМ С ФАЙЛАМИ И КАТАЛОГАМИ | 121 |
14.1. Права доступа в UNIX | 121 |
14.2. Чтение файла | 124 |
14.2.1. Использование функций fopen() и fread() | 124 |
14.2.2. Использование функции file(): построчное чтение файла | 127 |
14.2.3. Чтение всего файла: функция file_get_contents() | 129 |
14.3. Запись файла | 129 |
14.4. Создание временных файлов | 130 |
14.5. Работа с CSV-файлами | 130 |
14.6. Специальные функции для работы с файлами | 133 |
14.6.1. Функции для работы с именами файлов | 133 |
14.6.2. Работа с правами доступа | 134 |
14.6.3. Копирование, переименование и удаление файлов | 135 |
14.6.4. Время доступа к файлу | 136 |
14.6.5. Другие полезные функции | 137 |
14.7. Совместный доступ к файлу | 138 |
14.8. Функции для работы с каталогами | 139 |
ГЛАВА 15. ВЫВОД ГРАФИЧЕСКИХ ИЗОБРАЖЕНИЙ СРЕДСТВАМИ PHP | 141 |
15.1. Библиотека GD | 141 |
15.1.1. Получение информации об изображении | 142 |
15.1.2. Конвертирование графических форматов | 145 |
15.1.3. Вывод текста поверх картинки | 148 |
15.1.4. Прозрачность | 151 |
15.2. Изменение размера изображения | 151 |
15.3. Создание водяных знаков | 153 |
ГЛАВА 16. РАБОТА С СЕТЕВЫМИ СОКЕТАМИ В PHP. СЕТЕВЫЕ ФУНКЦИИ | 156 |
16.1. Еще раз о том, что такое сокет | 156 |
16.2. Использование сокетов | 157 |
16.3. Пример использования сокетов | 158 |
16.4. Блокирующий и неблокирующий режимы сокета | 162 |
16.5. DNS-функции | 162 |
ГЛАВА 17. СОБСТВЕННЫЕ ФУНКЦИИ | 164 |
17.1. Зачем нужны собственные функции | 164 |
17.2. Особенности функций в PHP | 165 |
17.3. Объявление функции | 165 |
17.4. Области видимости функции | 166 |
17.5. Вложенность функций | 167 |
17.6. Переменное число аргументов | 169 |
17.7. Передача массивов в качестве параметров | 170 |
ЧАСТЬ V. СЕРВЕРЫ БАЗ ДАННЫХ MYSQL6 И SQLITE | 171 |
ГЛАВА 18. ОСНОВЫ SQL | 173 |
18.1. Немного истории | 173 |
18.2. Преимущества SQL | 174 |
18.3. Как выглядят запросы | 175 |
18.4. Что такое база данных | 175 |
18.5. Создание таблиц | 177 |
18.6. Добавление записей в таблицу | 181 |
18.7. Обновление записей | 182 |
18.8. Выборка записей | 183 |
18.9. Удаление записей | 184 |
18.10. Встроенные функции | 185 |
18.11. Группировка записей. Сложные запросы | 186 |
ГЛАВА 19. ФУНКЦИИ ДЛЯ РАБОТЫ С MYSQL | 190 |
19.1. Подключение к серверу MySQL | 190 |
19.2. Несколько MySQL-соединений | 192 |
19.3. Передача запросов серверу | 193 |
19.4. Работа с базой данных. Создание базы данных | 198 |
19.5. Функция mysql_real_escape_string($content) | 198 |
ГЛАВА 20. АЛЬТЕРНАТИВНАЯ БАЗА ДАННЫХ SQLITE | 200 |
20.1. MySQL vs SQLite: что лучше | 200 |
20.2. Открытие базы данных | 202 |
20.3. Передача запросов | 203 |
20.4. Работа с результатом запроса | 203 |
20.5. Список PHP-функций для работы с SQLite | 205 |
ГЛАВА 21. ПОЛЕЗНЫЕ ПРИЕМЫ ПРИ РАБОТЕ С MYSQL 6 | 208 |
21.1. Выбор кодировки | 208 |
21.2. Сортировка: вывод новинок | 209 |
21.3. Постраничный вывод таблицы | 210 |
ЧАСТЬ VI. ИНСТРУМЕНТЫ ДЛЯ СОЗДАНИЯ СЛОЖНЫХ ПРОЕКТОВ QLITE | 215 |
ГЛАВА 22. РАЗРАБОТКА СОБСТВЕННОГО ШАБЛОНИЗАТОРА | 217 |
22.1. Организация файлов и каталогов проекта | 217 |
22.2. Выносим параметры в отдельный файл | 220 |
22.3. Подключение дополнительных файлов | 222 |
22.3.1. Инструкции include и require | 222 |
22.3.2. Альтернативный способ подключения сценариев | 222 |
22.3.3. Инструкции include_once и require_once | 224 |
22.4. Шаблоны | 225 |
ГЛАВА 23. ШАБЛОНИЗАТОР SMARTY | 230 |
23.1. Что такое Smarty | 230 |
23.2. Установка Smarty | 231 |
23.3. Создание setup.php | 234 |
23.4. Разработка шаблонов Smarty | 235 |
23.4.1. Комментарии в шаблонах | 235 |
23.4.2. Переменные в Smarty | 236 |
23.4.3. Файлы конфигурации шаблонов | 237 |
23.4.4. Служебная переменная {$smarty} | 238 |
23.4.5. Модификаторы переменных | 240 |
23.4.6. Стандартные (встроенные) функции Smarty | 243 |
23.4.7. Пользовательские функции Smarty | 249 |
23.5. Smarty для программиста | 255 |
23.5.1. Специальные переменные | 255 |
23.5.2. Полезные методы класса Smarty | 258 |
ГЛАВА 24. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ | 259 |
24.1. Основы ООП | 259 |
24.2. Классы и объекты | 260 |
24.3. Конструкторы и деструкторы класса | 263 |
24.4. Наследование классов. Полиморфизм | 264 |
24.5. Новые возможности PHP 6 | 265 |
24.5.1. Область видимости членов класса | 265 |
24.5.2. Абстрактные классы и методы | 266 |
24.5.3. Служебное слово final | 267 |
24.5.4. Клонирование объектов | 268 |
24.5.5. Обработка исключительных ситуаций | 269 |
24.5.6. Константы-члены класса | 270 |
24.5.7. Статические члены класса | 271 |
24.5.8. Оператор instanceof | 271 |
24.5.9. Итераторы | 272 |
24.5.10. Пространства имен | 272 |
ГЛАВА 25. МЕХАНИЗМ СЕССИЙ | 274 |
25.1. Для чего нужны сессии | 274 |
25.2. Как работает механизм сессий | 276 |
25.3. Обход Cookies | 277 |
25.4. Сценарий аутентификации | 278 |
ЧАСТЬ VII. РАЗРАБОТКА ОСНОВНЫХ ЭЛЕМЕНТОВ САЙТА | 283 |
ГЛАВА 26. ЗАГРУЗКА ФАЙЛОВ НА СЕРВЕР | 285 |
26.1. Что нужно знать о загрузке файлов на сервер | 285 |
26.2. Реализация загрузки файла | 288 |
26.3. Загрузка нескольких файлов | 291 |
26.4. Проблемы при загрузке файлов | 292 |
ГЛАВА 27. ИСПОЛЬЗОВАНИЕ FTP-ФУНКЦИЙ | 293 |
27.1. Функции для работы с FTP | 293 |
27.2. Примеры использования FTP-функций | 297 |
ГЛАВА 28. ОТПРАВКА И ПРИЕМ ПОЧТЫ | 300 |
28.1. Отправка почты средствами PHP — функция mail() | 300 |
28.2. Отправка писем с вложениями: класс HtmlMimeMail | 302 |
28.2.1. Отправка сообщения | 302 |
28.2.2. Проблемы при отправке сообщения | 306 |
28.2.3. MIME-типы | 308 |
28.3. Получение писем по протоколу POP3 | 309 |
ГЛАВА 29. РАБОТА С RSS: ПОЛУЧАЕМ НОВОСТИ НА САЙТ | 314 |
29.1. Краткие сведения о RSS | 314 |
29.2. Формат RSS-файла | 315 |
29.3. Написание сценария импорта новостей | 317 |
29.4. Подключение файла import.php к сайту | 321 |
29.5. Создание граббера новостей | 321 |
ГЛАВА 30. ПОИСК С ИСПОЛЬЗОВАНИЕМ РЕГУЛЯРНЫХ ВЫРАЖЕНИЙ | 326 |
30.1. Нужно что-то найти… | 326 |
30.2. Язык регулярных выражений RegEx | 327 |
30.3. Управляющие конструкции | 329 |
30.3.1. Квантификаторы | 329 |
30.3.2. Альтернативный оператор | | 330 |
30.3.3. Скобки | 330 |
30.4. Псевдосимволы | 331 |
30.5. Практическое использование RegEx-функций | 331 |
ГЛАВА 31. РАБОТАЕМ С MP3 | 336 |
31.1. Формат MP3 | 336 |
31.2. Библиотека PEAR | 337 |
31.3. Вывод ID3-тегов | 338 |
31.4. Редактирование ID3-тегов | 340 |
31.5. Удаление тега | 341 |
ГЛАВА 32. ТЕХНОЛОГИЯ AJAX | 343 |
32.1. Что такое AJAX | 343 |
32.2. Ваше первое AJAX-приложение | 344 |
ЧАСТЬ VIII. РАЗРАБОТКА ТИПИЧНОГО САЙТА СРЕДНЕЙ СЛОЖНОСТИ | 349 |
ГЛАВА 33. СОЗДАНИЕ ПРОСТЕЙШЕГО ДВИЖКА САЙТА | 351 |
33.1. Планирование движка | 351 |
33.1.1. Зачем нужно разрабатывать собственный движок | 351 |
33.1.2. Необходимые нам функции движка | 353 |
33.1.3. "Принципиальная схема" движка | 355 |
33.2. Основные функции движка | 357 |
33.2.1. Разработка TPL-шаблона | 357 |
33.2.2. Файл настроек | 358 |
33.2.3. Основной файл CMS — index.php | 359 |
33.2.4. Проектирование базы данных | 361 |
33.2.5. Иерархическая структура сайта | 365 |
33.3. Дополнительные функции движка | 378 |
33.3.1. Вывод информации из таблицы static | 378 |
33.3.2. Функция вывода содержимого HTML-файла | 380 |
33.3.3. Версия для печати | 381 |
33.4. Где взять листинги из этой главы | 382 |
ГЛАВА 34. СОЗДАНИЕ ФОТОГАЛЕРЕИ | 383 |
34.1. Постановка задачи | 383 |
34.2. Загрузка изображений на сервер | 383 |
34.3. Вывод галереи | 388 |
ГЛАВА 35. ГОСТЕВАЯ КНИГА | 392 |
35.1. Пережиток прошлого? | 392 |
35.2. Разработка базы данных и структура гостевой книги | 393 |
35.3. Вывод гостевой книги | 393 |
35.4. Добавление записей в гостевую книгу | 397 |
35.5. Сервисный сценарий gb_service.php | 401 |
ГЛАВА 36. ИНТЕГРАЦИЯ ГАЛЕРЕИ LIVEJOURNAL И ВАШЕГО САЙТА | 403 |
36.1. Что такое Живой журнал | 403 |
36.2. Интеграция фотогалереи LiveJournal и сайта | 405 |
36.3. Настройка внешнего вида галереи | 409 |
ГЛАВА 37. СИСТЕМА АВТОПРОДАЖИ | 411 |
37.1. Суть задачи | 411 |
37.2. Проектирование базы данных | 413 |
37.3. Структура системы объявлений | 415 |
37.4. Сценарий sale_form.php: форма добавления объявления | 416 |
37.5. Сценарий sale_add.php: добавление объявления | 424 |
37.6. Вывод объявлений: sales.php | 428 |
37.7. Подробная информация о машине: show_car.php | 437 |
37.8. Домашнее задание | 443 |
ГЛАВА 38. СОЗДАНИЕ СЧЕТЧИКА САЙТА | 444 |
38.1. Постановка задачи | 444 |
38.2. Файл конфигурации | 445 |
38.3. Разработка таблиц counter и ipaddr | 445 |
38.4. Сценарий counter.php | 447 |
38.5. Сценарий reset_counter.php | 452 |
ГЛАВА 39. СТАТИСТИКА САЙТА | 453 |
39.1. Методы сбора статистики | 453 |
39.2. Программы-анализаторы журналов Web-сервера | 455 |
39.3. Системы статистики | 457 |
ГЛАВА 40. ГОЛОСОВАНИЯ (ОПРОСЫ) | 460 |
40.1. Разработка собственной системы голосования | 460 |
40.2. Разработка сценария poll_form.php | 462 |
40.3. Сценарий poll_process.php | 464 |
40.4. Сценарий poll_results.php | 466 |
ЧАСТЬ IX. ИНТЕГРАЦИЯ САЙТА С ФОРУМАМИ PHPBB2 И PHPBB3 | 471 |
ГЛАВА 41. УСТАНОВКА ФОРУМА | 473 |
41.1. phpBB — самый популярный | 473 |
41.2. Загрузка форума на сайт. Выбор версии | 474 |
41.2.1. Установка phpBB3 | 476 |
41.2.2. Установка phpBB2 | 484 |
ГЛАВА 42. НАСТРОЙКА ФОРУМА И ЕГО ИСПОЛЬЗОВАНИЕ | 487 |
42.1. Русификация форума | 487 |
42.2. Настройка форума phpBB3 | 488 |
42.2.1. Вход на форум и в панель управления | 488 |
42.2.2. Обзор панели управления форумом | 493 |
42.2.3. Общие параметры форума | 495 |
42.2.4. Управление форумами | 502 |
42.2.5. Управление пользователями и группами пользователей | 508 |
42.2.6. Права доступа | 520 |
42.2.7. Стили и их изменение | 520 |
42.2.8. Обслуживание форума | 523 |
42.2.9. Система | 524 |
42.3. Настройка форума phpBB2 | 525 |
42.3.1. Вход в панель | 525 |
42.3.2. Управление форумами | 526 |
42.3.3. Общие настройки форума | 530 |
42.3.4. Настройка внешнего вида форума | 533 |
42.3.5. Чистка форумов | 535 |
42.3.6. Управление пользователями | 536 |
42.3.7. Массовая рассылка сообщений | 541 |
42.3.8. Ограничение доступа к форуму | 541 |
ГЛАВА 43. ИНТЕГРАЦИЯ CMS С ФОРУМОМ PHPBB | 545 |
43.1. Преимущества и недостатки интеграции с форумом | 545 |
43.2. Разработка формы входа | 546 |
43.3. Вывод последних сообщений форума на главной странице | 548 |
43.4. Вывод посетителей онлайн | 552 |
43.5. Изменение названий полей | 554 |
ГЛАВА 44. ИНТЕГРАЦИЯ ПАНЕЛИ УПРАВЛЕНИЯ САЙТОМ | 558 |
44.1. Возможности панели управления | 558 |
44.2. Создание HTML-редактора | 559 |
44.3. Разработка модулей для панели администрирования phpBB | 562 |
44.4. Модуль редактирования таблицы static | 565 |
44.5. Домашнее задание | 572 |
44.6. Бонус: полноценный WYSIWYG-редактор | 573 |
ГЛАВА 45. SSL-СОЕДИНЕНИЯ | 578 |
45.1. Защищаем передаваемые данные | 578 |
45.2. Настройка SSL в DirectAdmin | 579 |
45.3. SSL-переменные | 581 |
ГЛАВА 46. ЗАЩИТА PHP С ПОМОЩЬЮ КОНФИГУРАЦИОННОГО ФАЙЛА | 584 |
46.1. Конфигурационный файл php.ini | 584 |
46.2. Отключение потенциально опасных функций | 586 |
46.3. Рекомендованные значения некоторых конфигурационных директив | 586 |
ГЛАВА 47. ЗАЩИТА САЙТА ОТ АТАК | 588 |
47.1. Сайт в опасности | 588 |
47.2. Два самых распространенных метода взлома | 589 |
47.3. Межсайтовый скриптинг | 590 |
47.4. SQL-инъекции | 592 |
47.5. Флуд | 596 |
ПРИЛОЖЕНИЕ. ПРОГРАММА PHPMYADMIN | 599 |
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ | 601 |
XIV Оглавление XIII Оглавление |