Файловый форум на PHP
- Опубликовано: 07.05.2002
Предупреждаю сразу, что то, что будет описываться ниже, большинству из вас может показаться «притянутым за уши» и совершенно бесполезным. Тем не менее, я когда-то столкнулся с описываемой проблемой, нашёл её решение, а теперь подумал, что, возможно, с этим столкнётся кто-нибудь ещё, поэтому, почему бы этому кому-то не помочь?
Итак, речь идёт вот о чём. Представьте себе, что Вы – веб-программист, владеющий языком 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="https://stanislaw.ru/" target="_blank">Станислав.ру</a>.
P. S. Статья впервые была опубликована на сайте WebClass.ru.