Введение 15
Для кого и о чем эта книга 15
Благодарности 16
Глава 1. Установка и настройка PHP 5 и Web-сервера Apache 2.0.0 17
Дистрибутивы 17
Установка Web-сервера Apache под Windows 19
Запуск и управление Apache 22
Управление Apache при помощи утилиты Apache Service Monitor 22
Управление Apache из консоли управления служб Windows 22
Управление Apache из меню Пуск 24
Управление Apache из командной строки 24
Проблемы с установкой Apache и их устранение 25
Сервер Apache не установился, как служба Windows, автоматически 25
Установка Apache, как службы Windows, вручную 25
Удаление службы Apache из списка служб Windows 26
Конфигурирование Apache 27
Пути к файлам 27
Директивы файла httpd.conf 27
Создание виртуальных хостов 30
Установка и настройка PHP 31
Установка PHP в качестве модуля 32
Установка PHP, как CGI-приложения 32
Директивы файла php.ini 33
Конфигурирование PHP 33
Ограничение по ресурсам 34
Обработка ошибок и ведение журнала 35
Обработка данных 37
Загрузка файлов 39
Подключение библиотек расширений 39
Подключение MySQL 39
Типичные ошибки, возникающие при установке Apache, PHP и MySQL 40
Не запускается инсталлятор Apache 40
Ошибка "Internal Server Error" при подключении PHP 41
Не исполняются PHP-скрипты 41
Сообщение "Notice: Undefined variable:" 41
Не подключается MySQL 42
Неизвестные ошибки 42
Глава 2. Приемы конфигурирования Web-сервера Apache 2 43
Особенности конфигурирования в Windows 43
Файл .htaccess 44
Синтаксис файла .htaccess 45
Индексные страницы 46
Запрет на отображение содержимого каталога при отсутствии индексного файла 47
Обработка кодов ответов Web-сервера Apache 47
Как выполнять код PHP в файлах HTML? 49
Задание кодировки файлов на сервере 50
Задание кодировки загружаемых файлов 50
Отключение директивы MultiViews 51
Запрет доступа к файлам 51
Перенаправление на другой адрес 53
Преобразование адресов 55
Защита сайта с помощью файлов .htaccess и .htpasswd 60
Создание файла с паролями 61
Глава 3. Массивы 67
Создание одномерных массивов 67
Первый способ: присвоение значений 67
Второй способ: использование конструкции array() 69
Создание многомерных массивов 70
Обход массива в цикле 71
Цикл foreach 71
Цикл for 72
Цикл while 73
Обход многомерных массивов 74
Способы сортировки элементов массивов 75
Сортировка по возрастанию 76
Сортировка по убыванию 77
Естественная сортировка 77
Основные операции с массивами 79
Поиск элемента в массиве 79
Выборка ключей массива 80
Суперглобальные массивы 81
Типы суперглобальных массивов 82
Определение IP-адреса посетителя 83
Запрет посещений с определенного IP-адреса 84
Как узнать, на какой странице я нахожусь? 85
Как узнать, с какой страницы пришел посетитель? 86
Ловим пауков, или учет пользовательских агентов 86
Поддержка нескольких языков 89
Вывод случайного элемента массива 90
Задания 91
Глава 4. Работа со строками 92
Кавычки 92
Форматирование 95
Сравнение строк 100
Поиск в тексте 101
Замена в тексте 103
Разбивка строк на подстроки 106
Работа с символами 111
Преобразование кодировок 114
Работа с URL 115
Работа с путями к файлам и каталогам 117
Работа с датой и временем 119
Хранение данных 127
Подсветка кода PHP 130
Задания 131
Глава 5. Регулярные выражения 133
Базовый синтаксис и создание регулярных выражений 133
Функции для работы с регулярными выражениями 138
Конвертация даты из формата YYYY-MM-DD в DD.MM.YYYY 142
Проверка правильности ввода е-mail 142
Проверка правильности ввода URL 143
Проверка правильности ввода имени 144
Проверка правильности ввода числа 146
Корректность ввода даты 147
Только русский текст! 148
Автоподсветка URL 148
Конвертирование тегов в стиль форума phpBB и обратно 149
Работа с HTML-тегами: извлечение параметров и текста 151
Замена прямых кавычек на парные 152
Подстановка с использованием собственных тегов форматирования 152
Подсветка синтаксиса PHP: собственная функция 153
Задания 157
Глава 6. Работа с файлами и каталогами 159
Включение файлов в документ 159
Создание файлов и работа с ними 161
Атрибуты файлов 166
Загрузка файлов на сервер 167
Загрузка файлов с сервера 171
Загрузка файла частями, или как разрезать и "склеить" файл? 172
Как посмотреть список файлов в каталоге? 173
Как определить: перед нами каталог или файл, или подсчет файлов в каталоге 176
Работа с правами доступа 177
Создание каталога 178
Удаление каталогов 179
Редактирование файлов на сервере 180
Автоматическое редактирование текстовых файлов 183
Удаление строк из середины файла 185
Случайный вывод из файла 186
Работа с индексным файлом: запись, извлечение, редактирование и удаление 187
Блокировка файла 193
Сохранение и извлечение из файла массивов и объектов 195
Работа с csv-файлами, или как загрузить данные из MS Excel 197
Задания 197
Глава 7. Плоские файлы 199
Что такое плоские файлы и для чего они нужны? 199
Создание файла 200
Заполнение файла 201
Чтение информации из файла 202
Замена записи 204
Удаление записи 205
Глава 8. Работа с MySQL 207
Типы таблиц — почему их так много? 208
Основы SQL 209
CREATE DATABASE 209
USE 211
CREATE TABLE 211
DESCRIBE 213
ALTER TABLE 213
DROP TABLE 215
DROP DATABASE 216
INSERT INTO...VALUES 216
DELETE 218
SELECT 218
UPDATE 223
SHOW 223
Соответствие шаблону (LIKE и NOT LIKE) 226
Функция COUNT 226
Соединение с базой данных — подводные камни 227
Закрытие соединения 232
Выполнение запросов 232
Как осуществить выборку? 233
Сколько строк в выборке? 238
Подробно о транзакциях 240
Проверка результатов запроса на значение NULL 243
Избежание повторных запросов 246
Полнотекстовый поиск 249
Временные таблицы 251
Удаление и выборка нескольких записей 253
Перенос данных из MySQL в dbf-формат 254
Преобразование времени 258
Перенос данных из SQL-файла в базу данных 260
Задания 261
Глава 9. Безопасное программирование Web-сайтов 262
Проверка данных, вводимых пользователем 262
Функция htmlspecialchars() 264
Межсайтовый скриптинг 265
Защита имени от подделки 266
Как просто и быстро стереть весь сайт, или загружаем файлы с исполняемым кодом 268
Необратимое шифрование MD5 — зачем? 271
Обратимое шифрование с библиотекой mcrypt 272
Если register_globals = On 273
Насколько опасны cookies? 275
Безопасная настройка PHP 277
Безопасная установка MySQL 278
Инъекционные SQL-запросы 282
Глава 10. Сессии и cookies 286
Как передать переменную из одного скрипта в другой? 286
Как проверить, включены ли cookies? 294
Защита от заполнения формы с другого сайта 295
Авторизация с помощью сессий 296
Определение посетителей online, или как отслеживать "уход" посетителей 299
Задания 302
Глава 11. Объектно-ориентированное программирование и исключения 303
Создание классов 304
Создание объектов 310
Клонирование объектов 313
Подсчет объектов или статических членов и методов 314
Обработка исключительных ситуаций 317
Глава 12. Работа с FTP 323
Установка соединения с FTP-сервером 323
Навигация по FTP-серверу 326
Работа с каталогами 328
Работа с файлами 329
Загрузка файлов на FTP-сервер 329
Переименование, удаление файлов на FTP-сервере 331
Загрузка файлов с FTP-сервера 331
Работа с правами доступа 332
Глава 13. Примеры работы с сетевыми протоколами 334
Подключение к удаленному серверу 334
Извлечение заголовков HTTP-ответа 337
Определение размера файла на удаленном хосте 340
Отправление данных методом POST 340
Создание Whois-сервиса 342
PHP и DNS 345
Подробно о кэшировании 348
Функции session_cache_limiter() и session_cache_expire() 352
Задания 353
Глава 14. Электронная почта 354
Отправка сообщений с помощью стандартной функции mail() 354
Собственная функция mail() или отправка сообщений через удаленный SMTP-сервер 358
Как узнать адреса почтовых ретрансляторов? 359
Как присоединить вложения к сообщениям и что такое спецификация MIME? 360
Глава 15. Работа с библиотеками расширений 363
Основные операции с PDF-документами 364
Открытие 364
Сохранение 364
Создание новой страницы 365
Добавление закладки 365
Работа с текстом 366
Работа со шрифтами 369
Рисование линий в PDF-документе 369
Загрузка изображения в PDF-документ 370
Вывод PDF-документа в браузер 370
Завершение работы с PDF-документом 370
Пример: рисование квадрата в PDF-документе 371
Работа с графикой. Библиотека GD 372
Функция getimagesize() 373
Функция imagecreatetruecolor() 374
Функция imagecreatefromjpeg() 374
Функция imagecreatefromgif() 374
Функция imagecreatefrompng() 374
Функция imagecopyresampled() 375
Функция imagejpeg() 375
Функция imagegif() 376
Функция imagepng() 376
Автоматическое масштабирование изображения 377
Вывод сгенерированного изображения в HTML-коде 381
Добавление текста на изображение 382
Функция imagecolorallocate() 382
Функция imagecolorallocatealpha() 382
Функция imagestring() 383
Функция imagettfbbox() 383
Функция imagettftext() 384
Построение круговой диаграммы 387
Функция imagecreatetruecolor() 387
Функция imagefilledellipse() 387
Функция imagefilledarc() 387
Построение гистограммы 390
Функция imagefilledrectangle() 390
Глава 16. Часто встречающиеся ошибки 392
Преждевременная отправка HTTP-заголовков 392
Орфографические ошибки 395
Права доступа 397
Замечания 397
Привилегии в MySQL 398
Глава 17. Разное 399
Когда необходима рекурсия? 399
Создание переменных, или как динамически формировать PHP-код 400
Символ @ — подавление вывода ошибок 402
Скрипт предзагрузки страницы 403
Время генерации страницы 404
Задержка вывода 405
Два обработчика для одной формы 406
Счетчик загрузки файлов 409
Вывод текущего курса валют 410
Постраничная навигация 411
Глава 18. Полезные советы 414
Взаимодействие с заказчиком 414
Встречают по одежке 415
Заказчик — дурак? 417
Рожденный ползать — уйди со взлетной полосы! 417
Невербальное общение 418
В любом из нас спит гений. И с каждым днем все крепче 420
Немного о виктимологии 420
Личная встреча — лишний шаг к успеху 420
Не возражайте "в лоб" 421
ЯЗВа 421
АнтиЯЗВа 422
Закон об объеме оперативной памяти 422
Закон края (закон Эббингауза) 423
Закон контрастов 423
Принцип ледокола или еще одно следствие из закона контрастов 423
Не уходите от скользких вопросов 424
Минус эмоции 425
Немного о НЛП 425
О разработке программных продуктов 428
Ни дня без кода! 428
Не занимайтесь необдуманным копированием! 428
Не пишите в стол! 429
Создавайте рабочие программы! 429
Не бойтесь отладки 429
Тестируйте приложения 430
Ориентируйтесь на пользователя! 430
Читайте книги! 430
Не забывайте про проектирование! 430
Четко оценивайте время работы над проектом! 431
Не занимайтесь взломом 431
Технические советы 432
Не стоит недооценивать PHP 433
Не пренебрегайте словами "хороший стиль программирования"! 434
Расстановка фигурных скобок и отступы 434
Пробелы вокруг символов 436
Комментарии 437
Имена переменных и функций 439
Не шутите с именами! 439
Структурируйте ваш код 441
Не делайте средствами PHP то, что можно сделать с помощью СУБД 442
Делайте свои скрипты устойчивыми к ошибкам 443
Взаимодействуйте с другими программистами 444
Не злоупотребляйте регулярными выражениями 444
Не "изобретайте велосипед" 444
Не используйте без надобности функции форматного вывода 444
Не используйте устаревшие конструкции языка 444
Приложение 1. HTML, XTML, DHTML 445
Что такое XHTML? 445
Обязательные теги 445
Новый обязательный атрибут в теге 446
Нижний регистр тегов 446
Правила вложенности тегов обязательны 446
Закрывающие теги обязательны 446
Значения атрибутов в кавычках 446
Атрибут name заменяется атрибутом id 447
Символы разметки < и & 447
Что такое DHTML? 447
Оптимизация HTML-кода 448
Чем проще — тем лучше 448
Больше пишите руками 448
Табличная верстка против верстки на слоях 449
Тестируйте с отключенными изображениями 450
Оптимизация под разные настройки экрана 450
Оптимизация под разные браузеры 451
Самые популярные браузеры 452
Проверяйте грамматику и орфографию 453
Приемы работы с HTML 453
Проблемы относительных ссылок и тег 453
Резиновый табличный дизайн 454
Тонкие рамки таблицы 455
Тонкие рамки для Internet Explorer 456
Тонкие рамки: универсальное решение 456
Тонкие рамки: использование стилей CSS 459
Применение "распорок" 459
Определяйте цвет фона 461
Точное позиционирование изображений 462
Синяя рамка на ссылках в виде изображений 464
Передача параметров при ссылке mailto 464
Коды спецсимволов 465
Метатеги 467
Взаимодействие с поисковыми системами 468
Description 468
Keywords 468
Revisit 468
Robots 469
Описание документа 470
Content-Type 470
Content-Language 470
Document-state 470
Resource-type 471
Generator 471
Author 471
Copyrigh 471
Кэширование 471
Pragma 472
Cache-Control 472
Expires 473
Переадресация 473
Refresh 473
Location 473
Приложение 2. CSS 474
Спецификации стилей 475
Применение стилей к документу HTML 476
Внедренные стили: свойство style 476
Тег
476

