Введение 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
Оглавление