Томсон и РАЗРАБОТКА WEB-ПРИЛОЖЕНИЙ НА РНР и MySQL ИЗДАНИЕ ВТОРОЕ исправленное 1 Москва • Санкт-Петербург • Киев 2003 and Web Luke Welling and Laura Thomson SAMS 201 West 103rd Street, Indianapolis, Indiana 46290 Разработка Web-приложений на PHP и MySQL Лаура Томсон и Люк Веллинг дом Москва • Санкт-Петербург • Киев 2003 32.973.2 77 Лаура Разработка Web-приложений на РНР и MySQL: Пер. с Томсон, Люк Вел- — 2-е изд., испр. — СПб: ООО 2003. — 672 с. ISBN 5-93772-090-3 Книга Web-приложений на РНР и MySQL представляет собой всеобъемлющее руковод- ство по совместному применению РНР и MySQL для разработки высокоэффективных и интерактивных Web-сайтов с динамическим содержимым. Несомненным достоинством книги является ее на решение реальных бизнес-задач, что воплощено во множестве типовых примеров, столь часто встречающихся при повседневной разработке. Среди этих примеров создание покупательской тележки для электронных магазинов, аутентификация пользователей, генерация динамических PDF-документов, разработка систем электронной почты через Web, написание систем поддержки Web-форумов. Помимо пошагового анализа реальных бизнес-при- меров, в книге широко рассматривается формальный синтаксис и семантика языка РНР, основы пост- роения приложений баз данных и особенности применения объектно-ориентированной методологии при разработке приложений для Web. Сопровождающий книгу CD-ROM содержит тексты всех примеров, рассмотренных в книге, а также множество материала, который окажется полезным для каждого разработчика Web-приложений. Несмотря на то что книга, в основном, рассчитана на профессиональных программистов и разра- ботчиков, она принесет несомненную пользу и в качестве учебника для кто совершает только первые шаги в бесконечном мире создания приложений для Internet. ББК 32.973.2 Научное издание Лаура Томсон, Люк Веллинг РАЗРАБОТКА WEB-ПРИЛОЖЕНИЙ НА РНР И MYSQL редакцией С.Н.Козлов Научный редактор Верстка Главный дизайнер ООО «ДиаСофтЮП», 196105, Санкт-Петербург, пр. Ю.Гагарина, д. 1, ком. 108. Лицензия №000328 от 9 декабря 1999 Сдано в набор 10.03.2003. Подписано в печать 16.04.2003. Формат Бумага типографская. Гарнитура Тайме. Печать офсетная. Печ.л. 42. Доп. тираж 3000 экз. Заказ № Отпечатано с готовых диапозитивов в ФГУП ордена Трудового Красного Знамени «Техническая книга» Министерства Российской по делам печати, телерадиовещания и средств 198005, Санкт-Петербург, Измайловский пр., 29. Authorized translation from the English language edition, entitled «PHP and MySQL Web Development», published by Sams, Copyright © 2000 All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher, Russian language edition published by DiaSoft Publishing. Copyright © 2003 Лицензия предоставлена издательством Sams Corporation, подразделение Macmillan Computer Publishing. Все права зарезервированы, включая право на полное или частичное воспроизведение в какой то ни было форме. 5-93772-090-3 (рус.) © Перевод на русский язык. ООО «ДиаСофтЮП», 2003 ISBN (англ.) © Sams Corporation, 2000 © Оформление. ООО «ДиаСофтЮП», 2003 Гигиеническое заключение № 77.99.6.953.П.438.2.99 от 04.02.1999 Краткое оглавление Часть 1. Использование РНР 25 Глава 1. Краткий обзор РНР 26 Глава 2. Хранение и получение данных 59 Глава 3. Использование массивов 75 Глава 4. Манипулирование строками и регулярные выражения 95 Глава 5. Повторное использование кода и создание функций Глава 6. Объектно-ориентированное программирование на РНР Часть 2. Использование MySQL 157 Глава 7. Проектирование Web-баз данных 158 Глава 8. Создание Web-базы данных Глава 9. Работа с базой данных MySQL 187 Глава 10. Доступ к базе данных MySQL из Web с помощью РНР 203 Глава 11. Дополнительные возможности MySQL 216 Часть 3. Системы электронной торговли и 232 Глава 12. Эксплуатация сайта электронной коммерции 233 Глава 13. Вопросы безопасности в электронной коммерции 245 Глава 14. Аутентификация с помощью РНР и MySQL 265 Глава 15. Реализация безопасных транзакций в РНР и MySQL 283 Часть 4. Усложненные технологии применения РНР 301 Глава 16. Взаимодействие с файловой системой и сервером 302 Глава 17. Использование функций работы с сетью и протоколами Глава 18. Управление датой и временем 333 Глава 19. Создание изображений 340 Глава 20. Управление сеансами в РНР 361 Глава 21. Другие полезные свойства РНР 374 Оглавление Часть 5. Разработка практических приложений на РНР и MySQL 380 Глава 22. Применение РНР и MySQL при разработке крупных проектов Глава 23. Отладка 396 Глава 24. Аутентификация и пользователей Глава 25. покупательской тележки 441 Глава 26. Построение системы управления содержимым 477 Глава 27. Построение почтовой службы, основанной на Web 500 Глава 28. Создание менеджера списков рассылки 529 Глава 29. Создание Web-форумов 571 Глава 30. Генерация персонифицированных документов в формате переносимых документов (PDF) 596 Часть 6. Приложения 626 Приложение А. Инсталляция РНР 4 и MySQL 627 Приложение В. Ресурсы Internet 645 Предметный указатель 648 Оглавление Оглавление Часть 1. Использование РНР 25 Глава 1. Краткий обзор РНР 26 Использование РНР 27 Пример приложения: Auto Parts 27 Форма заказа 27 Обработка формы 29 Встраивание РНР в HTML 29 Использование PHP-дескрипторов 30 Стили PHP-дескрипторов 30 PHP-операторы 31 Пробелы 31 Комментарии 32 Добавление динамического 33 Вызов функций 33 Функция date() 33 Доступ к переменным формы 34 Переменные формы 34 Конкатенация строк 35 Переменные и литералы 35 Идентификаторы 36 Переменные, объявляемые 36 Присвоение значений переменным 36 Типы переменных 36 Типы данных РНР 37 Преимущества типов 37 Приведение типов 37 Переменные переменных 38 Константы :.... 38 Область действия переменных 39 Знаки операций 39 Арифметические операции 39 Строковые операции 40 Операции присваивания 40 Операции сравнения Логические операции 44 Поразрядные операции 44 Другие операции 45 Использование операций: вычисление итога по форме 46 Приоритет и ассоциативность: вычисление выражений 47 Функции для работы с переменными 48 Проверка и установка типов переменных 48 Проверка состояния переменных 49 Повторная интерпретация переменных 50 Управляющие структуры 50 Принятие решений с помощью условных операторов 50 Операторыif 50 Блоки кода 51 Примечание: выравнивание кода при помощи отступов 51 Операторы else 51 Операторы elseif 52 Операторы switch 52 Сравнение различных условных 54 Итерация: повторение действий 54 Циклы while 55 Циклы for 56 Циклы 57 Выход из управляющей структуры или сценария 58 Глава 2. Хранение и получение данных 59 Сохранение данных с целью дальнейшего использования 60 Сохранение и получение заказов в компании Боба 60 Обзор обработки файлов 61 Открытие файла 61 Режимы файлов 61 Использование функции для открытия файла 61 Открытие удаленных файлов через FTP или 63 8 Оглавление возникающие при открытии файлов 64 Запись в файл 65 Параметры функции 65 Форматы файлов 65 Закрытие файла 66 Считывание из файла 67 Открытие файла для чтения: 68 Определение конца файла: feof() 68 Построчное считывание: и 68 Считывание всего файла: file() 69 Считывание символа: fgetc() 70 Считывание строк произвольной длины: 70 Другие полезные файловые функции 70 Проверка существования файла: file_exists() 70 Выяснение размера файла: 71 Удаление файла 71 Перемещение внутри файла: fseek и 71 Блокирование файлов 72 Более рациональный способ обработки: системы управления базами данных 73 Проблемы, связанные с использованием двумерных файлов 73 Как эти проблемы решаются с помощью СУРБД 74 Глава 3. Использование 75 Что такое массив 76 Численно индексированные массивы 76 Инициализация численно индексированных массивов 76 Доступ к содержимому массива 77 Использование циклов для доступа к массиву 78 Ассоциативные массивы 78 Инициализация ассоциативного массива 78 Доступ к элементам массива 78 Организация циклов с использованием и list() 79 Многомерные массивы 80 Сортировка массивов 83 Использование функции 83 Использование функций и для сортировки ассоциативных массивов 83 Сортировка в обратном порядке 83 Сортировка многомерных массивов 84 Определяемые пользователем функции сортировки 84 Определяемые пользователем функции сортировки в обратном порядке 85 Изменение порядка следования элементов в массивах 86 Использование функции 86 Использование функции array_reverse() 87 Загрузка массивов из файлов 88 Другие манипуляции с массивами 90 Перемещение внутри массива: функции each, end(), next(), pos() и prev() 90 Применение любой функции к каждому элементу массива: array_walk() 91 Подсчет элементов в массиве: функции и 92 Преобразование массивов в скалярные переменные: функция 93 Глава 4. Манипулирование строками и регулярные выражения 95 Пример приложения: Smart Form Mail 95 Форматирование строк 97 Усечение строк: функции chop(), ltrim() и trim() 97 Форматирование строк для 98 Форматирование строк для хранения: функции и StripSlashes() Объединение и разделение строк с помощью строковых функций 101 Использование функций и join() 102 Использование функции 102 Использование функции substr() 103 Сравнение строк 104 Упорядочение строк: функции strcasecmp() и 104 Оглавление Проверка длины строки с помощью функции 104 Сопоставление и замена подстрок с помощью строковых функций 105 Поиск строк в строках: функции strchr(), stristr() 105 Определение позиции подстроки: функции 106 Замена подстрок; str_replace(), 107 Введение в регулярные выражения 108 Наборы символов и классы 108 Повторение Подвыражения Подсчитываемые подвыражения Привязка к началу или концу строки Ветвление Сопоставление с литеральными значениями специальных символов Краткое описание специальных символов Использование регулярных выражений в приложении Smart Form Поиск подстрок с помощью регулярных выражений Замена подстрок с помощью регулярных выражений 113 Разделение строк с помощью регулярных выражений Сравнение строковых функций и функций регулярных выражений 114 Глава 5. Повторное использование кода и создание функций 115 Для чего повторное использование кода? 116 Стоимость Надежность Единообразие '. Использование операторов и 116 Использование оператора Расширения имен файлов и оператор PHP-дескрипторы и оператор Использование оператора для шаблонов Web-сайта Использование директив и 122 Использование оператора 123 Использование функций в 125 Вызов функций 125 Обращение к неопределенной функции 126 Регистр и имена функций 127 Для чего нужно определять собственные функции? Базовая структура функции 128 Именование функций 128 Параметры Область действия 131 Передача по ссылке и передача по значению 133 Возврат из функций 134 Возврат значений из функций 135 Блоки кода 136 Рекурсия Глава 6. Объектно-ориентированное программирование на РНР 139 Концепции объектно-ориентированного программирования Классы и объекты 140 Полиморфизм 141 Наследование 141 Создание классов, атрибутов и операций в РНР 142 Структура класса 142 Конструкторы 142 Создание экземпляров класса 143 Использование атрибутов класса 143 Вызов операций класса 145 Реализация наследования в РНР 146 Перекрытие 146 Множественное наследование 148 Разработка классов 148 Написание кода класса 149 10 Оглавление 2. Использование 157 Глава Web-баз данных 158 Общее представление о реляционных базах данных 159 Таблицы 159 Столбцы 159 Строки 159 Значения 160 Ключи 160 Схемы 161 Отношения 161 Как спроектировать собственную Web-базу данных 162 Подумайте о реальных объектах, которые вы моделируете 162 Избегайте хранения избыточной информации 163 Используйте атомарные значения . Выбирайте подходящие ключи 164 Подумайте над вопросами, которые потребуется задать базе данных 165 Избегайте проектов с большим количеством пустых атрибутов 165 Типы таблиц 165 Архитектура Web-баз данных 166 Архитектура 166 Глава 8. Создание Web-базы данных 168 Замечания к использованию монитора MySQL Вход в систему MySQL 170 Создание баз данных и подключение пользователей 171 Создание базы данных 171 Пользователи и привилегии 171 Знакомство с системами привилегий MySQL 171 Принцип наименьших привилегий 172 Установка пользователей: команда GRANT. 172 Типы и уровни привилегий 173 Команда Установка пользователя для доступа из Web 176 Выход из системы пользователя root 176 Использование требуемой базы 176 Создание таблиц баз данных 177 Что означают другие ключевые слова 178 Что означают типы столбцов 178 Просмотр базы данных с помощью команд SHOW и DESCRIBE 180 Идентификаторы MySQL 181 Типы данных столбцов 182 Числовые типы 182 Глава 9. Работа с базой данных MySQL 187 Что такое SQL? '... 187 Вставка данных в базу данных 188 Извлечение данных из базы данных 189 Извлечение данных по определенному критерию 191 Извлечение данных из нескольких Использование других имен таблиц: псевдонимы 196 Извлечение данных в определенном порядке 197 Группировка и агрегирование данных 198 Выбор количества отображаемый строк 199 Обновление записей в базе данных 200 Изменение таблиц после создания 200 Удаление записей из базы данных 202 Удаление таблиц 202 Удаление целой базы данных 202 Глава 10. Доступ к базе данных MySQL из Web с помощью РНР 203 Как работает архитектура Web-баз 204 Основные шаги выполнения запросов к базе данных через Web 206 Проверка и фильтрация данных, исходящих от пользователя 207 Установка соединения 207 Выбор базы данных 209 Выполнение запроса к базе данных 209 Получение результатов запроса 210 Оглавление 11 Отсоединение от базы данных 211 Внесение новой информации в базу данных 211 Прочие полезные функции Освобождение ресурсов 214 Создание и удаление баз данных 214 Другие интерфейсы PHP-баз данных 214 Глава 11. Дополнительные возможности MySQL 216 Детальное описание системы привилегий 216 Таблица user 217 Таблицы db и host 218 Таблицы tables_priv и Управление доступом: как MySQL использует таблицы привилегий 220 Обновление привилегий: когда изменения вступают в силу? 221 Обеспечение безопасности баз данных MySQL 221 MySQL с точки зрения операционной системы 221 Пароли 222 Привилегии пользователей 222 Тонкости Web 223 Получение дополнительной информации о базах данных 223 Получение информации с помощью SHOW 223 Получение информации о столбцах с помощью DESCRIBE 225 Как запросы работают с EXPLAIN 225 Ускорение использования базы данных при помощи индексов 229 Советы по оптимизации 229 Оптимизация проектирования 229 Права доступа 229 Оптимизация таблиц 229 Применение индексов 230 Использование значений, принятых по умолчанию 230 Применяйте постоянные соединения 230 Другие советы 230 Различные типы таблиц 230 Загрузка данных из файла 231 Часть 3. Системы электронной торговли и безопасность 232 Глава 12. Эксплуатация сайта электронной коммерции 233 Преследуемые цели 233 Типы коммерческих Web-сайтов 234 Сетевые брошюры 234 Прием заказов на товары и услуги 237 Предоставление услуг и цифровой продукции 240 Дополнительные товары и услуги 241 Снижение расходов 241 Риски и угрозы 242 Взломщики 242 Невозможность привлечения 243 Отказы оборудования 243 Сбои питания, коммуникационных линий или сети, отказы службы доставки 243 Интенсивная конкуренция 243 Сбои программного обеспечения 244 в политике и 244 Ограниченная пропускная способность системы , 244 Глава 13. Вопросы безопасности в электронной коммерции 245 Насколь важна ваша информация? 246 Угрозы безопасности 246 Вскрытие конфиденциальных данных 247 Потеря или разрушение данных 248 Изменение данных 249 Отказ в обслуживании 250 Ошибки программного обеспечения 251 Отказ от обязательств 252 Достижение баланса между практичностью, стоимостью и защитой 253 Разработка стратегии защиты 254 Принципы аутентификации 254 Использование аутентификации 255 Основы шифрования 256 12 Оглавление Шифрование с закрытым ключом 257 Шифрование с открытым ключом 258 Цифровые подписи 258 Цифровые сертификаты 259 Безопасные Web-серверы 260 Аудит и регистрация 262 Брандмауэры 262 Резервное копирование данных 263 Резервное копирование общих файлов 263 Резервное копирование и восстановление баз данных MySQL 263 Физическая безопасность 264 Глава 14. Аутентификация с помощью РНР и MySQL 265 Идентификация пользователей 265 Реализация контроля доступа 266 Хранение паролей 268 Шифрование паролей 270 Защита множества страниц 271 Базовая аутентификация 272 Использование базовой аутентификации в РНР 273 Использование базовой аутентификации при помощи файлов сервера Apache .. 274 Использование базовой аутентификации в IIS 277 Использование аутентификации через модуль 279 Установка модуля 279 Заработало? 280 Использование модуля 281 Создание собственного метода аутентификации 281 Глава 15. Реализация безопасных транзакций в РНР и MySQL 283 Обеспечение безопасности транзакций 283 Пользовательская машина 284 Internet 285 Ваша система ... 286 Использование слоя безопасных Проверка данных, вводимых 290 Обеспечение безопасного хранения Зачем хранить номера кредитных карточек? 292 Использование шифрования в РНР 292 Инсталляция GPG 293 Тестирование GPG 295 Часть 4. Усложненные технологии применения РНР 301 Глава 16. Взаимодействие с файловой системой и сервером Основы загрузки файлов на сервер 302 HTML-код загрузки файлов на сервер 303 Реализация PHP-кода для работы с файлом 304 Часто возникающие затруднения 307 Использование функций работы с каталогами 307 Считывание из каталогов 307 Получение сведений о текущем 309 Создание и удаление каталогов 309 Взаимодействие с файловой системой 310 Считывание информации из файла 310 Изменение свойств файла 312 Создание, перемещение и удаление файлов 312 Функции запуска программ 313 Взаимодействие со средой: getenv() и putenv() 314 Глава 17. Использование функций работы с сетью и протоколами 316 Обзор доступных протоколов 316 •Отправка и получение почты 317 Использование других Web-служб через 317 Применение функций сетевого поиска 320 Использование FTP 323 Использование FTP для создания резервной или зеркальной копии файла 323 Оглавление 13 Загрузка файлов на сервер 329 Как избежать тайм-аутов 329 Другие функции работы с 329 Использование общих сетевых соединений с помощью библиотеки cURL 330 Глава 18. Управление датой и временем 333 Получение даты и времени средствами РНР 333 Использование функции date() 333 Работа с метками времени UNIX 335 Использование функции 335 Проверка правильности дат 336 Преобразования даты в форматах РНР и MySQL 336 Операции над датами 338 Использование календарных функций 338 Глава 19. Создание изображений Настройка поддержки изображений в РНР . 340 Форматы изображений 341 JPEG 341 PNG 341 342 GIF 342 Создание изображений 343 Создание холста 344 Рисование или вывод текста в изображение 344 Вывод окончательного рисунка 346 Освобождение ресурсов 347 Использование автоматически создаваемых изображений на других страницах 347 Использование текста и шрифтов при создании изображений 347 Настройка холста 350 Подбор размера текста на кнопке 350 Позиционирование текста 352 Вывод текста на кнопку 353 Заключительные действия 353 Рисование фигур и построение графиков 353 Другие функции обработки изображений 359 Глава 20. Управление сеансами РНР 361 Что такое управление сеансом 361 Основные функциональные средства управления сеансом 362 Что такое cookie-набор? 362 Установка cookie-наборов из РНР 363 Использование в 363 Сохранение идентификатора сеанса 364 Реализация управления простым сеансом 364 Запуск сеанса 364 Регистрация переменных сеанса 365 Использование переменных сеанса 365 Отмена регистрации переменных и завершение сеанса 365 Пример простого сеанса 366 Конфигурирование управления сеанса 368 Выполнение аутентификации пользователей средствами управления сеансом 368 Глава 21. Другие полезные свойства РНР 374 Использование магических кавычек 374 Выполнение команд, содержащихся в строке, - функция eval() 375 Прерывание выполнения: die и exit 376 Сериализация 376 Получение информации о рабочей среде РНР 377 Определение загруженных расширений 377 Определение владельца сценария 378 Определение даты последнего изменения сценария 378 Динамическая загрузка расширений 378 Временное изменение среды исполнения 378 Выделение элементов исходного кода 379 14 Оглавление 5. Разработка практических приложений на РНР и 380 Глава 22. Применение РНР и MySQL при разработке крупных проектов . 381 Применение методов проектирования программного обеспечения при разработке Web-приложений 382 Планирование и сопровождение проекта Web-приложения 382 Повторное использование кода 383 Написание удобного для сопровождения кода 384 Стандарты написания кода 384 кода 387 Использование стандартной структуры каталогов 387 Документирование и распределение функций собственной разработки 387 Управление версиями 388 Выбор среды разработки 389 Документирование проектов 390 Создание прототипов 391 Разделение логики и содержимого 392 Оптимизация кода 392 Использование простой оптимизации 392 Использование продуктов компании 393 Тестирование 394 Дополнительная информация 395 Что дальше 395 Глава 23. Отладка 396 Программные ошибки 396 Синтаксические ошибки 397 Ошибки времени выполнения 398 Логические ошибки 402 Вспомогательное средство отладки переменных 404 Уровни сообщений об ошибках 405 Изменение настроек сообщений об ошибках 406 Генерация собственных ошибок 408 Эффективная обработка ошибок 408 Удаленная отладка Глава 24. Аутентификация и пользователей 411 Задача Компоненты решения 412 Идентификация и персонализация пользователей 412 Хранение закладок 413 Рекомендация закладок 413 Обзор проекта 413 Реализация базы данных 415 Реализация основы сайта 416 Аутентификация пользователей 418 Регистрация 418 Вход в систему 423 Выход из системы 426 Смена паролей 427 Переустановка забытых паролей 428 Хранение и извлечение закладок 432 закладок 432 Отображение закладок 434 Удаление закладок 434 Выработка рекомендаций 436 Заключение и возможные расширения 440 Глава 25. Создание покупательской тележки 441 Задача 442 Компоненты решения 442 Построение интерактивного каталога 442 Отслеживание выбираемого товара 442 Платежи 443 Интерфейс администрирования 443 Обзор решения 443 Реализация базы данных 447 Реализация интерактивного каталога 449 Список категорий 451 Список книг в категории 453 Отображение информации о книгах 454 Оглавление 15 Реализация покупательской тележки 455 Использование сценария 456 Просмотр содержимого тележки 458 Добавление элементов в тележку 460 Сохранение изменений содержимого тележки 462 Печать итоговых данных в строке заголовка 462 Выполнение расчета 463 платежа 467 Реализация интерфейса администрирования 469 Расширение проекта 475 Использование существующей системы .... 476 Глава 26. Построение системы управления содержимым 477 Задача 477 Требования к проекту 478 Редактирование содержимого 478 Ввод содержимого в систему 478 FTP 478 Преимущество баз данных перед файлами для хранения содержимого 479 Структура документов 479 Использование метаданных 480 Форматирование вывода 480 Управление изображениями 481 Обзор проекта 483 Создание базы данных 484 Реализация 486 Интерфейсная часть 486 Прикладная часть 488 Поиск статей 495 Окно редактора 498 Расширение проекта 499 Глава 27. Построение почтовой службы, основанной на Web 500 Задача 500 Компоненты решения '.. 501 Обзор проекта 502 Создание базы данных 503 Архитектура сценария 505 Вход и выход из системы 509 Создание учетных записей 511 Создание новой учетной записи 513 Изменение существующей учетной записи Удаление учетной записи 515 Чтение почтовых сообщений 516 Выбор учетной записи 516 Просмотр содержимого почтового 518 Чтение почтовых сообщений 521 Просмотр заголовков сообщений 523 Удаление почтовых сообщений 524 Отправка почты 525 Отправка нового сообщения 525 Ответ на сообщение или переадресация 527 Расширение проекта 528 Глава 28. Создание менеджера списков рассылки 529 Задача 530 Компоненты решения 530 Определение базы данных списков и подписчиков 530 Загрузка файлов 531 Отправка сообщений электронной почты с присоединениями 531 Обзор решения 531 Создание базы данных 533 Архитектура сценария 535 Реализация регистрации 542 Создание новой учетной записи 542 Регистрация 544 Реализация функций пользователя 547 Просмотр списков рассылки 547 Просмотр сведений о списке рассылки 551 Просмотр архивов списков рассылки 553 Подписка и отмена подписки 554 Изменение параметров настройки учетной записи 555 Изменение паролей 555 Выход из системы 557 16 Оглавление Реализация функций администратора 557 Создание нового списка рассылки 558 Загрузка нового информационного 559 Выполнение загрузки нескольких 562 Предварительный просмотр информационного бюллетеня 565 Отправка сообщения 566 Расширение проекта 570 Глава 29. Создание Web-форумов 571 Компоненты решения 572 Обзор решения 573 Разработка базы данных 575 Просмотр дерева статей 577 и свертывание 579 Отображение статей 581 Использование класса treenode 582 Просмотр отдельных статей 588 Добавление новых статей 589 Расширение проекта 595 Использование существующих систем 595 Глава 30. Генерация персонифицированных документов в формате переносимых документов 596 Задача 596 Оценка форматов документов 597 Бумажный документ 597 ASCII 598 HTML 598 Форматы текстовых процессоров 598 Расширенный текстовый формат 599 PostScript 600 Переносимый формат документов 600 Компоненты решения 601 Система вопросов и ответов 601 Программное обеспечение для генерации документов 602 Обзор решения 604 Задание вопросов 605 Оценка ответов 606 Генерация RTF-сертификата 608 Генерация PDF-сертификата из Генерация PDF-документа с использованием PDFlib 614 Сценарий Hello World для PDFlib 614 Генерация сертификата с помощью PDFlib Проблемы, связанные с заголовками 624 Расширение проекта 625 Часть 6. Приложения 626 Приложение А. Инсталляция РНР 4 и MySQL 627 Запуск РНР в качестве интерпретатора CGI или модуля 628 Установка Apache, PHP и MySQL под 629 Apache и 632 Фрагменты файла 634 Работает ли поддержка РНР? 635 Работает ли SSL? 635 Установка Apache, PHP и MySQL под Windows 636 Установка MySQL под Windows 637 Установка Apache под Windows 638 Различия между версиями Apache для Windows и UNIX 640 Установка РНР под Windows 641 Заметки по инсталляции для Microsoft IIS . 643 Замечания по инсталляции для Microsoft PWS . 644 Другие конфигурации 644 Приложение В. Ресурсы Internet Ресурсы, посвященные РНР 645 Ресурсы, посвященные MySQL и 647 Ресурсы, посвященные Apache 647 Разработка для Web 647 Предметный указатель 648 Введение 17 Об авторах Лаура Томсон (Laura Thomson) читает лекции по программированию для Web на факультете компьютерных наук университета RMIT в Мельбурне, Австралия. Одновре- менно она является одним из партнеров известной в области Web-разработки фирмы Tangled Web Design. Ранее Лаура работала в компании Telstra и Бостонской консульта- ционной группе (Boston Consulting Group). Она имеет степень бакалавра прикладных наук (компьютерные пауки) и степень с отличием бакалавра технических наук (раз- работка компьютерных систем), а в настоящее время завершает работу над диссерта- цией на соискание звания доктора философии по теме адаптивных Web-сайтов. В сво- бодное время любит поспать. С Лаурой можно связаться по электронной почте: laura@tangledweb.com.au. Люк (Luke Welling) читает лекции по разработке программного обеспече- ния в школе электрических и компьютерных систем при университете RMIT в Мельбурне, Он также является партнером фирмы Tangled Web Design. Люк имеет степень бакалавра прикладных наук (компьютерные науки) и в насто- время работу над диссертацией на соискание звания магистра по теме "Генетические алгоритмы для разработки коммуникационной сети". В свобод- ное время бороться с бессонницей. С Люком можно связаться по электрон- Iuke@tangledweb.com.au. О соавторах Исраэль (Israel Denis Jr.) — внештатный консультант по системам элек- тронной торговли, сотрудничающий с фирмами по всему миру. Он специализируется на интеграции таких пакетов планирования ресурсов предприятия, как SAP и со специализированными решениями для Web. В 1998 г. Денис получил степень маги- стра по специальности электромашиностроения в техническом колледже Джорджии, Атланта, шт. Джорджия. Он является автором многочисленных статей по Linux, Apache, PHP и MySQL; с ним можно связаться по электронной почте: Крис Ньюмен (Chris Newman) — программист-консультант, специализирующийся на разработке приложений для Internet. Он обладает большим опытом в области использования РНР и MySQL для создания широкого множества приложений, используемых в международной клиентской базе данных. Он выпускник Кильского и живет в в Англии, где руководит компанией Lightwood Consultancy Ltd. Более подробную информацию о компании Lightwood Consultancy Ltd. можно найти па Web-сайте по адресу http://www.lightwood.net, а непосредственно с связаться по электронной почте: chris@lightwood.net. 1 О Разработка Web-приложений на РНР и MySQL Посвящение Нашим мамам и папам Мы хотели бы поблагодарить коллектив издательства Sams за проделанную ими тяж- кую работу. В частности, мы хотели бы выразить признательность Шелли Джонстон (Shelley Jonston Markandy), без чьей преданности и терпения издание этой книги было бы невозможным. Мы хотели бы также поблагодарить Исраэля и Криса Ньюмена за их значительный вклад. Мы высоко работу, проделанную командами разработки РНР и MySQL. Выполняемая ими работа облегчала нам жизнь в течение ряда минувших лет, и это продолжается до сих пор. Мы благодарим Эдриана (Adrian Close) за то, что в 1998 г. он сказал: "Вы можете построить это на РНР", а также Джеймса Вудса (James Woods) и всех сотруд- ников компании Law которые предоставили нам столь интересную работу по тестированию возможностей РНР. И, наконец, мы хотели бы выразить благодарность семьям и друзьям, которые мирились с нашим затворничеством в разгар отпускного сезона. Особенно мы благо- дарим за поддержку, оказанную членами наших семей: Жюли, Роберту, Мартину, Лесли, Адаму, Полу, Сэнди, Джеймсу и Арчеру. Введение Введение Вы держите в руках книгу "Разработка Web-приложений на РНР и MySQL". На ее страницах вы найдете наиболее важные сведения, почерпнутые авторами из опыта ис- пользования РНР и MySQL — двух наиболее популярных инструментальных средств Web-разработки. Во введении рассматриваются следующие вопросы: • Для чего следует прочесть эту книгу • Чего можно добиться, используя эту книгу • Что собой представляют РНР и MySQL и чем они хороши • Обзор новых свойств РНР 4 • Как построена эта книга Итак, приступим. Для чего следует прочесть эту книгу Эта книга научит создавать интерактивные Web-сайты, начиная с простейшей фор- мы заказа и заканчивая сложными безопасными сайтами систем электронной торгов- ли. Более вы узнаете, как это делать, используя технологии программного обес- печения с открытым исходным кодом (Open Source). Эта книга предназначается читателям, которые уже знакомы, по крайней мере, с основами HTML и ранее создавали программы на современных языках программиро- вания, но, возможно, не занимались программированием для Internet или не исполь- зовали реляционные базы данных. Книга несомненно окажется полезной для начина- ющих программистов, однако им для более качественного усвоения изложенного материала может потребоваться несколько больше времени. Мы старались не оставить без внимания ни одну из базовых концепций, но освещаем их кратко. В основном, книга адресована тем читателям, которые стремятся овладеть РНР и MySQL для по- строения крупных коммерческих Web-сайтов. Эта книга должна помочь быстрее при- ступить к делу также и желающим перейти на другой язык Web-разработки. Мы написали данную книгу, поскольку устали от книг по РНР, по существу яв- ляющихся справочниками по функциям. Эти книги полезны, но они не могут помочь решить конкретную задачу. Мы же приложили все усилия, чтобы каждый из приведен- ных примеров нес в себе практическую пользу. Многие из примеров кода могут исполь- зоваться в Web-сайте непосредственно, а множество других — с минимальными из- менениями. Чего можно используя эту книгу Прочтя эту книгу, вы сможете строить реальные, динамические Web-сайты. Если вам доводилось строить Web-сайты с использованием обычного HTML, то вам ясны огра- ничения такого подхода. При использований статического содержимого, созданного на основе чистого HTML, Web-сайт таковым и остается — статическим. Он остается не- изменным, если только не обновить его физически. Пользователи не могут взаимодей- ствовать с таким сайтом никаким осмысленным образом. Разработка Web-приложений на и MySQL Использование такого языка, как РНР, и такой базы данных, как MySQL, позво- ляет делать сайты динамическими: настраиваемыми и содержащими информацию, из- меняемую в реальном времени. В данной книге, даже во вводных главах, мы намеренно основное внимание уде- лили реальным приложениям. Мы начнем с рассмотрения простой интерактивной си- стемы заказов, а затем ознакомимся с различными составными частями РНР и MySQL. Затем мы рассмотрим аспекты электронных систем продажи и безопасности во вза- имосвязи с построением реального Web-сайта и покажем, как реализовать эти аспек- ты в среде РНР и MySQL. В заключительном разделе книги мы поговорим о подходе к реальным проектам и ознакомим читателей с разработкой, планированием и построением следующих семи проектов: • Аутентификация и персонификация пользователей • Электронные покупательские тележки • Системы управления содержимым • Электронная почта Web • Диспетчеры списков рассылки • • Web-форумы • Генерация документов Любой из этих проектов может использоваться в готовом виде или же модифици- роваться в соответствие с конкретными потребностями. Мы выбрали их потому, что по нашему мнению они представляют семь наиболее широко используемых Web-прило- жений, создаваемых программистами. Если вам требуются другие приложения, эта книга должна помочь в достижении поставленной цели. Что собой представляет РНР? РНР — это серверный язык создания сценариев (или стороны сервера), разработан- ный специально для Web. В HTML-страницу можно внедрить код РНР, который бу- дет выполняться при каждом ее посещении. Код РНР интерпретируется Web-сервером и генерирует HTML или иной вывод, наблюдаемый посетителем страницы. Разработка РНР была начата в 1994 г. и вначале выполнялась одним Расмусом Лердорфом (Rasmus Этот язык был принят рядом талантливых людей и претерпел три основных редакции, пока не стал широко используемым и зрелым продуктом, с которым мы имеем дело сегодня. К январю 2001 г. он использовался по- чти в пяти миллионах доменов во всем мире и их число продолжает быстро расти. Ко- личество доменов, в которых в настоящее время используется РНР, можно выяснить на странице http://www.php.net/usage.php. РНР — это продукт с открытым исходным кодом (Open Source). У пользователя имеется доступ к исходному коду. Его можно использовать, изменять и свободно рас- пространять другим пользователям или организациям. Первоначально РНР являлось сокращением от Personal Home Page (Персональная начальная страница), но затем это название было изменено в соответствии с рекур- сивным соглашением по наименованию GNU (GNU = Gnu's Not Unix) и теперь оз- начает РНР Hypertext Preprocessor (Препроцессор гипертекста РНР). Введение В настоящее время версией РНР является четвертая. Эта версия характе- ризуется несколькими существенными усовершенствованиями языка, которые рассмат- риваются в разделе. Адрес начальной страницы для РНР — http://www.php.net Адрес начальной страницы для Zend — http://www.zend.com. Что нового в РНР 4? Если вы ранее использовали РНР, то несложно будет заметить ряд важных усовер- шенствований 4 версии: • РНР 4 работает значительно быстрее предшествующих версий, поскольку в нем новый механизм Zend Engine. Если требуется еще более высокая производительность, по адресу http://www.zend.com можно получить модули Zend Zend Cache или Zend Compiler. • PHP всегда можно было использовать как эффективный модуль сервера Apache. С появлением новой версии РНР можно устанавливать и в виде модуля ISAPI для Internet Information Server компании Microsoft. • Теперь поддержка сеансов является встроенной. В предшествующих версиях для управления сеансом или создания собственного сеанса требовалось устанавливать модуль PHPLib. Что собой представляет MySQL? (произносится — очень быстрая, надежная система управ- ления реляционными базами данных (СУРБД). База данных позволяет эффективно хра- нить, искать, сортировать и получать данные. Сервер MySQL управляет доступом к данным, позволяя работать с ними одновременно нескольким пользователям, обеспе- чивает быстрый доступ к данным и гарантирует предоставление доступа только име- ющим на это право пользователям. Следовательно, MySQL является многопользова- тельским, многопотоковым применяет SQL (Structured Query Language — язык структурированных запросов), используемый по всему миру стандартный язык запросов в базы данных. MySQL появился на рынке в 1996 г., но его разработка на- чалась еще в 1979 В настоящее время, по прошествии трех лет своего существования, эта система завоевала приз читательских симпатий журнала Linux Journal. В настоящее время пакет MySQL доступен как программное обеспечение с откры- тым исходным кодом, но в случае необходимости можно получить и коммерческие лицензии. Для чего следует использовать РНР и MySQL? Приступая к созданию сайта системы электронной торговли, можно использовать множество различных продуктов. Потребуется выбрать аппаратное обеспечение для Web-сервера, операционную си- стему, программное обеспечение Web-сервера, систему управления базами данных и язык программирования или создания сценариев. Выбор некоторых из этих компонентов будет зависеть от уже произведенных вы- боров. Например, не все операционные системы могут работать на любом оборудова- нии, не язык и сценариев могут обеспечить подключение ко всем базам данных и т.д. Разработка Web-приложений на PHP и MySQL В этой книге не уделяется особое внимание аппаратному обеспечению, ным системам и программному обеспечению Web-сервера. Нам это не требуется. Одно из замечательных свойств РНР в том, что он доступен для Microsoft Windows, для многих версий UNIX и выполняется на любых полнофункциональных Web-серверах. Система MySQL обладает такой же гибкостью. Чтобы продемонстрировать это, примеры в книге написаны и протестированы на двух популярных вариантах установки: • Linux с использованием Web-сервера Apache • Microsoft Windows 2000 с использованием сервера Microsoft Internet Information Server (IIS) Какие бы аппаратное обеспечение, операционная система и Web-сервер не были бы выбраны, мы надеемся, что вы серьезно задумаетесь об использовании РНР и MySQL. Некоторые преимущества РНР К числу конкурентов РНР относятся Perl, Active Server Pages (ASP) от Microsoft, Java Server Pages (JSP) и Allaire Cold Fusion. PHP обладает множеством преимуществ по сравнению с этими продуктами, в чис- ле которых: • Высокая производительность • Наличие интерфейсов ко многим различным системам баз данных • Встроенные библиотеки для выполнения многих общих задач, связанных с Web • Низкая стоимость • Простота изучения и использования • Переместимость • Доступность исходного кода Эти преимущества более подробно рассматриваются далее. РНР исключительно эффективен. Используя единственный недорогой сервер, можно обслуживать миллионы обращений в день. Результаты тестирования, опубликованные компанией Zend Technologies (http://www.zend.com), подтверждают более высокую про- изводительность РНР по сравнению с конкурирующими продуктами. Интеграция с базами данных РНР обладает встроенной связностью со многими системами баз данных. В допол- нение к MySQL, в числе прочих можно непосредственно подключаться к базам дан- ных PostgreSQL, mSQL, Oracle, Informix, InterBase и Sybase. Используя Open Database Connectivity Standard (Стандарт открытого интерфейса связи с базами данных, ODBC), можно подключаться к любой базе данных, для кото- рых существует ODBC-драйвер. Это распространяется на продукты Microsoft и многих других компаний. Встроенные библиотеки Поскольку РНР был разработан для использования в Web, он имеет множество встроенных функций для выполнения широкого разнообразия полезных, связанных с Введение Web, задач. С его помощью можно "на лету" генерировать GIF-изображения, подклю- чаться к другим сетевым службам, отправлять сообщения электронной почты, работать с и генерировать PDF-документы — и все это посредством всего не- скольких строк кода. Стоимость Пакет РНР является бесплатным. Наиболее новую версию можно в любой момент совершенно бесплатно выгрузить из http://www.php.net. Изучение РНР Синтаксис РНР основывается на других языках программирования, в первую оче- редь на С и Perl. Если вы уже знакомы с С, или языком, таким как C++ или Java, то почти сразу сможете эффективно использовать РНР. Переносимость Пакет РНР можно использовать под управлением многих различных операционных систем. Код РНР можно создавать в среде таких бесплатных Unix-подобных операци- онных систем, как Linux и FreeBSD, коммерческих версий Unix типа Solaris и IRIX или различных версий Microsoft Windows. Как правило, программы будут работать без каких-либо изменений в различных средах с установленным РНР. Исходный код Пользователь имеет доступ к исходному коду РНР. В отличие от коммерческих зак- рытых программных продуктов, если нужно что-либо изменить или добавить в этом языке, то это всегда можно сделать. Не следует дожидаться, пока выпустит правки Нет не- обходимости беспокоиться о том, изготовитель собирается покинуть рынок или перестанет поддерживать продукт. Некоторые преимущества MySQL К конкурентам MySQL, помимо прочих, относятся PostgreSQL, Microsoft SQL Server и Oracle. MySQL обладает многими преимуществами, в том числе высокой производитель- ностью, низкой стоимостью, простотой конфигурирования и изучения, переносимо- стью и доступностью исходного кода. Более подробно упомянутые преимущества рассматриваются ниже. MySQL без сомнений работает очень быстро. Результаты сравнительных тестов про- изводительности, выполненных фирмой-изготовителем, можно посмотреть на странице Многие из этих сравнительных тестов показывают, что MySQL работает на порядок быстрее конкурирующих продуктов. Низкая стоимость Пакет MySQL доступен бесплатно в соответствии с лицензией на программное обеспечение с открытым исходным кодом или, если это необходимо для приложения, за небольшую сумму можно приобрести коммерческую лицензию. Разработка на и MySQL Простота использования В большинстве современных баз данных используется SQL. Если ранее вы работали с другими переход к этой системе не должен вызывать какие-либо затруднения. Установка MySQL столь же проста, как и установка многих аналогичных продуктов. MySQL может использоваться в среде многих различных систем UNIX, а также в среде Microsoft Windows. Исходный код Как и в случае РНР, исходный код MySQL можно выгружать и изменять. Как построена эта книга Книга разделена на пять основных разделов. В части I, "Использование РНР", приводится обзор основных составляющих языка РНР с примерами. Каждый из примеров — не просто "игрушечный" код, а образец ре- альной программы, используемой при построении сайта системы электронной торговли. Этот раздел начинается с главы 1, "Краткий обзор РНР". Если вы уже использовали РНР, можете бегло просмотреть ее. Если же вы лишь начинаете знакомиться с РНР или вообще с программированием, возможно, потребуется изучить эту главу более внимательно. В части II, "Использование MySQL", рассматриваются концепции и особенности разработки, связанные с использованием систем реляционных баз данных типа MySQL, использование SQL, подключение базы данных MySQL к внешним прило- жениям с помощью РНР и дополнительные вопросы использования MySQL, такие как безопасность и оптимизация. В части III, "Системы электронной торговли и безопасность", освещаются некото- рые из основных вопросов, связанных с разработкой сайта электронной торговли при использовании любого языка программирования. Безопасность является наиболее важ- ной из них. Затем будет показано, как задействовать РНР и MySQL для аутентифи- кации пользователей и для безопасного сбора, передачи и хранения информации. В части IV, "Усовершенствованные технологии использования РНР". подробно рас- сматриваются некоторые из основных встроенных функций РНР. Мы остановили свой выбор на тех функциях, которые наверняка окажутся полезными при построении сайта электронной торговли. Читатели узнают о взаимодействии с сервером, взаимодействии с сетью, о генерировании изображений, манипулировании датой и временем и о пе- ременных сеанса. В части V, "Разработка практических приложений на РНР и MySQL", исследуются та- кие практические вопросы, как управление большими проектами и отладка; здесь же при- водятся примеры проектов, возможности и гибкость РНР и MySQL. Заключение Мы надеемся, что читатели получат такое же удовольствие от прочтения этой книги и ознакомления с РНР и MySQL, какое мы получили, начав применять эти продукты. Их действительно приятно использовать. Со временем вы сможете примкнуть к тыся- чам разработчиков Web-приложений, использующих эти надежные, обладающие боль- шими возможностями инструментальные средства для простого и быстрого создания динамических, работающих в реальном времени Web-сайтов. I РНР 1 2 3 4 Краткий обзор РНР Хранение и получение Использование массивов строками и регулярные выражения Повторное использование кола и написание Объектно-ориентированный РНР 7 Краткий обзор РНР этой главе приводится краткий обзор синтаксиса и язы- ковых конструкций РНР. Программистам РНР она мо- жет восполнить некоторые пробелы в знаниях. Если у вас имеется некоторый опыт использования С, ASP или дру- гого языка программирования, она поможет быстрее начать работать с максимальной эффективностью. Как следует изучив эту книгу, читатели научатся пользовать РНР. Этому поспособствует множество реальных примеров, которые взяты из нашего опыта построения сай- тов систем электронной торговли. Часто в учебниках по программированию описывается основы синтаксиса и при- водятся очень простые примеры. Мы решили отказаться от такого подхода. Мы понимаем, что часто для понимания принципов использования языка читателям требуется полу- чить какую-либо работающую программу, а не просто про- смотреть еще один справочник по синтаксису и функциям, который ничем не лучше интерактивного руководства. Постарайтесь разобраться в примерах — наберите их или загрузите из CD-ROM, измените, разбейте на модули и научитесь снова собирать их в единое целое. Чтобы узнать, как переменные, операции и выражения используются в РНР, в этой главе начнем с примера ин- терактивной формы заказа товаров. В ней будут также опи- сываться типы переменных и приоритеты операций. Вычис- ляя общую сумму и налог в заказе клиента, читатели узнают, как получить доступ к переменным формы и ма- нипулировать ими. Затем мы разработаем пример интерактивной формы заказа, используя созданный сценарий на РНР для провер- ки вводимых данных. Мы исследуем концепцию булевых значений и приведем примеры использования операторов if, else, switch и операции ?:. Глава 1. Краткий обзор В заключение, написав несколько строк PHP-кода для генерации повторяющихся HTML-таблиц, мы разберемся с применением циклов. В этой главе освещаются следующие основные темы: • Встраивание РНР в HTML • Добавление динамического содержимого • Доступ к переменным формы • Идентификаторы • Переменные, объявляемые пользователем • Типы переменных • Присвоение значений переменным • Константы • Область действия переменных • Знаки операций и приоритеты • Выражения • Функции для работы с переменными • Принятие решений с помощью if, else и switch • Итерация: циклы while, do и for Использование РНР Чтобы можно было проработать примеры, приведенные в этой главе и во всей кни- ге, потребуется иметь доступ к Web-серверу с установленным пакетом РНР. Для мак- симально эффективного использования приведенных примеров их следует запустить и попытаться изменить. Для этого необходимо располагать испытательным стендом, на котором можно выполнять эксперименты. Если на используемом компьютере РНР не установлен, его следует установить или попросить об этом системного администратора. Инструкции по установке можно най- ти в приложении А, "Установка РНР 4 и MySQL". Все программное обеспечение, не- обходимое для установки РНР в среде UNIX или Windows NT, можно найти на со- провождающем книгу CD-ROM. Пример приложения: Auto Parts Одно из наиболее распространенных приложений любого языка создания серверных сценариев — обработка HTML-форм. Изучение РНР начнем с реализации формы за- каза для вымышленной компании Bob's Auto Parts (Автозапчасти от Боба), торгующей запчастями. Все исходные тексты примеров, использованных в этой главе, находятся в каталоге chapterl на CD-ROM. Форма В настоящий момент программист на HTML в компании Auto Parts занима- ется созданием формы для продаваемых Бобом запчастей. Форма заказа показана на рис. Это сравнительно простая форма, аналогичная множеству других, которые можно встретить в Web. Прежде всего, Боб хотел бы иметь возможность выяснять, что зака- зал его клиент, вычислять общую сумму заказа и сумму налога с продаж, которую потребуется уплатить по выполнению заказа. 28 Часть 1. Использование PHP [is] Auto Parts Order Form Quantify Tires Oil Spark Plugs Order I Фрагмент HTML-кода для создания этой формы приведен в листинге В этом коде следует отметить два важных момента. Во-первых, действию, выполняемому формой, присвоено имя PHP-сценария, ко- торый будет обрабатывать заказ клиента. (Этот сценарий будет разрабатываться не- сколько позже.) В общем случае значением атрибута ACTION является URL-адрес, кото- рый будет загружаться при нажатии пользо- вателем кнопки отправки (submit). Данные, введенные пользователем в форму, будут от- правляться по этому URL-адресу с использо- ванием метода, указанного в атрибуте METHOD: либо GET (данные присоединяют- ся в конец URL-адреса), либо POST (данные отправляются в виде отдельного пакета). Во-вторых, следует обратить внимание на имена полей формы — tireqty, и sparkqty. Эти имена будут снова использоваться в PHP-сценарии. Поэтому полям формы важно присваивать осмысленные имена, которые легко запомнить при написании РНР- сценария. Некоторые HTML-редакторы по умолчанию будут генерировать имена полей типа field23. Подобные имена трудно запомнить. Ваша задача как программиста на РНР существенно упростится, если эти имена будут отражать вводимые в поле данные. Возможно, имеет смысл принять стандарт кодирования имен полей, чтобы для всех имен полей во всем сайте применялся один и тот же формат. Это облегчает запомина- ние того, например, сокращаются ли слова в именах полей или же для разделения слов в именах используются символы подчеркивания. Листинг 1.1 — HTML-код для базовой формы заказа Боба. РИСУНОК 1.1 В Боба отражены и их количества. border=0> Spark Plugs Глава 1. Краткий обзор 29 Обработка формы Для обработки формы потребуется создать сценарий, упомянутый в атрибуте ACTION дескриптора FORM и названный Откройте текстовый редак- тор и создайте этой файл. Для этого введите код: Auto Parts - Order Results Auto Parts Results Обратите внимание, что все введенное до сих пор представляет собой обычный HTML-текст. Теперь пора добавить в сценарий немного простого РНР-кода. Встраивание РНР в HTML Под заголовком

