Как спроектировать архитектуру простого форума на PHP?

Здравствуйте.

В качестве тестового задания получил таск написать простенький форум.

Описание функционала:
Логина и регистрации нету (сообщения по принципу анонимных комментариев). Основная страничка - верхним блоком идет список тем, средним блоком список сообщений в открытой теме, нижним блоком форма для отправки сообщения. Отправка сообщения происходит посредством AJAX. Из дополнительных функций: поиск, статистика работы PHP и MySQL внизу страницы, постраничный вывод тем. В качестве тестирования необходимо заполнить БД 150к тем и 600к сообщений, после чего каждая страничка топика должна открываться не больше 2ух секунд.

Подскажите как грамотно это всё реализовать архитектурно, какую структуру файлов и кода выбрать.
Если есть какие-нибудь ссылки на примете - с удовольствием бы почитал.
Заранее спасибо!
  • Вопрос задан
  • 3507 просмотров
Решения вопроса 1
@asd111
Если нет требований к качеству, то хватит одного index.php и пара файлов: в один можно положить подключение к БД и запросы к БД - такие файлы ещё называют моделями, в другой отдельно положить вывод страницы, т.е. html. AJAX точно не знаю куда лучше положить, можно прям в html написать если кода мало(обычно AJAX делается через инструменты фреймворка). В таком случае у тебя получится, что главный файл - контроллер, файл с БД - модель, а файл с html - вид(шаблон).
Твой контроллер сможет делать запросы к БД и выводить шаблон с заполненными данными.
1. Проверяешь не пришло ли что то из формы и какая страница запрошена. $_POST $_GET(надеюсь об XSS ты в курсе)
2. Если пришло, то пишешь в БД, если нет требований по неповторению сообщений.
3. Вытаскиваешь из БД названия тем и заполняешь хедер. Тут нужно будет вытащить только те темы, которые нужно. Если требований нет, то сойдёт where id:$id limit 5; $id=rand(1, 150 000).
4. Поиск. Если пришла строка на поиск нужно сформировать запрос с условием Like.
Можно выполнить поиск текста от начала поля:
SELECT Таблица.* FROM Таблица WHERE Таблица.Поле Like 'текст*'
или в любой части поля - Like '*текст*'
5. Статистика работы PHP. memory_get_usage() - для объема используемой памяти, microtime() - для времени выполнения скрипта. По MySQL microtime() - время выполнения запроса.
6. Постраничный вывод тем. Считаешь число тем, делишь число тем на число тем на одной странице и в зависимости от запрошенного номера страницы выводишь запрошенные темы путем запроса в БД where id<:id $id берёшь из $_GET.
Примерно так. Возможно будет тормозить поиск. В таком случае надо будет либо менять запросы на легковесные(в запросах я не силён), либо memcache, либо sphinx. Возможно что то ещё.

P.S.
В реальности сложные сайты обычно пишут на фреймворках. Например Yii.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Anonym
@Anonym
Программирую немного )
Если это не "работа мечты" - посылайте их подальше.
Ответ написан
MegaMufa
@MegaMufa
Простите, это вам при устройстве на работу такое тестовое задание дали?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы