Облачный хостинг VDS за 2 минуты

Настоящий облачный VDS-хостинг от UltraVDS: тестируем производительность

Дельта-синхронизация крипто-дисков

Существуют разные способы зашифровать "облако". Один из них - поместить в облако крипто-диск. В предыдущей статье мы писали, почему это не всегда удобно.

Дельта синхронизация без облака

Ранее мы показывали разные способы синхронизации криптодиска между ПК и Android-устройством.

Смотрим плавность хода с помощью BMW Rheingold

Всем знакома ситуация, когда двигатель немного "троит", но пропусков зажигания нет...

PHP 5/6 и MySQL 6. Разработка Web-приложений. 3-е изд


Автор: Колисниченко Денис Николаевич

Даны начала программирования на PHP: установка и настройка PHP и MySQL, выбор редактора PHP-кода, основы синтаксиса и самые полезные функции PHP. Рассмотрено создание дополнительных модулей - фотогалереи, RSS-граббера, гостевой книги, собственного шаблонизатора, применение шаблонизатора Smarty, работа с SMTP, POP, MP3 и сервисом reCAPTCHA. В качестве хранилища данных использованы два сервера - самая современная версия MySQL 6 и "суперлегкий" сервер баз данных SQLite. Показано, как с помощью технологии Ajax добиться обновления данных на странице без ее перезагрузки. Представлены два реальных проекта: универсальная CMS и система продажи недвижимости. В третьем издании подробно рассмотрена программа phpMyAdmin, интеграция PHP-сценариев и Flash-приложений, оптимизация PHP-кода, добавлен новый материал в 12 глав. Прилагаемый компакт-диск содержит дополнительные главы, все листинги из книги, а также необходимое программное обеспечение

Оглавление

Введение 1
Что нового в 3-м издании 1
Немного истории 2
PHP 6 3
MySQL 4
Поддержка читателей 4

ЧАСТЬ I. ТЕОРИЯ

5

РАЗДЕЛ 1. БЫСТРЫЙ СТАРТ

7

Глава 1. Установка необходимого программного обеспечения

9
1.1. Нужно ли устанавливать программное обеспечение 9
1.2. Выбор PHP-редактора и FTP-клиента 10
1.3. Установка Apache + PHP + MySQL в Windows 13
1.4. Установка Apache + PHP + MySQL в Linux 20
1.5. Несколько советов 21

Глава 2. Первая PHP-программа

22
2.1. Ваша первая программа 22
2.2. Запуск PHP-программы 23
2.3. Вывод текста без echo 24
2.4. Совместимость с PHP 4 25

Глава 3. Основы синтаксиса PHP

27
3.1. Переменные 27
3.1.1. Правила объявления переменных. Имена переменных 27
3.1.2. Типы данных переменных 28
3.1.3. Булевы переменные 29
3.1.4. Операции над переменными 30
3.1.5. Ссылки 31
3.2. Константы 32
3.3. Выражения и операции 33
3.3.1. Что такое выражение 33
3.3.2. Арифметические операции 33
3.3.3. Логические выражения 34
3.3.4. Приоритеты операций 34
3.3.5. Операторы эквивалентности == и === 35
3.3.6. Операции со строками 36
3.4. Условный оператор 37
3.5. Циклы 38
3.5.1. Цикл со счетчиком 38
3.5.2. Цикл while 38
3.5.3. Цикл do-while 39
3.5.4. Принудительное завершение цикла и пропуск итерации 39
3.6. Оператор выбора switch-case 40

РАЗДЕЛ 2. ПЕРЕДАЧА ПАРАМЕТРОВ PHP-ПРОГРАММАМ

43

Глава 4. Методы GET и POST

45
4.1. Интерфейс CGI 45
4.2. Метод GET 47
4.3. Метод POST 47

Глава 5. Протокол HTTP и интерфейс CGI

49
5.1. Специальные переменные окружения CGI 49
5.2. Заголовки протокола HTTP 50
5.3. Коды ответов протокола HTTP 51

Глава 6. Передача параметров посредством HTML-формы

53
6.1. Создание простейшей формы и ее обработка в сценарии 53
6.2. Создание пользовательского интерфейса с помощью формы 56
6.2.1. Ввод текста. Теги INPUT и TEXTAREA 57
6.2.2. Зависимые и независимые переключатели 58
6.2.3. Списки выбора 59
6.2.4. Форма для передачи файлов 61
6.2.5. Кнопки 61
6.3. Проверка параметров формы 62
6.3.1. Проверка корректности e-mail 63
6.3.2. Проверка правильности номера кредитной карты 64
6.3.3. Удаление лишних пробелов 65
6.4. Защита от спама с помощью CAPTCHA 65
6.5. Форма поиска в Яндексе 68

Глава 7. Запоминание параметров с помощью Cookies и сессий

69
7.1. Что такое Cookies и как с ними работать 69
7.2. Механизм сессий 71
7.2.1. Сессии и Cookies: преимущества и недостатки 71
7.2.2. Для чего нужны сессии 71
7.2.3. Как работает механизм сессий 73
7.2.4. Обход Cookies 74
7.3. Массивы и Cookies 75

Глава 8. Отдельное слово о директиве register_globals

76
8.1. Почему опасно использовать register_globals 76
8.2. Если register_globals отключена 80
8.3. PHP 6 и register_globals 82

РАЗДЕЛ 3. МАССИВЫ И СПИСКИ

83

Глава 9. Основные операции над массивами и списками

85
9.1. Массив и список. Цикл foreach 85
9.2. Функции list() и array() 87
9.3. Удаление массива 88
9.4. Слияние массивов 88
9.5. Функция print_r() 90

Глава 10. Функции сортировки массивов

92
10.1. Функции для сортировки массивов 92
10.2. Функция sort() — сортировка списка 92
10.3. Функция asort() — сортировка массива по значениям 93
10.4. Функция ksort() — сортировка по ключам 94
10.5. Функции array_reverse() и shuffle() 95
10.6. Собственная функция сортировки 95
10.7. Натуральная сортировка 96

Глава 11. Особые операции над массивами

98
11.1. Добавление и удаление элементов массива 98
11.2. Упаковка переменных в массив и их извлечение 99
11.3. Получение части массива 101
11.4. Функции автоматического заполнения массива 101
11.5. Сравнение массивов 102
11.6. Полезные операции над массивом 103
11.6.1. Вычисление суммы и произведения всех элементов массива 103
11.6.2. Проверка существования элемента в массиве 103
11.6.3. Получение случайного элемента из массива 104
11.6.4. Удаление дубликатов из массива 104
11.6.5. Получение значений и ключей массива 105
11.6.6. Замена местами значений и ключей 105
11.6.7. Подсчет значений в массиве 105
11.6.8. Замена в массиве 106
11.6.9. Поиск в массиве 106
11.6.10. Прогулка по массиву 107

РАЗДЕЛ 4. ФУНКЦИИ В PHP

109

Глава 12. Полезные стандартные функции

111
12.1. Генератор случайных чисел 111
12.2. Дата и время 112
12.2.1. Кратко о timestamp 112
12.2.2. Функции strtotime() и checkdate() 112
12.2.3. Вывод даты 113
12.3. Математические функции 115

Глава 13. Функции для работы со строками

116
13.1. Основные строковые функции 116
13.2. Специальные функции замены 119
13.3. Преобразование строки 120
13.4. Функции преобразования кодировок 122
13.5. Функции для работы с отдельными символами строки 122
13.6. Функция md5() и другие функции шифрования/хэширования 123
13.7. Функция explode(): выделение подстрок 124
13.8. Статистические функции 124
13.9. Функции вывода текста 125
13.10. Установка локали 127
13.11. Форматирование чисел и денежных величин 128

Глава 14. Работаем с файлами и каталогами

129
14.1. Права доступа в UNIX 129
14.2. Чтение файла 131
14.2.1. Использование функций fopen() и fread() 132
14.2.2. Использование функции file(): построчное чтение файла 134
14.2.3. Чтение всего файла: функция file_get_contents() 135
14.3. Запись файла 135
14.4. Создание временных файлов 136
14.5. Работа с CSV-файлами 136
14.6. Специальные функции для работы с файлами 139
14.6.1. Функции для работы с именами файлов 139
14.6.2. Работа с правами доступа 139
14.6.3. Копирование, переименование и удаление файлов 140
14.6.4. Время доступа к файлу 141
14.6.5. Другие полезные функции 142
14.7. Совместный доступ к файлу 142
14.8. Функции для работы с каталогами 143

Глава 15. Вывод графических изображений средствами PHP

145
15.1. Библиотека GD 145
15.1.1. Получение информации об изображении 145
15.1.2. Конвертирование графических форматов 148
15.1.3. Вывод текста поверх картинки 150
15.1.4. Прозрачность 153
15.2. Изменение размера изображения 153
15.3. Создание водяных знаков 155

Глава 16. Работа с сетевыми сокетами в PHP. Сетевые функции

157
16.1. Еще раз о том, что такое сокет 157
16.2. Использование сокетов 157
16.3. Пример использования сокетов 158
16.4. Блокирующий и неблокирующий режимы сокета 161
16.5. DNS-функции 162

Глава 17. Собственные функции

163
17.1. Зачем нужны собственные функции 163
17.2. Особенности функций в PHP 163
17.3. Объявление функции 164
17.4. Области видимости функции 165
17.5. Вложенность функций 165
17.6. Переменное число аргументов 167
17.7. Передача массивов в качестве параметров 168

РАЗДЕЛ 5. СЕРВЕРЫ БАЗ ДАННЫХ MYSQL 6 И SQLITE

169

Глава 18. Основы SQL

171
18.1. Немного истории 171
18.2. Преимущества SQL 171
18.3. Как выглядят запросы 172
18.4. Что такое база данных 173
18.5. Создание таблиц 174
18.6. Добавление записей в таблицу 177
18.7. Обновление записей 178
18.8. Выборка записей 179
18.9. Удаление записей 180
18.10. Встроенные функции 181
18.11. Группировка записей. Сложные запросы 181

Глава 19. Функции для работы с MySQL

185
19.1. Подключение к серверу MySQL 185
19.2. Несколько MySQL-соединений 187
19.3. Передача запросов серверу 188
19.4. Работа с базой данных. Создание базы данных 191
19.5. Функция mysql_real_escape_string($content) 192

Глава 20. Альтернативная база данных SQLite

193
20.1. MySQL vs SQLite: что лучше 193
20.2. Открытие базы данных 195
20.3. Передача запросов 195
20.4. Работа с результатом запроса 196
20.5. Список PHP-функций для работы с SQLite 197

Глава 21. Полезные приемы при работе с MySQL 6

199
21.1. Выбор кодировки 199
21.2. Сортировка: вывод новинок. Вывод случайных записей 200
21.3. Постраничный вывод таблицы 201

РАЗДЕЛ 6. ИНСТРУМЕНТЫ ДЛЯ СОЗДАНИЯ СЛОЖНЫХ ПРОЕКТОВ

207

Глава 22. Разработка собственного шаблонизатора

209
22.1. Организация файлов и каталогов проекта 209
22.2. Выносим параметры в отдельный файл 212
22.3. Подключение дополнительных файлов 213
22.3.1. Инструкции include и require 213
22.3.2. Альтернативный способ подключения сценариев 213
22.3.3. Инструкции include_once и require_once 215
22.4. Шаблоны 215

Глава 23. Шаблонизатор Smarty

219
23.1. Что такое Smarty 219
23.2. Установка Smarty 219
23.3. Создание setup.php 222
23.4. Разработка шаблонов Smarty 223
23.4.1. Комментарии в шаблонах 223
23.4.2. Переменные в Smarty 224
23.4.3. Файлы конфигурации шаблонов 225
23.4.4. Служебная переменная {$smarty} 226
23.4.5. Модификаторы переменных 227
23.4.6. Стандартные (встроенные) функции Smarty 230
Функции {include} и {insert} 230
Функция {foreach} 230
Функции {if}, {elseif}, {else} 232
Функция {capture} 233
Функция {php} 233
Функция {strip} 233
23.4.7. Пользовательские функции Smarty 234
Функция {assign} 234
Функция {cycle} 234
Функция {fetch} 235
Функции {html_checkboxes} и {html_radios} 235
Функция {html_image} 236
Функция {html_select_date} 236
Функция {html_select_time} 237
Функция {html_table} 238
23.5. Smarty для программиста 239
23.5.1. Специальные переменные 239
23.5.2. Полезные методы класса Smarty 241

Глава 24. Объектно-ориентированное программирование

242
24.1. Основы ООП 242
24.2. Классы и объекты 243
24.3. Конструкторы и деструкторы класса 245
24.4. Наследование классов. Полиморфизм 246
24.5. Новые возможности PHP 5/6 247
24.5.1. Область видимости членов класса 247
24.5.2. Абстрактные классы и методы 248
24.5.3. Служебное слово final 248
24.5.4. Клонирование объектов 249
24.5.5. Обработка исключительных ситуаций 250
24.5.6. Константы-члены класса 251
24.5.7. Статические члены класса 251
24.5.8. Оператор instanceof 252
24.5.9. Итераторы 252
24.5.10. Пространства имен 252

Глава 25. Механизм сессий

254
25.1. Для чего нужны сессии 254
25.2. Как работает механизм сессий 255
25.3. Обход Cookies 257
25.4. Сценарий аутентификации 257

Глава 26. Введение в PEAR

262
26.1. Серьезные проекты и PEAR 262
26.2. Пример использования класса DB 263

Глава 27. Контроль версий

267
27.1. Выбор системы контроля версий 267
27.2. Практическое использование TortoiseHG (Mercurial) 268
27.3. Просмотр внесенных изменений 269

Глава 28. Тестирование PHP-сценариев

273
28.1. Программа работает, но не так, как нам нужно 273
28.2. "Самодельные" точки останова 274
28.3. Система автоматического тестирования 275
28.4. Директива error_reporting 279

ЧАСТЬ II. ПРАКТИКА

281

РАЗДЕЛ 7. РАЗРАБОТКА ОСНОВНЫХ ЭЛЕМЕНТОВ САЙТА

283

Глава 29. Загрузка файлов на сервер

285
29.1. Что нужно знать о загрузке файлов на сервер 285
29.2. Реализация загрузки файла 288
29.3. Загрузка нескольких файлов 290
29.4. Проблемы при загрузке файлов 292

Глава 30. Использование FTP-функций

293
30.1. Функции для работы с FTP 293
30.2. Примеры использования FTP-функций 296

Глава 31. Отправка и прием почты

299
31.1. Отправка почты средствами PHP — функция mail() 299
31.2. Отправка писем с вложениями — класс HtmlMimeMail 300
31.2.1. Отправка сообщения 300
31.2.2. Проблемы при отправке сообщения 304
31.2.3. MIME-типы 305
31.3. Класс PHPMailer. Разработка сценария автоматической рассылки прайс-листа 306
31.4. Получение писем по протоколу POP3 310

Глава 32. Работа с RSS: получаем новости на сайт

314
32.1. Краткие сведения о RSS 314
32.2. Формат RSS-файла 314
32.3. Написание сценария импорта новостей 317
32.4. Подключение файла import.php к сайту 319
32.5. Создание граббера новостей 320

Глава 33. Поиск с использованием регулярных выражений

324
33.1. Нужно что-то найти... 324
33.2. Язык регулярных выражений RegEx 325
33.3. Управляющие конструкции 327
33.3.1. Квантификаторы 327
33.3.2. Альтернативный оператор | 327
33.3.3. Скобки 327
33.4. Псевдосимволы 328
33.5. Практическое использование RegEx-функций 328
33.6. Фильтры, или Конец эры регулярных выражений 332

Глава 34. Работаем с MP3

334
34.1. Формат MP3 334
34.2. Библиотека PEAR 335
34.3. Вывод ID3-тегов 336
34.4. Редактирование ID3-тегов 337
34.5. Удаление тега 338

Глава 35. Технология Ajax

339
35.1. Что такое Ajax 339
35.2. Ваше первое Ajax-приложение 340

РАЗДЕЛ 8. РАЗРАБОТКА ТИПИЧНОГО САЙТА

345

Глава 36. Создание простейшего движка сайта

347
36.1. Планирование движка 347
36.1.1. Зачем нужно разрабатывать собственный движок 347
36.1.2. Необходимые нам функции движка 348
36.1.3. "Принципиальная схема" движка 350
36.2. Основные функции движка 351
36.2.1. Разработка TPL-шаблона 351
36.2.2. Файл настроек 352
36.2.3. Основной файл CMS — index.php 353
36.2.4. Проектирование базы данных 355
Таблица static 355
Таблица cats 356
Таблица pages 357
36.2.5. Иерархическая структура сайта 358
Алгоритм работы меню 358
Сценарий menu.php 360
Вывод содержимого раздела и страницы 365
36.3. Дополнительные функции движка 369
36.3.1. Вывод информации из таблицы static 369
36.3.2. Функция вывода содержимого HTML-файла 370
36.3.3. Версия для печати 371
36.4. Где взять листинги этой главы 372