Внешний css-файл
477

Импорт css-файла
478

Синтаксис стилей CSS
478

Базовые селекторы
479

Селектор class
480

Селектор id
480

Приоритеты применения стилей CSS
480

Комбинация селекторов стилей
483

Разные стили для разных устройств вывода
484

Шрифты
485

Определение типа шрифта
485

Загружаемые шрифты
486

Стили шрифтов
486

Варианты шрифтов
487

Полнота шрифта
487

Сокращенный формат записи стилей шрифтов
488

Единицы измерения и размеры шрифтов
488

Недостатки абсолютных единиц измерения
489

Проблемы при использовании пунктов
489

Используйте пункты для печати
490

Относительные единицы измерения em, ex, %
490

Использование пикселов
491

Относительные ключевые слова
491

Относительные ключевые слова для задания абсолютного размера шрифтов
492

Проблемы использования относительных единиц измерения
492

Форматирование текста
493

Выравнивание по горизонтали
494

Выравнивание по вертикали
494

Оформление текста
495

Межсимвольное расстояние
495

Расстояние между словами
496

Межстрочное расстояние
496

Обработка пробелов
496

Прописные и строчные буквы
497

Отступ первой строки
498

Буквица
498

Первая строка
498

Тень текста
499

Определение цвета
500

Шестнадцатеричное задание цвета
500

