Денис Колисниченко
3-е издание
Санкт-Петербург
«БХВ-Петербург»
2011
УДК 681.3.06
ББК 32.973.26-018.2
К60
Колисниченко Д. Н.
К60 PHP 5/6 и MySQL 6. Разработка Web-приложений. —
3-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2011. — 528 с.: ил.
+ CD-ROM — (Профессиональное программирование)
ISBN 978-5-9775-0704-2 Даны начала программирования на PHP: установка и настройка PHP и MySQL, выбор редактора PHP-кода, основы синтаксиса и самые полезные функции PHP.
Рассмотрено создание дополнительных модулей — фотогалереи, RSS-граббера, гостевой книги, собственного шаблонизатора, применение шаблонизатора Smarty, работа с SMTP, POP, MP3 и сервисом reCAPTCHA. В качестве хранилища данных использованы два сервера — самая современная версия MySQL 6 и "суперлегкий" сервер баз данных SQLite. Показано, как с помощью технологии Ajax добиться обновления данных на странице без ее перезагрузки. Представлены два реальных проекта: универсальная CMS и система продажи недвижимости.
В третьем издании подробно рассмотрена программа phpMyAdmin, интеграция PHP-сценариев и Flash-приложений, оптимизация PHP-кода, добавлен новый материал в 12 глав. Прилагаемый компакт-диск содержит дополнительные главы, все листинги из книги, а также необходимое программное обеспечение.
Для Web-программистов УДК 681.3. ББК 32.973.26-018. Группа подготовки издания:
Екатерина Кондукова Главный редактор Евгений Рыбаков Зам. главного редактора Григорий Добин Зав. редакцией Владимир Красовский Редактор Ольги Сергиенко Компьютерная верстка Зинаида Дмитриева Корректор Инны Тачиной Дизайн серии Елены Беляевой Оформление обложки Николай Тверских Зав. производством Лицензия ИД № 02429 от 24.07.00. Подписано в печать 31.03.11.
Формат 70 100 /16. Печать офсетная. Усл. печ. л. 42,57.
Тираж 2000 экз. Заказ № "БХВ-Петербург", 190005, Санкт-Петербург, Измайловский пр., 29.
Санитарно-эпидемиологическое заключение на продукцию № 77.99.60.953.Д.005770.05.09 от 26.05.2009 г. выдано Федеральной службой по надзору в сфере защиты прав потребителей и благополучия человека.
Отпечатано с готовых диапозитивов в ГУП "Типография "Наука" 199034, Санкт-Петербург, 9 линия, ISBN 978-5-9775-0704-2 © Колисниченко Д. Н., © Оформление, издательство "БХВ-Петербург", Оглавление Введение
Что нового в 3-м издании
Немного истории
PHP 6
MySQL
Поддержка читателей
Ч А С Т Ь I. ТЕОРИЯ
РАЗДЕЛ 1. БЫСТРЫЙ СТАРТ
Глава 1. Установка необходимого программного обеспечения
1.1. Нужно ли устанавливать программное обеспечение
1.2. Выбор PHP-редактора и FTP-клиента
1.3. Установка Apache + PHP + MySQL в Windows
1.4. Установка Apache + PHP + MySQL в Linux
1.5. Несколько советов
Глава 2. Первая PHP-программа
2.1. Ваша первая программа
2.2. Запуск PHP-программы
2.3. Вывод текста без echo
2.4. Совместимость с PHP 4
Глава 3. Основы синтаксиса PHP
3.1. Переменные
3.1.1. Правила объявления переменных. Имена переменных
3.1.2. Типы данных переменных
3.1.3. Булевы переменные
3.1.4. Операции над переменными
3.1.5. Ссылки
3.2. Константы
3.3. Выражения и операции
3.3.1. Что такое выражение
3.3.2. Арифметические операции
3.3.3. Логические выражения
3.3.4. Приоритеты операций
3.3.5. Операторы эквивалентности == и ===
3.3.6. Операции со строками
3.4. Условный оператор
3.5. Циклы
3.5.1. Цикл со счетчиком
3.5.2. Цикл while
3.5.3. Цикл do-while
3.5.4. Принудительное завершение цикла и пропуск итерации
3.6. Оператор выбора switch-case
РАЗДЕЛ 2. ПЕРЕДАЧА ПАРАМЕТРОВ PHP-ПРОГРАММАМ
Глава 4. Методы GET и POST
4.1. Интерфейс CGI
4.2. Метод GET
4.3. Метод POST
Глава 5. Протокол HTTP и интерфейс CGI
5.1. Специальные переменные окружения CGI
5.2. Заголовки протокола HTTP
5.3. Коды ответов протокола HTTP
Глава 6. Передача параметров посредством HTML-формы
6.1. Создание простейшей формы и ее обработка в сценарии
6.2. Создание пользовательского интерфейса с помощью формы
6.2.1. Ввод текста. Теги INPUT и TEXTAREA
6.2.2. Зависимые и независимые переключатели
6.2.3. Списки выбора
6.2.4. Форма для передачи файлов
6.2.5. Кнопки
6.3. Проверка параметров формы
6.3.1. Проверка корректности e-mail
6.3.2. Проверка правильности номера кредитной карты
6.3.3. Удаление лишних пробелов
6.4. Защита от спама с помощью CAPTCHA
6.5. Форма поиска в Яндексе
Глава 7. Запоминание параметров с помощью Cookies и сессий
7.1. Что такое Cookies и как с ними работать
7.2. Механизм сессий
7.2.1. Сессии и Cookies: преимущества и недостатки
7.2.2. Для чего нужны сессии
7.2.3. Как работает механизм сессий
7.2.4. Обход Cookies
7.3. Массивы и Cookies
Глава 8. Отдельное слово о директиве register_globals
8.1. Почему опасно использовать register_globals
8.2. Если register_globals отключена
8.3. PHP 6 и register_globals
РАЗДЕЛ 3. МАССИВЫ И СПИСКИ
Глава 9. Основные операции над массивами и списками
9.1. Массив и список. Цикл foreach
9.2. Функции list() и array()
9.3. Удаление массива
9.4. Слияние массивов
9.5. Функция print_r()
Глава 10. Функции сортировки массивов
10.1. Функции для сортировки массивов
10.2. Функция sort() — сортировка списка
10.3. Функция asort() — сортировка массива по значениям
10.4. Функция ksort() — сортировка по ключам
10.5. Функции array_reverse() и shuffle()
10.6. Собственная функция сортировки
10.7. Натуральная сортировка
Глава 11. Особые операции над массивами
11.1. Добавление и удаление элементов массива
11.2. Упаковка переменных в массив и их извлечение
11.3. Получение части массива
11.4. Функции автоматического заполнения массива
11.5. Сравнение массивов
11.6. Полезные операции над массивом
11.6.1. Вычисление суммы и произведения всех элементов массива
11.6.2. Проверка существования элемента в массиве
11.6.3. Получение случайного элемента из массива
11.6.4. Удаление дубликатов из массива
11.6.5. Получение значений и ключей массива
11.6.6. Замена местами значений и ключей
11.6.7. Подсчет значений в массиве
11.6.8. Замена в массиве
11.6.9. Поиск в массиве
11.6.10. Прогулка по массиву
РАЗДЕЛ 4. ФУНКЦИИ В PHP
Глава 12. Полезные стандартные функции
12.1. Генератор случайных чисел
12.2. Дата и время
12.2.1. Кратко о timestamp
12.2.2. Функции strtotime() и checkdate()
12.2.3. Вывод даты
12.3. Математические функции
Глава 13. Функции для работы со строками
13.1. Основные строковые функции
13.2. Специальные функции замены
13.3. Преобразование строки
13.4. Функции преобразования кодировок
13.5. Функции для работы с отдельными символами строки
13.6. Функция md5() и другие функции шифрования/хэширования
13.7. Функция explode(): выделение подстрок
13.8. Статистические функции
13.9. Функции вывода текста
13.10. Установка локали
13.11. Форматирование чисел и денежных величин
Глава 14. Работаем с файлами и каталогами
14.1. Права доступа в UNIX
14.2. Чтение файла
14.2.1. Использование функций fopen() и fread()
14.2.2. Использование функции file(): построчное чтение файла
14.2.3. Чтение всего файла: функция file_get_contents()
14.3. Запись файла
14.4. Создание временных файлов
14.5. Работа с CSV-файлами
14.6. Специальные функции для работы с файлами
14.6.1. Функции для работы с именами файлов
14.6.2. Работа с правами доступа
14.6.3. Копирование, переименование и удаление файлов
14.6.4. Время доступа к файлу
14.6.5. Другие полезные функции
14.7. Совместный доступ к файлу
14.8. Функции для работы с каталогами
Глава 15. Вывод графических изображений средствами PHP
15.1. Библиотека GD
15.1.1. Получение информации об изображении
15.1.2. Конвертирование графических форматов
15.1.3. Вывод текста поверх картинки
15.1.4. Прозрачность
15.2. Изменение размера изображения
15.3. Создание водяных знаков
Глава 16. Работа с сетевыми сокетами в PHP. Сетевые функции
16.1. Еще раз о том, что такое сокет
16.2. Использование сокетов
16.3. Пример использования сокетов
16.4. Блокирующий и неблокирующий режимы сокета
16.5. DNS-функции
Глава 17. Собственные функции
17.1. Зачем нужны собственные функции
17.2. Особенности функций в PHP
17.3. Объявление функции
17.4. Области видимости функции
17.5. Вложенность функций
17.6. Переменное число аргументов
17.7. Передача массивов в качестве параметров
РАЗДЕЛ 5. СЕРВЕРЫ БАЗ ДАННЫХ MYSQL 6 И SQLITE
Глава 18. Основы SQL
18.1. Немного истории
18.2. Преимущества SQL
18.3. Как выглядят запросы
18.4. Что такое база данных
18.5. Создание таблиц
18.6. Добавление записей в таблицу
18.7. Обновление записей
18.8. Выборка записей
18.9. Удаление записей
18.10. Встроенные функции
18.11. Группировка записей. Сложные запросы
Глава 19. Функции для работы с MySQL
19.1. Подключение к серверу MySQL
19.2. Несколько MySQL-соединений
19.3. Передача запросов серверу
19.4. Работа с базой данных. Создание базы данных
19.5. Функция mysql_real_escape_string($content)
Глава 20. Альтернативная база данных SQLite
20.1. MySQL vs SQLite: что лучше
20.2. Открытие базы данных
20.3. Передача запросов
20.4. Работа с результатом запроса
20.5. Список PHP-функций для работы с SQLite
Глава 21. Полезные приемы при работе с MySQL 6
21.1. Выбор кодировки
21.2. Сортировка: вывод новинок. Вывод случайных записей
21.3. Постраничный вывод таблицы
РАЗДЕЛ 6. ИНСТРУМЕНТЫ ДЛЯ СОЗДАНИЯ СЛОЖНЫХ ПРОЕКТОВ.... Глава 22. Разработка собственного шаблонизатора
22.1. Организация файлов и каталогов проекта
22.2. Выносим параметры в отдельный файл
22.3. Подключение дополнительных файлов
22.3.1. Инструкции include и require
22.3.2. Альтернативный способ подключения сценариев
22.3.3. Инструкции include_once и require_once
22.4. Шаблоны
Глава 23. Шаблонизатор Smarty
23.1. Что такое Smarty
23.2. Установка Smarty
23.3. Создание setup.php
23.4. Разработка шаблонов Smarty
23.4.1. Комментарии в шаблонах
23.4.2. Переменные в Smarty
23.4.3. Файлы конфигурации шаблонов
23.4.4. Служебная переменная {$smarty}
23.4.5. Модификаторы переменных
23.4.6. Стандартные (встроенные) функции Smarty
Функции {include} и {insert}
Функция {foreach}
Функции {if}, {elseif}, {else}
Функция {capture}
Функция {php}
Функция {strip}
23.4.7. Пользовательские функции Smarty
Функция {assign}
Функция {cycle}
Функция {fetch}
Функции {html_checkboxes} и {html_radios}
Функция {html_image}
Функция {html_select_date}
Функция {html_select_time}
Функция {html_table}
23.5. Smarty для программиста
23.5.1. Специальные переменные
23.5.2. Полезные методы класса Smarty
Глава 24. Объектно-ориентированное программирование
24.1. Основы ООП
24.2. Классы и объекты
24.3. Конструкторы и деструкторы класса
24.4. Наследование классов. Полиморфизм
24.5. Новые возможности PHP 5/6
24.5.1. Область видимости членов класса
24.5.2. Абстрактные классы и методы
24.5.3. Служебное слово final
24.5.4. Клонирование объектов
24.5.5. Обработка исключительных ситуаций
24.5.6. Константы-члены класса
24.5.7. Статические члены класса
24.5.8. Оператор instanceof
24.5.9. Итераторы
24.5.10. Пространства имен
Глава 25. Механизм сессий
25.1. Для чего нужны сессии
25.2. Как работает механизм сессий
25.3. Обход Cookies
25.4. Сценарий аутентификации
Глава 26. Введение в PEAR
26.1. Серьезные проекты и PEAR
26.2. Пример использования класса DB
Глава 27. Контроль версий
27.1. Выбор системы контроля версий
27.2. Практическое использование TortoiseHG (Mercurial)
27.3. Просмотр внесенных изменений
Глава 28. Тестирование PHP-сценариев
28.1. Программа работает, но не так, как нам нужно
28.2. "Самодельные" точки останова
28.3. Система автоматического тестирования
28.4. Директива error_reporting
Ч А С Т Ь II. ПРАКТИКА
РАЗДЕЛ 7. РАЗРАБОТКА ОСНОВНЫХ ЭЛЕМЕНТОВ САЙТА
Глава 29. Загрузка файлов на сервер
29.1. Что нужно знать о загрузке файлов на сервер
29.2. Реализация загрузки файла
29.3. Загрузка нескольких файлов
29.4. Проблемы при загрузке файлов
Глава 30. Использование FTP-функций
30.1. Функции для работы с FTP
30.2. Примеры использования FTP-функций
Глава 31. Отправка и прием почты
31.1. Отправка почты средствами PHP — функция mail()
31.2. Отправка писем с вложениями — класс HtmlMimeMail
31.2.1. Отправка сообщения
31.2.2. Проблемы при отправке сообщения
31.2.3. MIME-типы
31.3. Класс PHPMailer. Разработка сценария автоматической рассылки прайс-листа......... 31.4. Получение писем по протоколу POP3
Глава 32. Работа с RSS: получаем новости на сайт
32.1. Краткие сведения о RSS
32.2. Формат RSS-файла
32.3. Написание сценария импорта новостей
32.4. Подключение файла import.php к сайту
32.5. Создание граббера новостей
Глава 33. Поиск с использованием регулярных выражений
33.1. Нужно что-то найти...
33.2. Язык регулярных выражений RegEx
33.3. Управляющие конструкции
33.3.1. Квантификаторы
33.3.2. Альтернативный оператор |
33.3.3. Скобки
33.4. Псевдосимволы
33.5. Практическое использование RegEx-функций
33.6. Фильтры, или Конец эры регулярных выражений
Глава 34. Работаем с MP3
34.1. Формат MP3
34.2. Библиотека PEAR
34.3. Вывод ID3-тегов
34.4. Редактирование ID3-тегов
34.5. Удаление тега
Глава 35. Технология Ajax
35.1. Что такое Ajax
35.2. Ваше первое Ajax-приложение
РАЗДЕЛ 8. РАЗРАБОТКА ТИПИЧНОГО САЙТА
Глава 36. Создание простейшего движка сайта
36.1. Планирование движка
36.1.1. Зачем нужно разрабатывать собственный движок
36.1.2. Необходимые нам функции движка
36.1.3. "Принципиальная схема" движка
36.2. Основные функции движка
36.2.1. Разработка TPL-шаблона
36.2.2. Файл настроек
36.2.3. Основной файл CMS — index.php
36.2.4. Проектирование базы данных
Таблица static
Таблица cats
Таблица pages
36.2.5. Иерархическая структура сайта
Алгоритм работы меню
Сценарий menu.php
Вывод содержимого раздела и страницы
36.3. Дополнительные функции движка
36.3.1. Вывод информации из таблицы static
36.3.2. Функция вывода содержимого HTML-файла
36.3.3. Версия для печати
36.4. Где взять листинги этой главы
Глава 37. Создание фотогалереи
37.1. Постановка задачи
37.2. Загрузка изображений на сервер
37.3. Вывод галереи
Глава 38. Гостевая книга
38.1. Пережиток прошлого?
38.2. Разработка базы данных и структура гостевой книги
38.3. Вывод гостевой книги
38.4. Добавление записей в гостевую книгу
38.5. Сервисный сценарий gb_service.php
Глава 39. Интеграция галереи LiveJournal и вашего сайта
39.1. Что такое Живой журнал
39.2. Интеграция фотогалереи LiveJournal и сайта
39.3. Настройка внешнего вида галереи
Глава 40. Создание счетчика сайта
40.1. Постановка задачи
40.2. Файл конфигурации
40.3. Разработка таблиц counter и ipaddr
40.4. Сценарий counter.php
40.5. Сценарий reset_counter.php
Глава 41. Статистика сайта
41.1. Методы сбора статистики
41.2. Программы-анализаторы журналов Web-сервера
41.3. Системы статистики
Глава 42. Голосования (опросы)
42.1. Разработка собственной системы голосования
42.2. Разработка сценария poll_form.php
42.3. Сценарий poll_process.php
42.4. Сценарий poll_results.php
РАЗДЕЛ 9. СЛОЖНЫЙ ПРОЕКТ:
САЙТ ПО ПРОДАЖЕ НЕДВИЖИМОСТИ
Глава 43. Постановка задачи
43.1. Функции будущего проекта
43.2. Разработка базы данных
Глава 44. Разработка основной части сайта
44.1. С чего начать
44.2. Реализация основных функций системы
44.2.1. Аутентификация пользователей
44.2.2. Вывод VIP-объявлений
44.2.3. Вывод объявлений об услугах
44.2.4. Вывод рекламных баннеров
44.2.5. Постраничный вывод объявлений
44.3. На что обратить внимание
Глава 45. Разработка панели администрирования
45.1. Функции панели управления
45.2. Управление VIP-объявлениями
45.3. Массовая отправка электронного сообщения
45.4. Общие операции с базой данных
45.5. Редактирование статей, новостей и контактов
РАЗДЕЛ 10. ОБЕСПЕЧЕНИЕ БЕЗОПАСНОСТИ САЙТА
Глава 46. SSL-соединения
46.1. Защищаем передаваемые данные
46.2. Настройка SSL в DirectAdmin
46.3. SSL-переменные
Глава 47. Защита PHP с помощью конфигурационного файла
47.1. Конфигурационный файл php.ini
47.2. Отключение потенциально опасных функций
47.3. Рекомендованные значения некоторых конфигурационных директив
Глава 48. Защита сайта от атак
48.1. Сайт в опасности
48.2. Два самых распространенных метода взлома
48.3. Межсайтовый скриптинг
48.4. SQL-инъекции
48.5. Флуд
48.6. Защита форума PHPBB2 от спаммеров
ПРИЛОЖЕНИЯ
Приложение 1. Программа phpMyAdmin
Действия над таблицами
Создание новой таблицы. Изменение структуры таблицы
Вставка записей
Обзор таблицы
Выполнение произвольного SQL-кода
Резервное копирование БД
Приложение 2. Flash и PHP
Приложение 3. Оптимизация PHP-кода
П3.1. Правильное использование echo
П3.2. Длина переменных
П3.3. Правильное обращение к элементам массива
П3.4. Циклы
П3.5. Чтение файлов
П3.6. Вывод текста: echo против printf
П3.7. "Лишние" вызовы функций
П3.8. Контрольные замеры
П3.8.1. Чтение файла
П3.8.2. Вывод содержимого файла
П3.9. Выводы
Приложение 4. Описание компакт-диска
Предметный указатель
XIV Оглавление Введение PHP (Hypertext Preprocessor) — один из самых популярных языков программирования, используемый для разработки Web-приложений. В настоящее время PHP поддерживается подавляющим большинством хостинг-провайдеров, что делает его чуть ли не основным языком, с помощью которого можно разработать любой интернет-проект, от простенького сайта до крупного портала.
На PHP написано огромное количество как отдельных скриптов, так и завершенных проектов — форумов, систем управления контентом и др.
Что нового в 3-м издании Начну с самого начала — с главы 1. В ней появилась подробная информация об использовании комплекса программ XAMPP, представляющего собой связку Apache + PHP + MySQL (и много чего еще). Вообще-то XAMPP довольно прост и удобен в использовании и ничем не хуже других подобных проектов (вроде Denwer), но почему-то у начинающих пользователей возникает много вопросов относительно использования этой программы. Поэтому и пришлось рассмотреть ее подробно в главе 1.
В главе 2 вы найдете информацию о директиве open_short_tag и о том, как запустить в PHP 5 старые сценарии, оптимизированные под PHP 3/4.
Современные сайты страдают от спама. Если у вас есть форма добавления комментария или гостевая книга, вам придется бороться со спаммерами. Чтобы облегчить вам жизнь, в главе 6 находятся инструкции по установке CAPTCHA-формы из проекта reCAPTHA (Google). Также в главе 6 приводится код формы поиска Яндекс.
Существенные изменения были произведены в главах 9–13. Теперь в этих главах рассмотрены все полезные PHP-функции, которые обрабатывают массивы и строки. Это не означает, что в книге описаны все возможные функции — для этого есть руководство по PHP. Но в книгу я включил все функции, которые посчитал полезными с точки зрения практического применения. Вы найдете множество полезных примеров использования этих функций на практике.
В главе 31 описан новый класс отправки электронных сообщений PHPMailer и приведен пример сценария автоматической рассылки прайс-листа клиентам абстрактной фирмы. Этот сценарий пригодится вам на практике.
Несколько небольших "багов" было исправлено в движке для сайта, разработка которого рассматривается в главе 36. А в главе 35 представлен второй вариант Ajaxприложения, отправляющего данные на сервер только после нажатия кнопки отправки, что в некоторых случаях оказывается более удобным решением.
В 3-м издании появилось три новых приложения. В первом приложении рассматривается популярная программа phpMyAdmin. Не спорю, описание phpMyAdmin было и в 1-м издании, но не такое подробное, как в этом. Во втором приложении рассматривается взаимодействие Flash-приложения и PHP-сценария, а в третьем описывается оптимизация PHP-кода, что пригодится любому профессиональному PHPпрограммисту.
Особое внимание было уделено предметному указателю. Теперь предметный указатель значительно облегчит поиск нужной вам функции.
В каталоге Edition_1 на прилагаемом диске вы по-прежнему найдете материал, удаленный из 1-го издания. Аналогичного каталога для 2-го издания не будет, поскольку в 3-м издании из книги ничего не удалялось, а, наоборот, был добавлен новый и полезный материал.
Прилагаемый диск также был обновлен. На него были помещены новые версии программного обеспечения.
Немного истории В 1994 г. датский программист Расмус Лердорф (Rasmus Lerdorf) создал надстройку над Perl/CGI (набор скриптов) для вывода и учета посетителей своего сайта и назвал ее Personal Home Page (отсюда и произошло первоначальное название PHP).
Но Perl — довольно медленный интерпретатор, и вскоре его производительности перестало хватать, поэтому разработчик написал на языке C новый интерпретатор и назвал его PHP/FI (Personal Home Page / Form Interpreter). В новом интерпретаторе четко прослеживались черты Perl, например символ доллара в начале имени переменной. Тогда же были заложены черты современного PHP, такие как автоматическая обработка форм, встраиваемость в HTML и др.
В 1997 г. появилась вторая версия — PHP/FI 2.0. Она была установлена примерно на 50 тыс. серверов. С одной стороны, цифра внушительная, но это всего 1% от общего числа интернет-серверов.
В 1998 г. появился PHP 3.0. Именно с этой версии PHP стал рекурсивным акронимом PHP: Hypertext Preprocessor. Третья версия пользовалась существенно бльшим успехом, чем вторая: она была установлена на 10% всех интернетсерверов, а это уже не мало!
PHP 3.0 частенько критиковали за медленное ядро, т. к. сценарии выполнялись ная с PHP 4 интерпретатор транслирует PHP-код во внутреннее представление, а потом выполняет (а не выполняет сценарий строка за строкой, как PHP 3), благодаря чему существенно повысилась производительность сценариев. Четвертая версия PHP появилась в мае 2000 г. Обновления для этой версии PHP выпускались до конца 2007 г. А с августа 2008 г. поддержка PHP 4 была прекращена.
Пятая версия PHP появилась в июле 2004 г. Было переработано ядро Zend, что увеличило эффективность интерпретатора, добавлена поддержка XML, переработана поддержка ООП. Теперь PHP является полноценным объектно-ориентированным языком программирования, а его объектная модель во многом схожа с моделью Java. В данное время доступна версия 5.3, которая пока еще будет поддерживаться, несмотря на наличие шестой версии PHP.
PHP Итак, что же нового в PHP 6? Прежде всего, в шестой версии значительно улучшена поддержка Unicode. Получить список всех функций, поддерживающих Unicode, можно по адресу http://www.php.net/~scoates/unicode/render_func_data.php.
Поддержка Unicode очень важна. Раньше, когда в знаковый генератор можно было загрузить только 256 символов, поддержка разных языков была ограничена, поэтому и были созданы разные кодировки (иногда даже несколько) для одного языка.
Русский язык не стал исключением. Для него было разработано три кодировки:
CP866 (DOS), Windows-1251 (или CP-1251, Windows) и KOI8-R (UNIX/Linux). При использовании разных кодировок всегда есть проблема их конвертирования. Например, символ "Б" во всех этих кодировках имеет разный код.
Первая версия Unicode, представленная в 1991 г., позволяла хранить 65 536 символов. Текущая версия Unicode позволяет хранить 2 147 483 648 символов, чего вполне достаточно для хранения символов всех языков, в частности кириллицы.
Когда все программное обеспечение будет переведено на Unicode (а это произойдет в ближайшем будущем), проблема несовместимости кодировок исчезнет.
Подробно о Unicode вы можете прочитать по адресу http://ru.wikipedia.org/wiki/ Unicode.
Второе существенное усовершенствование PHP 6 — это поддержка пространств имен, что позволяет избежать коллизий между именами функций и классов. Подробно о пространствах имен мы поговорим в главе 24.
Кроме того, PHP 6 обеспечивается "родная" (без использования дополнительных классов) поддержка SOAP и XML. Правда, рассмотрение SOAP и XML выходит за рамки этой книги, но все же вы должны знать, что такая поддержка есть уже на уровне PHP.
Вместе с тем некоторые функции из новой версии были удалены. В частности из состава PHP 6 исключены следующие директивы (и выполняемые ими функции):
magic_quotes — управляла экранированием кавычек;
register_globals — регистрировала глобальные переменные;
register_long_arrays — регистрировала длинные массивы;
safe_mode — безопасный режим, но на самом деле он не делал безопаснее сценарии, поэтому его и устранили.
Исключение этих директив позволило сделать PHP-сценарии более защищенными.
Не спорю, с включенными директивами magic_quotes и register_globals программировать было несколько удобнее, и разработчики очень часто жертвовали безопасностью ради комфорта. Сейчас же наоборот — безопасность на первом месте.
MySQL Ни один серьезный Web-проект не обходится без базы данных, ведь хранение данных в файлах давно считается пережитком прошлого, хотя до сих пор можно встретить проекты, работающие по старинке. PHP поддерживает много разных баз данных, но стандартом де-факто является сервер баз данных MySQL. На сегодняшний день доступна уже шестая версия этого популярного сервера. Кроме MySQL в этой книге мы рассмотрим еще одну альтернативную систему управления базами данных — SQLite. Почему именно SQLite? На заре пятой версии PHP ходили слухи, что новая (т. е. пятая на тот момент) версия PHP из-за лицензионных разногласий не будет вообще поддерживать MySQL. Поэтому возникла необходимость в легком и простом сервере баз данных. Им стал SQLite. К счастью, поддержка MySQL не была удалена из PHP 5, и обе последние версии (5 и 6) полностью поддерживают MySQL.
Поддержка читателей Если при чтении книги у вас возникнут какие-либо вопросы, вы всегда можете задать их на форуме сайта www.dkws.org.ua.
ЧАСТЬ
ТЕОРИЯ
РАЗДЕЛ
Глава 1. Установка необходимого программного обеспечения Глава 2. Первая PHP-программа Глава 3. Основы синтаксиса PHP ГЛ АВ А Установка необходимого программного обеспечения 1.1. Нужно ли устанавливать программное обеспечение При написании этой книги я вообще сомневался в целесообразности данной главы.Почему? Если вы купили эту книгу, значит, со временем собираетесь профессионально заниматься PHP (разрабатывать сайты, сценарии) или же планируете создать собственный сайт на PHP. Следовательно, вам понадобится хостинг с поддержкой PHP. Учитывая то, что PHP-хостинг сейчас стоит очень дешево, как и безлимитный Интернет, то все, что нужно для PHP-разработки, — это какой-нибудь текстовый редактор с поддержкой PHP-синтаксиса.
Все, что вам нужно, — это написать сценарий. В свою очередь, сценарий — это обычный текстовый файл. Как только сценарий будет готов, вам его нужно загрузить по FTP на ваш хостинг и запустить через браузер. При этом совсем не имеет значения, какую операционную систему вы используете: Windows, Linux или даже MacOS.
Ранее имело смысл устанавливать на свой компьютер Apache + PHP + сервер баз данных MySQL. Сейчас можно производить разработку и отладку сценариев непосредственно на сервере. Так даже правильнее, поскольку конфигурации Apache и PHP на локальном и удаленном сервере в 99% случаев будут различны, поэтому при переносе сценариев могут возникнуть нюансы. Какие именно? Начиная с самых безобидных вроде отличающихся параметров базы данных MySQL до разницы в версии PHP. С параметрами базы данных все просто: при переносе сценария с одного сервера на другой не забывайте проверять параметры доступа, иначе ваши сценарии откажутся работать. Чуть позже мы продемонстрируем пример, позволяющий легко избавиться от этой проблемы. А вот с версией PHP и установленными PHP-расширениями вообще могут возникнуть глобальные проблемы. Помню, я столкнулся со следующей проблемой. У меня был отлично работающий проект, отправляющий прайс-листы клиентам одной из поддерживаемых мною организаций. Сценарий был предельно простым: пользователь загружал новый прайс-лист, а сценарий отправлял его всем клиентам, адреса которых были в базе данных. Для отправки сообщений использовался класс PHPMailer. После переноса на другой сервер сценарий перестал запускаться, причем даже не выдавал сообщение об ошибке.
Первым делом я запустил функцию phpinfo():
Результат меня немного поразил. На сервере была установлена четвертая (!) версия PHP. Учитывая, что уже есть шестая версия, PHP 4 выглядит антиквариатом. Решить проблему удалось путем загрузки класса PHPMailer для PHP 4. Хорошо, что такой до сих пор сохранился на серверах разработчиков!
Иная распространенная проблема — отсутствие на другом сервере необходимых вам расширений. Например, вы создали галерею картинок, использующую функции из библиотеки GD. Но ваша галерея не будет работать, если на сервере не установлено расширение GD (PHP-библиотека GD). Поэтому, прежде чем размещать сценарий на сервере, вызовите функцию phpinfo() и убедитесь, что на сервере установлена нужная версия PHP и нужные расширения.
Как узнать, какая версия PHP вам нужна? Все зависит от того, как вы писали свой код. Если вы не использовали функции PHP 5, например scandir(), file_get_ contents() и др., то вам, по сути, хватит PHP 4. А вот если вы использовали пространства имен и другие возможности PHP 6, тогда вам нужна только шестая версия PHP. Все новые версии PHP поддерживают все функции предыдущих версий.
Однако не нужно забывать об особенностях PHP 6. Если вы ранее программировали на PHP, то могу поспорить, что вы привыкли работать с включенной директивой register_globals. В PHP 6 ее нет, поэтому бльшую часть ваших сценариев придется переписать с учетом этой особенности. Если вы не программировали до этого на PHP, то не беспокойтесь по этому поводу: все сценарии в этой книге будут написаны с учетом особенностей PHP 6.
Итак, если вы не собираетесь устанавливать Web-сервер Apache, интерпретатор PHP и сервер баз данных на свой компьютер, вам понадобятся две программы — текстовый редактор и FTP-клиент.
1.2. Выбор PHP-редактора и FTP-клиента Из всех PHP-редакторов, которыми я пользовался, мне больше всего понравились два редактора — PHP Expert Editor и Zend Studio (вы без проблем найдете сайты разработчиков этих редакторов). Оба редактора коммерческие, но они стоят своих денег. PHP Expert Editor (рис. 1.1) обеспечивает не только подсветку синтаксиса, но и умеет проверять синтаксис сценария. Правда, для проверки синтаксиса вам нужно установить PHP (об этом позже) и указать его в настройках программы.
ПРИМЕЧАНИЕ
Условно-бесплатную версию программы PHP Expert Editor вы найдете на прилагаемом диске в каталоге software.Глава 1. Установка необходимого программного обеспечения Для этого выполните команду Запуск | Настройки, в появившемся окне перейдите на вкладку Интерпретаторы скриптов (рис. 1.2) и укажите путь к интерпретатору PHP. Для проверки синтаксиса нажмите клавишу.
Возможности Zend Studio куда шире (рис. 1.3). Чего стоит только автодополнение кода, когда программа "читает" ваши мысли и дописывает за вас PHP-код. Если вы работали с Delphi и другими продуктами Borland, то поймете, о чем я говорю. Поверьте, очень удобно.
В качестве FTP-клиента могу порекомендовать бесплатную программу FileZilla (рис. 1.4), которая доступна как для Windows, так и для Linux. Версия 3.3.5 этого FTP-клиента находится на прилагаемом диске в каталоге software.
Рис. 1.3. Zend выводит не только имена функций, но и краткую справку по каждой функции 1.3. Установка Apache + PHP + MySQL в Windows Если вы все-таки решили настроить собственный сервер, то приступим к установке.
Первым делом вам нужно скачать с сайта www.apache.org Web-сервер Apache.
Вы скачаете файл httpd_2.2.X-win32-x86-no_ssl.msi (на момент написания этих строк уже была доступна альфа-версия 2.3, но пока ее не стоит использовать). Запустите его. Процесс установки обычно проходит без осложнений, но мы все же рассмотрим его.
ПРИМЕЧАНИЕ
На прилагаемом диске в каталоге software вы найдете обычную (no-SSL) и SSLверсию Apache для Windows. Linux-версии на диске нет, поскольку Apache входит в состав любого дистрибутива Linux, вам нужно только установить его. Несмотря на наличие в каталоге software установочных файлов Apache, не забудьте посетить страницу http://archive.apache.org/dist/httpd/binaries/win32/ — вполне возможно, что к моменту покупки книги вышла новая версия Apache. На диске находится версия 2.2.17, а также модуль mod_ftp для Windows.
УСТАНОВКА В WINDOWS VISTA И WINDOWS
Установку Apache, PHP и MySQL в Windows Vista и в Windows 7 желательно производить от имени администратора. Для этого щелкните на установочном файле правой кнопкой мыши и выберите команду Запуск от имени администратора.Важно правильно указать информацию о сервере: доменное имя сети, доменное имя компьютера (если вы не планируете использовать сервер во всей локальной сети, лучше установить localhost) и адрес администратора (рис. 1.5). Также вам нужно выбрать способ запуска сервера:
for All Users — сервер будет установлен как Windows-сервис и будет доступен всем пользователям;
only for the Current User — сервер нужно будет запускать вручную и он будет использовать порт 8080, т. е. при обращении к серверу нужно будет указывать порт в URL, например http://localhost:8080/.
Затем выберите Custom-тип установки и измените каталог установки Apache (рис. 1.6). По умолчанию используется каталог C:\Program Files\Apache Software Foundation\Apache2.2\, но намного проще установить сервер в каталог C:\WWW или D:\WWW. Нажав кнопку Space, вы можете посмотреть, сколько свободного места осталось на ваших дисках.
После установки Apache запустите браузер и введите следующий URL:
http://localhost Если вы увидите "It works!" (рис. 1.7), значит, установка Apache прошла успешно.
По умолчанию сервер Apache не поддерживает PHP. Поэтому скачайте с сайта www.php.net инсталлятор PHP (он тоже выполнен в виде MSI-пакета) и установите его. Обратите внимание на версию PHP! Если вы хотите использовать последние возможности PHP, нужно скачать шестую версию PHP.
В каталоге software прилагаемого диска вы найдете установочный файл PHP 5.2.
А в каталоге php6 вы найдете архивы как с откомпилированной Windows-версией, так и исходный код PHP 6.
При установке PHP обязательно выберите версию вашего Web-сервера. Мы установили версию 2.2, поэтому ее нужно выбрать при установке PHP (рис. 1.8). Далее нужно указать путь к конфигурационному каталогу Apache, чтобы инсталлятор PHP внес необходимые изменения в файлы конфигурации Apache. Если вы установили Apache в D:\WWW, то вам нужно указать следующий каталог: D:\WWW\conf.
Теперь нужно перезагрузить Apache. Для этого выполните команду Пуск | Выполнить и введите команду services.msc. Отыщите в списке служб Apache 2.2 и выберите команду Перезапустить службу (рис. 1.9). В случае возникновения ошибки перезапустите компьютер.
Теперь вам осталось скачать и установить сервер баз данных MySQL (http://mysql.com/). Его установка проходит вообще без каких-либо нюансов, поэтому мы не будем ее подробно рассматривать. В каталоге software вы найдете версию 5.1 (на данный момент это рекомендуемая, не экспериментальная версия MySQL) для 32- и 64-битных систем. В главе 2 мы напишем сценарий test.php, тестирующий созданную вами конфигурацию. Данный сценарий нужно поместить в подкаталог D:\WWW\htdocs.
ПРИМЕЧАНИЕ
На момент написания этих строк MySQL 6 все еще находится на стадии тестирования.Windows-версию MySQL 6 вы найдете на прилагаемом диске в каталоге php6.
Если вам лень устанавливать все отдельно, вы можете установить пакет XAMPP, сочетающий Apache, PHP и MySQL "в одном флаконе". Скачать последнюю версию XAMPP можно по адресу http://www.apachefriends.org/en/xampp.html.
На прилагаемом диске в каталоге software вы найдете последнюю (на момент написания этих строк) версию XAMPP — 1.7.3.
Основное преимущество XAMPP — простота установки и управления всеми сервисами, входящими в его состав (Web-сервер, FTP-сервер и MySQL). Но у XAMPP есть и недостаток — версии программного обеспечения, входящие в его состав, отстают от текущих. Например, в состав последней на момент написания этих строк версии XAMPP входила версия Apache 2.2.14, а на www.apache.org можно было скачать версию 2.2.17. Для начинающего программиста особой разницы нет, просто, чтобы вы знали, что в комплект "все в одном" редко входит все самое "свежее".
Установка XAMPP проблем не вызывает. Программа нормально работает в актуальных версиях Windows — XP, Vista и Windows 7. В Windows Vista и Windows программу установки XAMPP нужно запускать от имени администратора.
Желательно устанавливать XAMPP в корневой каталог диска C:\, а не в каталог C:\Program Files, чтобы не было различных проблем с правами доступа — так ре-