16 May 2022
Автор: Колисниченко Денис Николаевич
Книга рассчитана на программистов, уже освоивших азы программирования на PHP. Приводятся сведения об отладке, анализе и оптимизации кода. Большая часть книги посвящена практическим моментам PHP-разработки: модификации популярных систем управления контентом и форумов, написанию сценариев-кирпичиков, из которых можно "выстроить" собственный сайт или портал. Рассматриваются возможности объектно-ориентированного программирования на PHP. Отдельное внимание уделено продуктам компании Zend. На прилагаемом компакт-диске находятся все материалы (листинги и программное обеспечение), которые могут понадобиться для работы с книгой.
Введение | 1 |
Что делать, если вы не знаете PHP | 3 |
ЧАСТЬ I. АНАЛИЗ И ОПТИМИЗАЦИЯ КОДА | 5 |
Глава 1. Стиль кодирования | 7 |
1.1. Правила "хорошего тона" | 7 |
1.2. Обрамление PHP-кода | 9 |
1.3. Строки | 9 |
1.4. Правила работы с массивами | 10 |
1.5. Управляющие структуры | 11 |
1.5.1. Конструкция if-else (условный оператор) | 11 |
1.5.2. Циклы | 13 |
1.5.3. Конструкция switch-case | 14 |
1.6. Функции | 15 |
1.7. Комментарии | 16 |
Глава 2. Оптимизация PHP-кода | 18 |
2.1. Правильное использование echo | 18 |
2.2. Длина переменных | 19 |
2.3. Правильное обращение к элементам массива | 20 |
2.4. Циклы | 20 |
2.5. Чтение файлов | 21 |
2.6. Вывод текста: echo против printf | 24 |
2.7. "Лишние" вызовы функций | 26 |
2.8. Контрольные замеры | 27 |
2.8.1. Чтение файла | 28 |
2.8.2. Вывод содержимого файла | 29 |
2.9. Выводы | 30 |
Глава 3. Тестирование PHP-сценариев | 32 |
3.1. Программа работает, но не так, как нам нужно | 32 |
3.2. "Самодельные" точки останова | 33 |
3.3. Система автоматического тестирования | 34 |
3.4. Директива error_reporting | 38 |
ЧАСТЬ II. БЕЗОПАСНОЕ ПРОГРАММИРОВАНИЕ НА PHP | 41 |
Глава 4. Директива register_globals | 43 |
4.1. Почему опасно использовать register_globals | 43 |
4.2. Что делать, если register_globals отключена | 47 |
Глава 5. Безопасность веб-приложений | 50 |
5.1. Сайт в опасности | 50 |
5.2. Два самых распространенных метода взлома | 51 |
5.3. Межсайтовый скриптинг | 52 |
5.4. SQL-инъекции | 53 |
5.5. Флуд | 58 |
Глава 6. Аутентификация на PHP. Сессии | 60 |
6.1. Для чего нужны сессии | 60 |
6.2. Как работает механизм сессий | 61 |
6.3. Обход Cookies | 63 |
6.4. Сценарий аутентификации | 63 |
Глава 7. Система защиты от автоматических регистраций | 69 |
7.1. Необходимость защиты | 69 |
7.2. Алгоритм работы системы защиты | 69 |
7.3. Реализация системы | 70 |
7.4. Усовершенствование системы | 73 |
ЧАСТЬ III. РАБОТА С БАЗОЙ ДАННЫХ | 75 |
Глава 8. Основы SQL | 77 |
8.1. Немного истории | 77 |
8.2. Преимущества SQL | 78 |
8.3. Как выглядят запросы | 79 |
8.4. Что такое база данных | 79 |
8.5. Создание таблиц | 81 |
8.6. Добавление записей в таблицу | 85 |
8.7. Обновление записей | 85 |
8.8. Выборка записей | 87 |
8.9. Удаление записей | 88 |
8.10. Встроенные функции | 88 |
8.11. Группировка записей. Сложные запросы | 89 |
Глава 9. Серверы баз данных MySQL и SQLite | 93 |
9.1. MySQL vs SQLite: что лучше | 93 |
9.2. Функции для работы с MySQL | 95 |
9.2.1. Подключение к серверу MySQL | 95 |
9.2.2. Несколько MySQL-соединений | 97 |
9.2.3. Передача запросов серверу | 98 |
9.2.4. Работа с базой данных | 102 |
9.3. Функции для работы с SQLite | 103 |
9.3.1. Открытие базы данных | 103 |
9.3.2. Передача запросов | 104 |
9.3.3. Работа с результатом запроса | 104 |
9.3.4. Список PHP-функций для работы с SQLite | 105 |
Глава 10. Полезные приемы при работе с базой данных | 108 |
10.1. Выбор кодировки | 108 |
10.2. Сортировка: вывод новинок | 109 |
10.3. Постраничный вывод таблицы | 109 |
ЧАСТЬ IV. ФОРУМЫ И CMS, НАПИСАННЫЕ НА PHP | 115 |
Глава 11. Форум phpBB | 117 |
11.1. Самый популярный форум | 117 |
11.2. Установка форума | 118 |
11.3. Установка языковых пакетов | 119 |
11.4. Панель администрирования форумом | 119 |
11.4.1. Вход в панель | 119 |
11.4.2. Управление форумами | 120 |
11.4.3. Общие настройки форума | 125 |
11.4.4. Настройка внешнего вида форума | 127 |
11.4.6. Чистка форумов | 129 |
11.4.7. Управление пользователями | 130 |
11.4.7.1. "Черные" списки | 130 |
11.4.7.2. Запрещенные имена | 132 |
11.4.7.3. Активация, присвоение званий и удаление пользователей | 132 |
11.4.7.4. Права модератора | 134 |
11.4.8. Массовая рассылка сообщений | 135 |
11.4.9. Ограничение доступа к форуму | 135 |
11.5. Полезные советы | 137 |
11.5.1. Изменение названий полей | 137 |
11.5.2. Поздравление пользователей форума с Днем рождения | 140 |
11.5.3. Расширение возможностей форума | 143 |
11.5.4. Вывод последних тем форума | 145 |
11.5.5. Сценарий "Кто на сайте" | 148 |
Глава 12. Система управления содержимым сайта PHP-Nuke | 151 |
12.1. Управление содержимым сайта | 151 |
12.2. Установка PHP-Nuke | 154 |
12.3. Блоки | 157 |
12.4. Создание модулей | 160 |
12.4.1. Простой модуль | 160 |
12.4.2. Активизация модуля | 164 |
12.4.3. Работа с базой данных | 166 |
12.5. Некоторые полезные модули для PHP-Nuke | 167 |
Глава 13. Система управления контентом Slaed | 172 |
13.1. Знакомство со Slaed | 172 |
13.2. Установка Slaed | 172 |
13.3. Базовая настройка Slaed | 176 |
13.4. Дополнительные темы оформления | 181 |
13.5. Модули для Slaed | 182 |
13.6. Создание собственного модуля | 184 |
ЧАСТЬ V. ТОНКОСТИ ПРОГРАММИРОВАНИЯ НА РНР | 189 |
Глава 14. Загрузка файлов на сервер | 191 |
14.1. Что нужно знать о загрузке файлов на сервер | 191 |
14.2. Реализация загрузки файла | 194 |
14.3. Загрузка нескольких файлов | 196 |
14.4. Проблемы при загрузке файлов | 198 |
Глава 15. Отправка и прием почты | 199 |
15.1. Отправка почты средствами PHP — функция mail() | 199 |
15.2. Отправка писем с вложениями — класс HtmlMimeMail | 201 |
15.2.1. Отправка сообщения | 201 |
15.2.2. Проблемы при отправке сообщения | 205 |
15.2.3. MIME-типы | 206 |
15.3. Получение писем по протоколу POP3 | 207 |
Глава 16. Работа с RSS: получаем новости на сайт | 212 |
16.1. Краткие сведения о RSS | 212 |
16.2. Формат RSS-файла | 213 |
16.3. Написание сценария импорта новостей | 215 |
16.4. Подключение файла import.php к сайту | 218 |
16.5. Создание "граббера" новостей | 219 |
Глава 17. Работа с сетевыми сокетами в PHP | 223 |
17.1. Еще раз о том, что такое сокет | 223 |
17.2. Использование сокетов | 224 |
17.3. Пример использования сокетов | 225 |
17.4. Блокирующий и неблокирующий режимы сокета | 228 |
Глава 18. Использование FTP-функций | 229 |
18.1. Функции для работы с FTP | 229 |
18.2. Примеры использования FTP-функций | 233 |
Глава 19. Мультимедиа в РНР | 236 |
19.1. Библиотека GD | 236 |
19.1.1. Получение информации об изображении | 236 |
19.1.2. Конвертирование графических форматов | 240 |
19.1.3. Вывод текста поверх картинки | 242 |
19.1.4. Прозрачность | 245 |
19.2. Изменение размера изображения | 245 |
19.3. Создание водяных знаков | 247 |
19.4. Расширения для работы с MP3 | 249 |
19.4.1. Формат MP3 | 249 |
19.4.2. Библиотека PEAR | 250 |
19.4.3. Вывод ID3-тегов | 251 |
19.4.4 Редактирование ID3-тегов | 253 |
19.4.5. Удаление тега | 253 |
Глава 20. Интеграция галереи LiveJournal и вашего сайта | 255 |
20.1. Что такое "Живой" журнал | 255 |
20.2. Интеграция фотогалереи LiveJournal и сайта | 256 |
20.3. Настройка внешнего вида галереи | 260 |
Глава 21. Протокол SOAP и распределенные системы | 263 |
21.1. Что это такое | 263 |
21.2. Представление вызовов и ответов в формате XML | 265 |
21.3. MS SOAP Toolkit 3.0 | 268 |
21.4. WSDL-файлы | 269 |
21.4.1. Раздел Schema | 269 |
21.4.2. Раздел Message | 273 |
21.4.3. Раздел PortType | 273 |
21.4.4. Раздел Binding | 275 |
21.4.5. Раздел Service | 276 |
21.5. Класс SoapClient | 277 |
21.5.1. Общие сведения | 277 |
21.5.2. Конструктор __construct() | 277 |
21.5.3. Методы класса SoapClient | 278 |
21.5.3.1. Метод call() | 278 |
21.5.3.2. Метод doRequest() | 279 |
21.5.3.3. Метод getFunctions() | 279 |
21.5.3.4. Метод getLastRequest() | 279 |
21.5.3.5. Метод getLastRequestHeaders() | 280 |
21.5.3.6. Метод getLastResponse() | 280 |
21.5.3.7. Метод getLastResponseHeaders() | 280 |
21.5.3.8. Метод getTypes() | 280 |
21.6. Класс SoapFault | 281 |
21.7. Класс SoapHeader | 283 |
21.8. Класс SoapParam | 285 |
21.9. Класс SoapServer | 286 |
21.9.1. Конструктор класса | 286 |
21.9.2. Методы класса | 287 |
21.9.2.1. Метод addFunction() | 287 |
21.9.2.2. Метод fault() | 288 |
21.9.2.3. Метод getFunctions() | 288 |
21.9.2.4. Метод handle() | 289 |
21.9.2.5. Метод setClass() | 290 |
21.9.2.6. Метод setPersistence() | 291 |
Глава 22. Регулярные выражения | 292 |
22.1. Нужно что-то найти… | 292 |
22.2. Язык регулярных выражений RegEx | 293 |
22.5. Управляющие конструкции | 295 |
22.5.1. Квантификаторы | 295 |
22.5.2. Альтернативный оператор | | 296 |
22.5.3. Скобки | 296 |
22.6. Псевдосимволы | 296 |
22.7. Практическое использование RegEx-функций | 297 |
ЧАСТЬ VI. СЛОЖНЫЕ ПРОЕКТЫ | 301 |
Глава 23. Сложные проекты. Шаблоны | 303 |
23.1. Организация файлов и каталогов проекта | 303 |
23.2. Выносим параметры в отдельный файл | 306 |
23.3. Подключение дополнительных файлов | 307 |
23.3.1. Инструкции include и require | 307 |
23.3.2. Альтернативный способ подключения сценариев | 308 |
23.3.3. Инструкции include_once и require_once | 310 |
23.4. Шаблоны | 310 |
Глава 24. Многоязычность в PHP | 315 |
24.1. Многоязычность как средство увеличения посещаемости | 315 |
24.2. Как реализовать | 316 |
24.2.1. Перевод статической части | 316 |
24.2.2. Перевод страниц сайта | 320 |
Глава 25. Шаблонизатор Smarty | 323 |
25.1. Что такое Smarty | 323 |
25.2. Установка Smarty | 324 |
25.3. Создание setup.php | 326 |
25.4. Разработка шаблонов Smarty | 328 |
25.4.1. Комментарии в шаблонах | 328 |
25.4.2. Переменные в Smarty | 328 |
25.4.3. Файлы конфигурации шаблонов | 329 |
25.4.4. Служебная переменная {$smarty} | 331 |
25.4.5. Модификаторы переменных | 332 |
25.4.6. Стандартные (встроенные) функции Smarty | 335 |
25.4.6.1. Функции {include} и {insert} | 335 |
25.4.6.2.Функция {foreach} | 336 |
25.4.6.3. Функции {if}, {elseif}, {else} | 337 |
25.4.6.4. Функция {capture} | 339 |
25.4.6.5. Функция {php} | 339 |
25.4.6.6. Функция {strip} | 339 |
25.4.7. Пользовательские функции Smarty | 340 |
25.4.7.1. Функция {assign} | 340 |
25.4.7.2. Функция {cycle} | 340 |
25.4.7.3. Функция {fetch} | 340 |
25.4.7.3. Функции {html_checkboxes} и {html_radios} | 341 |
25.4.7.4. Функция {html_image} | 342 |
25.4.7.5. Функция {html_select_date} | 342 |
25.4.7.6. Функция {html_select_time} | 344 |
25.4.7.7. Функция {html_table} | 344 |
25.5. Smarty для программиста | 345 |
25.5.1. Специальные переменные | 345 |
25.5.2. Полезные методы класса Smarty | 347 |
ЧАСТЬ VII. ТЕОРИЯ И ПРАКТИКА ПРОФЕССИОНАЛЬНОГО РНР-ПРОГРАММИРОВАНИЯ | 349 |
Глава 26. Объектно-ориентированное программирование в PHP | 351 |
26.1. Основы ООП | 351 |
26.2. Классы и объекты | 353 |
26.3. Конструкторы и деструкторы класса | 355 |
26.4. Наследование классов. Полиморфизм. | 356 |
26.5. Возможности РНР 5 | 357 |
26.5.1. Область видимости членов класса | 357 |
26.5.2. Абстрактные классы и методы | 358 |
26.5.3. Служебное слово final | 359 |
26.5.4. Клонирование объектов | 360 |
26.5.5. Обработка исключительных ситуаций | 361 |
26.5.6. Константы-члены класса | 362 |
26.5.7. Статические члены класса | 362 |
26.5.8. Оператор instanceof | 363 |
26.5.9. Итераторы | 363 |
Глава 27. Продукты компании Zend | 364 |
27.1. Zend Engine | 364 |
27.2. Zend Platform | 364 |
27.3. Zend Optimizer | 367 |
27.4. Zend Guard | 367 |
27.5. Zend Studio | 368 |
Глава 28. Пишем коммерческий сценарий | 370 |
28.1. Zend Guard: "за" и "против" | 370 |
28.1.1. Установка Zend Guard | 371 |
28.1.2. Быстрая защита сценария | 373 |
28.1.3. Дополнительные возможности защиты | 376 |
28.1.4. Как защищать PHP-приложения | 378 |
28.2. Zend Studio | 379 |
28.2.1. Установка Zend Studio | 379 |
28.2.2. Автодополнение кода | 380 |
28.2.3. Проверка синтаксиса | 380 |
28.2.4. Отладка | 381 |
28.2.5. Меню Tools и Project | 382 |
28.2.6. Файловый менеджер, инспектор кода и средство для работы с БД | 382 |
28.2.7. Информационные окна ZDE | 383 |
28.2.8. Встроенный FTP-клиент | 384 |
28.2.9. Какую версию покупать: Standard или Professional | 385 |
Заключение | 387 |
Приложение. Описание компакт-диска | 389 |
X Оглавление XI Оглавление |