Логотип StingRay

Поделиться
FacebookFacebookRSSTwitterYouTubeВ контактеОдноклассники
FacebookFacebookRSSTwitterYouTubeВ контактеОдноклассники
Силуэт человека

Файловый форум на PHP

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

Итак, речь идёт вот о чём. Представьте себе, что Вы – веб-программист, владеющий языком PHP, которому надо на этом самом PHP написать динамическую часть некоего сайта, а именно форум, но при этом Вы ограничены одним маленьким, но неприятным условием: у Вас нет никакой возможности работать с базами данных (БД) и строить форум на их основе. Тем не менее, надо что-то делать, и делать быстрее, ибо, как обычно, у проекта поджимают сроки. Когда я оказался в такой ситуации, я думал всего пару дней и придумал следующее: буду «изобретать» файловый форум.

Что же такое файловый форум в моём понимании? Определение тривиальное, но всё же определение: это форум, строящийся на использовании файлов. То есть файлы в каком-то смысле будут «изображать» собой БД. Причём как вариант можно было бы работать с одним файлом, где хранились бы все сообщения форума, и тогда мы имели бы следующее отождествление: файл = таблица БД = БД. Однако я решил работать со многими файлами, когда каждый файл хранит только одно сообщение, то есть является, если проводить аналогию, записью в таблице БД, – это снимает многие вопросы разграничения доступа и положительно упрощает программную архитектуру.

Естественно, первейшая проблема, с которой я столкнулся, – это уникальность имён файлов и их однозначная идентификация в иерархии сообщений. Было принято следующее весьма простое и функциональное, на мой взгляд, решение: называть файлы числами от 1 до n (где n – максимальное число сообщений одного уровня), а иерархию указывать, разделяя числа знаком подчёркивания «_». Например, файл с именем 1.txt хранит первое сообщение самого верхнего уровня форума, а 2_3.txt – третий ответ на второе сообщение, и т. д.

Структура файлов сама по себе проста до невозможности:

№ строки Содержание
1 Дата и время по формату: ДД.ММ.ГГГГ ЧЧ:ММ:СС
2 Имя автора сообщения со ссылкой на его электронный адрес: <A HRef="mailto:account@server.ext">Имя</A>
3 Тема сообщения (в случае отсутствия – «Без темы»)
4 и далее Текст сообщения, который может содержать символы перевода строки и т. п.

Сам алгоритм сводится к следующему: при построении списка сообщений какого-либо уровня осуществляется сканирование, например, текущей директории на сервере на предмет наличия файлов с номерами от 1 до n, с учётом префикса текущего уровня. Например, при построении списка сообщений самого верхнего уровня ищутся файлы с именами от 1.txt до 255.txt (здесь n = 255), а при построении списка ответов на второе сообщение из предыдущего списка – файлы с именами от 2_1.txt до 2_255.txt. Практика показала, что работает это весьма быстро.

Ниже у Вас будет возможность скачать полный исходный текст описываемого файлового форума, функциональность которого хоть и минимизирована (например, нет полной навигации по дереву сообщений), но всё же основная суть сохранена. Пока же попытаюсь изобразить структуру взаимоотношений различных его модулей:

Структура файлового форума

Здесь модуль Config.php хранит настройки форума, в частности, $MaxMessageCount – максимальное число сообщений одного уровня; модуль Forum.php – ядро форума, отображающее список сообщений и форму для их добавления и использующее модули Show.php и Add.php для, соответственно, вывода сообщений ($FileName – имя файла выводимого сообщения) и их добавления ($Prefix – префикс уровня сообщения, $Author, $Email, $Subject и $Body – поля «Имя автора», «Электронный адрес автора», «Тема сообщения» и «Текст сообщения» формы добавления).

А вот теперь Вы можете скачать обещанный исходный текст форума, но при одном условии: если Вы собираетесь использовать эту идею и/или её (изменённую) реализацию, Вы должны будете указать ссылку на сайт автора, то есть на мой сайт, примерно так: <A HRef="http://stanislaw.ru/" Target=_blank>Станислав.ру</A>.

P.S. Статья впервые была опубликована на сайте WebClass.ru.

Добавьте свой комментарий или войдите, чтобы подписаться/отписаться.
Имя: OpenId
Результат операции:
Предпросмотр Улыбка Подмигивание Дразнит Оскал Смех Огорчение Сильное огорчение Шок Сумасшествие Равнодушие Молчание Крутизна Злость Бешенство Смущение Сожаление Влюблённость Ангел Вопрос Восклицание Жирный Курсив Подчёркивание Зачёркивание Размер шрифта Гиперссылка Цитата
Загрузка…