- •Оглавление
- •Что такое интернет
- •Готовимся к созданию Web-страниц
- •Железо, железо и еще раз железо...
- •Домашняя эргономика — безопасность прежде всего!
- •Программное обеспечение для Web-мастера
- •Выбор хостинга
- •Знакомьтесь — РНР
- •История создания РНР
- •Установка РНР
- •Настройка РНР для Apache
- •Виртуальные хосты в Apache
- •Тестирование РНР
- •Установка и настройка дополнительных модулей
- •Переносимость и совместимость
- •Синтаксис РНР
- •Возможности РНР
- •Работа с базами данных
- •HTTP-аутентификация средствами РНР
- •Работа с изображениями
- •Поддержка закачки файлов
- •Поддержка HTTP-cookie
- •Использование регулярных выражений
- •Обработка ошибок
- •Управление электронными письмами
- •Вывод на экран и переменные в РНР
- •Простейшие арифметические операции
- •Простейшие логические операции
- •Циклы
- •Массивы
- •Работа со строками
- •Сессии
- •Программирование на РНР
- •Сравнение чисел
- •Вложение файлов в документ
- •Простейший счетчик посещений
- •Обработка форм
- •Отправление почты
- •Отправление письма в HTML-формате
- •Дата по-русски
- •Счетчик посещений с использованием базы данных
- •Счетчик персональной посещаемости
- •Сохраняем информацию о посещениях
- •Ах, баннеры, баннеры...
- •Счетчик посещений с выводом информации на экран
- •Счетчик сессий
- •Создание динамического меню
- •«Грабим» странички
- •Голосование на сайте
- •Гостевая книга
- •Технология создания
- •Свой чат — это просто
- •Использование специального привата
- •Интернет-магазин
- •Технология создания
- •Сервисы интернет-магазина
- •Архив рассылок
- •Совет первый: а нужно ли вам это?
- •Совет второй: забудьте все советы
- •Пример системы безопасности
- •HTTP-аутентификация в РНР
- •Защита программы
- •РНР в вопросах и ответах
- •Приложения
- •Приложение 3. Некоторые функции РНР
- •Приложение 4. Cookie
- •Приложение 5. Методы передачи данных POST и GET
- •Приложение 6. Время Unix
Чат |
165 |
ряд переводов строки, которые при обнаружении заменяем одинарным переводом строки. Потом открываем соединение с файлом и записываем туда объединенный массив из ников в чате.
И, на всякий случай, показываем ссылку, по которой можно обновить данные вручную, щелкнув мышкой:
<br><a href="userlist.phtml">Обновить</а>
</td></tr></table></td></tr>
</table></body></html>
Все, чат готов. Можете запускать и пользоваться!
Использование специального привата
Рассмотрим реализацию оригинального приватного общения в чате, при котором приватные сообщения выводятся в отдельное окошко, а не в общее окно с сообщениями всех пользователей.
На базе готового чата с возможностью регистрации и парольного входа создадим максимально защищенное пространство для переписки между двумя пользователями.
Ники в чате должны быть закреплены персонально, иначе теряется смысл привата.
Первое, что приходит на ум для решения поставленной задачи, — сделать несколько простых чатов и использовать их для приватов, разрешив вход по паролю. Это самый простой, но и самый неверный путь.
Если у вас всего несколько посетителей одновременно в чате, то такой подход еще может быть оправдан, но может случиться так, что все ваши приваты вдруг окажутся занятыми, а кто-то захочет еще. И увеличение количества готовых чатов —, не выход, так как есть способ лучше.
Не нужно множить чаты, достаточно сделать один, но работать он будет не с фиксированным файлом (в который заносятся сообщения, вводимые в чат), как происходит при работе обычного
166 |
Программирование на РНР |
чата, а с динамическим. Файлы будут создаваться по мере надобности и таким образом снимается ограничение на количество одновременно функционирующих приватов.
В первую очередь нужно подумать о том, что конкретно будет служить именем для файла сообщений в привате. Неплохой вариант — комбинация ника и пароля. Только не прямая, конечно, комбинация, а как-либо зашифрованная. Еще один вариант — генерация уникального имени в каталоге. Такую возможность предоставляют многие языки программирования (в том числе и РНР конечно же). Если нет такой возможности, можно генерировать случайное число и использовать его для имени файла. Однако все эти способы не дают абсолютной гарантии уникальности, а имя файла для привата обязательно должно быть уникальным.
Я предлагаю для генерации уникального имени использовать функцию времени, прошедшего с начала эпохи Unix (см. приложение 6).
Именно это количество секунд служит идеальным генератором случайных имен файлов для приватов в чате. Главное для привата — это уникальность имени. Сформировать такое имя при помощи времени Unix очень просто: достаточно считать показания секундомера Unix и объединить полученное значение со строкой, включающей в себя точку и расширение файла с сообщениями собеседника.
Первая строка этого файла уже занята под тег открытия кода и комментарий.
Эта же строка нам понадобится для авторизации. В нее нужно дописать ники двух пользователей, которым доступен именно этот файл с сообщениями. Каждый раз при авторизации нужно проверять, совпадают ли имена входящих в приват с записанными в этой строке, и на основании полученных данных пропускать посетителя в приват или нет. Рассмотрим эту технологию подробней.
Чат |
167 |
Как приглашать в приват
Для приглашения в приват может использоваться или ссылка, или кнопка — это дело вкуса и возможностей. Нажав на такую ссылку, посетитель попадает на страницу, предлагающую выбрать, кого именно из присутствующих в чате в данный момент он желает пригласить в приват .
Если используется ссылка, данные авторизации человека, открывающего приват, нужно передать методом GET. А если кнопка — можно (скорее, даже нужно) использовать метод POST.
Можно при входе в приват еще раз попросить ввести пароль.
На этом этапе обязательно нужно проверить, есть ли такие пользователи среди зарегистрированных в чате, чтобы заблокировать возможность несанкционированного входа. Можно также предоставить входящим возможность немного настроить свой чат — выбрать цвет, скорость обновления и т.д.
Когда все, что нужно, выбрано (самое главное — кого пригласить в приватный чат), посетитель нажимает на кнопку входа, и запускается программа генерации привата.
Создание привата
Сначала, как и всегда, нужно проверить правильность пароля и ника. Если все нормально и такой пользователь зарегистрирован, переходим к тому, кого он пригласил. Этого посетителя тоже надо проверить, например, на присутствие в чате. Дальше необходимо сформировать данные для авторизации. Для этого считываем время Unix:
$time = time(void);
Определяем имя файла с сообщениями, используя любой путь к файлу:
$file = "любой путь".$time.".phtml";
Конечно, чат должен поддерживать технологию отображения присутствующих, иначе придется предлагать выбор из всех зарегистрированных ников, что будет просто нехорошо с нашей стороны.
168 |
Программирование на РНР |
Формируем строку для записи в несуществующий пока файл, путь к которому мы только что задали:
$sav = "<? /* * $person * для * $kto * \n";
В переменных $person и $kto хранятся соответственно ники приглашающего и приглашенного в приват. Записываем строку $sav в файл специальной командой:
// пример записи переменной в файл
$file = "имя файла, в который записываем"; $sav = "то, что записываем";
$fp = fopen ($file, "w"); // открываем файл if($fp)
{
$fw = fwrite ($fp, $sav); // если успешно, записываем в него
fclose($fp); // закрываем файл
}
else
{
/* тут можно вставить процедуру обработки ошибки записи в файл */
}
Подобные команды устроены таким образом, что, если файл не существует, он создается. Однако создаваться он будет только в том случае, если у каталога, в котором он создается, установлены соответствующие права.
Как связаться с приглашенным
Для этого можно воспользоваться самым простым методом — вывести приглашение в основной чат. Оно должно быть оформлено в виде ссылки, чтобы приглашенный мог просто нажать на
Чат |
|
|
169 |
нее, |
ввести в открывшейся странице пароль и сразу попасть |
||
в приват. Впрочем, иногда лучше вывести сообщение о приглашении в приват не всем сразу, а конкретному посетителю.
В ссылке приглашения должно передаваться имя файла привата, сгенерированное с помощью функции времени Unix. Передавать его в открытом виде нельзя и придется применить любой из обратимых методов шифрования.
Самый простой способ зашифровать — выполнить ряд обратимых арифметических действий. Ведь передавать нужно простое число, которое можно сложить с другим.
Вместе с зашифрованным именем файла надо передать идентификатор приглашенного, чтобы никто, кроме него, не мог попасть в приват. Я рекомендую воспользоваться тем методом, на основе которого реализована авторизация в чате. В принципе, можно передавать и сам ник, мы предусмотрели дополнительную защиту от чужого проникновения в приват, когда записали ники имеющих право войти в него в первую строку файла привата.
Приглашенному в приват тоже можно дать возможность настроить его для себя, потом проверить пароль и учетную запись и, если все нормально, разрешить вход в чат. При этом необходимо расшифровать имя файла привата. Его, как и ник входящего, надо передать в чат методом GET. ЭТО нужно для того, чтобы приват мог каждый раз отслеживать и идентифицировать эти данные.
Осталось упомянуть о том, что при работе привата надо каждый раз проверять соответствие ников вошедших с записанными в файле привата. Имя файла не должно появляться в ссылках ни на одном из этапов входа в приват. Пользуйтесь везде разными формулами для скрытия истинного имени файла привата. Старайтесь генерировать каждый раз новую формулу.
Приват следует сделать максимально простым и быстрым. Посетители используют приват не для каких-то дополнительных возможностей, а чтобы спокойно пообщаться в полной уверенности, что их не «подслушают».