Трехзначное шестнадцатеричное задание цвета
500

RGB-значения
500

RGB-значения в процентах
500

Ключевые слова
501

Системные цвета
501

Фон
502

Цвет фона
503

Фоновое изображение
503

Повторяемость фрагмента фона
503

Прокрутка фона
504

Позиционирование фона
504

Сокращенная запись свойств фона
505

Внешний отступ, внутренний отступ, рамка
505

Внутренний отступ
506

Внешний отступ
507

Рамка
507

Стиль отображения
508

Размер рамки
508

Цвет рамки
509

Сокращенный формат описания рамок
510

Позиционирование
510

Управление перекрытием
511

Установка смещений
512

Плавающие элементы
512

Обтекание текстом
513

Псевдоклассы ссылок
514

Списки
514

Типы маркеров
515

Изображения в качестве маркеров
515

Положение маркера
516

Приложение
3
. Секреты быстрой загрузки сайтов или оптимизация графики
под Web
517

Формат GIF
517

Применение GIF
518

Формат JPEG
518

Применение JPEG
519

Формат PNG
519

Использование PNG
520

Оптимизация графики
520

Оптимизация GIF
521

Уменьшение количества цветов
521

Оптимизация палитры
521

Художественная обработка изображений
523

Оптимизация прозрачных изображений
523

