Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PHP обучение на примерах - Кухарчик А..pdf
Скачиваний:
139
Добавлен:
24.05.2014
Размер:
24 Мб
Скачать
☆

Чат

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. ЭТО нужно для того, чтобы приват мог каждый раз отслеживать и идентифицировать эти данные.

Осталось упомянуть о том, что при работе привата надо каждый раз проверять соответствие ников вошедших с записанными в файле привата. Имя файла не должно появляться в ссылках ни на одном из этапов входа в приват. Пользуйтесь везде разными формулами для скрытия истинного имени файла привата. Старайтесь генерировать каждый раз новую формулу.

Приват следует сделать максимально простым и быстрым. Посетители используют приват не для каких-то дополнительных возможностей, а чтобы спокойно пообщаться в полной уверенности, что их не «подслушают».

Соседние файлы в предмете Программирование