Логотип 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
Результат операции:
Предпросмотр
Загрузка…