Глава 37. Создание фотогалереи

373
37.1. Постановка задачи 373
37.2. Загрузка изображений на сервер 373
37.3. Вывод галереи 377

Глава 38. Гостевая книга

380
38.1. Пережиток прошлого? 380
38.2. Разработка базы данных и структура гостевой книги 381
38.3. Вывод гостевой книги 381
38.4. Добавление записей в гостевую книгу 384
38.5. Сервисный сценарий gb_service.php 387

Глава 39. Интеграция галереи LiveJournal и вашего сайта

389
39.1. Что такое Живой журнал 389
39.2. Интеграция фотогалереи LiveJournal и сайта 390
39.3. Настройка внешнего вида галереи 394

Глава 40. Создание счетчика сайта

396
40.1. Постановка задачи 396
40.2. Файл конфигурации 396
40.3. Разработка таблиц counter и ipaddr 397
40.4. Сценарий counter.php 398
40.5. Сценарий reset_counter.php 402

Глава 41. Статистика сайта

404
41.1. Методы сбора статистики 404
41.2. Программы-анализаторы журналов Web-сервера 405
41.3. Системы статистики 407

Глава 42. Голосования (опросы)

410
42.1. Разработка собственной системы голосования 410
42.2. Разработка сценария poll_form.php 412
42.3. Сценарий poll_process.php 413
42.4. Сценарий poll_results.php 414

РАЗДЕЛ 9. СЛОЖНЫЙ ПРОЕКТ: САЙТ ПО ПРОДАЖЕ НЕДВИЖИМОСТИ

419

Глава 43. Постановка задачи

421
43.1. Функции будущего проекта 421
43.2. Разработка базы данных 422

Глава 44. Разработка основной части сайта

431
44.1. С чего начать 431
44.2. Реализация основных функций системы 432
44.2.1. Аутентификация пользователей 432
44.2.2. Вывод VIP-объявлений 435
44.2.3. Вывод объявлений об услугах 437
44.2.4. Вывод рекламных баннеров 438
44.2.5. Постраничный вывод объявлений 438
44.3. На что обратить внимание 441

Глава 45. Разработка панели администрирования

447
45.1. Функции панели управления 447
45.2. Управление VIP-объявлениями 448
45.3. Массовая отправка электронного сообщения 449
45.4. Общие операции с базой данных 450
45.5. Редактирование статей, новостей и контактов 450

РАЗДЕЛ 10. ОБЕСПЕЧЕНИЕ БЕЗОПАСНОСТИ САЙТА

451

Глава 46. SSL-соединения

453
46.1. Защищаем передаваемые данные 453
46.2. Настройка SSL в DirectAdmin 454
46.3. SSL-переменные 456

Глава 47. Защита PHP с помощью конфигурационного файла

458
47.1. Конфигурационный файл php.ini 458
47.2. Отключение потенциально опасных функций 460
47.3. Рекомендованные значения некоторых конфигурационных директив 460

Глава 48. Защита сайта от атак

461
48.1. Сайт в опасности 461
48.2. Два самых распространенных метода взлома 462
48.3. Межсайтовый скриптинг 462
48.4. SQL-инъекции 464
48.5. Флуд 468
48.6. Защита форума PHPBB2 от спаммеров 469
ПРИЛОЖЕНИЯ 471
Приложение 1. Программа phpMyAdmin 473
Действия над таблицами 474
Создание новой таблицы. Изменение структуры таблицы 476
Вставка записей 477
Обзор таблицы 477
Выполнение произвольного SQL-кода 477
Резервное копирование БД 479
Приложение 2. Flash и PHP 480
Приложение 3. Оптимизация PHP-кода 484
П3.1. Правильное использование echo 484
П3.2. Длина переменных 485
П3.3. Правильное обращение к элементам массива 485
П3.4. Циклы 486
П3.5. Чтение файлов 487
П3.6. Вывод текста: echo против printf 489
П3.7. "Лишние" вызовы функций 491
П3.8. Контрольные замеры 492
П3.8.1. Чтение файла 492
П3.8.2. Вывод содержимого файла 493
П3.9. Выводы 495
Приложение 4. Описание компакт-диска 496
Предметный указатель 499
VI Оглавление Оглавление V