файла введите следующие строки: echo Сохраните файл и загрузите его в свой браузер, затем заполните форму и щелкните на кнопке Submit (Отправить). На экране должно отобразиться что-то похожее на изоб- ражение, показанное на рис. 1.2. Обратите внимание, как написанный PHP-код внедряется в обычный HTML-файла. Попытайтесь просмотреть его в браузере. Вы должны увидеть следующие строки кода: Bob's Auto Parts - Order Results Bob's Auto Parts Ни одной исходной строки PHP-кода не видно. Это происходит потому, что интерпретатор РНР просмотрел сцена- рий и заменил его строками вывода. Следовательно, из среды РНР можно создать чистый код HTML, пригодный для просмотра в любом браузере — ина- че говоря, применяемый пользователем браузер не обязательно должен понимать РНР. Это служит хорошей иллюстрацией концепции создания серверных сценари- Auto Parts Order Results Order processed. D 1 РИСУНОК 1.2 Текст, переданный в PHP- конструкцию echo, повторяется в окне браузера. Часть 1. Использование PHP ев. PHP-код интерпретируется и выполняется на Web-сервере, в отличие от JavaScript и других технологий клиентской стороны, которые интерпретируются и выполняются в среде Web-браузера на компьютере пользователя. Теперь код в рассматриваемом файле состоит из четырех частей: • HTML • Дескрипторы РНР • Операторы РНР • Пробелы В него можно добавить также еще одну часть • Комментарии Большинство строк в приведенном примере — всего лишь простой HTML-код. Использование PHP-код из предыдущего примера начинается с последовательности . Это аналогично всем HTML-дескрипторам, поскольку все они начинаются с символа "меньше" (<) и завершаются символом "больше" (>). Эти сим- волы называются PHP-дескрипторами, поскольку они указывают Web-серверу, где начинается, а где завершается PHP-код. Любой текст, расположенный между дескрип- торами, будет интерпретироваться как PHP-код. Любой текст вне этих дескрипторов будет обрабатываться как обычный HTML-код. позволяют выполнить выход из HTML. Существуют различные стили дескрипторов. В приведенном примере используется сокращенный стиль. Возникновение каких-либо проблем при выполнении приведен- ного сценария может быть связано с тем, что сокращенные дескрипторы не активи- зированы в установках РНР. Давайте подробнее рассмотрим стили дескрипторов. РНР-дескрипторов Фактически существует четыре различных стиля РНР-дескрипторов. Все приведен- ные ниже фрагменты кода эквивалентны. • Сокращенный стиль Именно этот стиль дескрипторов будет использоваться в данной книге. Этот же стиль дескрипторов используется по умолчанию разработчиками РНР. Данный стиль дескрипторов является самым простым и соответствует стилю ин- струкций обработки SGML (Standard Generalized Markup Language — стандарт- ный обобщенный язык разметки). Чтобы использовать этот тип дескрипторов (который является самым коротким), потребуется активизировать применение сокращенных дескрипторов в файле конфигурации или откомпилировать код самого РНР при активизированных сокращенных дескрипторах. Более подробную информацию можно найти в приложении А. • XML-стиль Этот стиль дескрипторов может использоваться в документах XML (Extensible Markup Language — расширяемый язык разметки). Если планируется обслужи- Глава 1. Краткий обзор PHP вание на сайте XML-документов, следует применять именно этот стиль дескрип- торов. •