Оптимизация JPEG
524

Оптимизация изображений при работе с HTML
524

Искажение размеров
524

Использование фоновых изображений
525

Разделение изображения на фрагменты
528

Приложение 4. Работа с JavaScript
532

Сложности создания переносимого кода
533

Определение типа браузера
534

Проверка объектов
535

Проверка свойств и методов объектов
536

Работа с окнами
536

Создание и открытие окна
536

Закрытие окна
538

Приемы работы с формой
539

Ввод только цифр или букв
539

Блокирование элементов формы
541

Проверка введенных данных перед отправкой
542

Функция проверки правильности e-mail
543

Функция проверки правильности даты
544

Отправка формы без нажатия кнопки Отправить
545

Извлечение переменных из адресной строки
546

Подсветка ячейки при наведении указателя мыши
548

Смена изображения при наведении указателя мыши
549

Передача данных между фреймами
550

Передача данных в два фрейма одновременно
552

Горизонтальное выпадающее меню
553

Скрытие и отображение объектов по событию
558

Приложение 5. Flash, PHP и JavaScript
560

Создание Flash с помощью PHP
560

Создание Flash-фильма с градиентом
561

Создание Flash-фильма с трансформацией объектов
563

Определение наличия Flash у посетителя
565

Вставка Flash в HTML-страницу
565

Передача параметров из JavaScript во Flash
568

Предметный указатель
570


12
Оглавление
13
Оглавление