
Создание ядра для системы управления сайтом (CMS) требует немало времени. Особенно если разработчик это делает впервые. Ядро — это фреймворк(CMF). Конечно создание свой CMS у многих вызывает недоумение. Какой смысл это делать, если уже существует множество готовых решений?
Какой толк от собственной CMS?
Конечно на первый взгляд его нет. Но на самом деле это не так. Разрабатывая свою CMS разработчик, в первую очередь, начинает понимать как устроено всё изнутри. Он изучает уже существующие решения. В процессе пытается понять, стоит ли их использовать или нет. Кроме того анализируя чужой код, разработчик постепенно совершенствует свои навыки. Ему становится проще использовать нововведения.
Но самое главное состоит в том, что разработчику становится проще понять, как устроены другие системы и фреймворки.
Запуск локального сервера
Всё начинается с установки локального сервера. Для этого я использую OpenServer. Сразу замечу, что локальный сервер использует следующие модули:
- Apache 2.4
- PHP 7.4
- MYSQL 8.0
Сам процесс установки описан в официальной документации. Поэтому я его опускаю. После установки локального сервера, заходим в папку «место установки OpenServer\domains\localhost». Там создаём новую папку. Назовём её … Впрочем можете дать ей любое имя. Запускаем Openserver.

Переходим в настройки. В открывшемся окне выбираем вкладку «Домены».

Выбираем ручное управление доменами. Теперь добавим наш домен. Для этого прописываем любое имя домена, а затем выбираем папку домена (ту папку, что вы создали ранее). Жмём кнопку добавить.

В итоге наш домен добавиться в список локального сервера. Нажимаем кнопку «Сохранить». Перезапускаем сервер. Теперь достаточно ввести в браузерной строке: «http://имя сохранённого вами домена». Но поскольку папка пуста, то в окне браузера вы увидите страницу «Index of /».
Структура проекта
Для дальнейшей работы нам понадобится редактор php кода. Лично я использую PhpStorm. Вы же можете использовать любой иной редактор. Для удобства создаём в редакторе новый проект и привязываем к нему папку нашего домена. В PhpStorm это делается так:

В открывшемся окне выбираем тип проекта и указываем нужную папку:

Нажимаем кнопку «Create». Появится окно в котором надо выбрать «This Window». Проект создан. Теперь добавим в него следующие папки:
- cache — необходима для хранения кеша любой нужной информации
- config — будет хранить основные конфигурационные файлы. В этих файлах будут храниться настройки, которые понадобятся нашему ядру.
- core — расположится само ядро
- log — будет хранить log-файлы
- public — расположится файл «index.php». Это точка входа в наше ядро.
- upload — будут храниться все загружаемые файлы
Теперь если в браузерной строке ввести путь к нашему домену, то мы увидим:

Мы можем перейти в каждую папку. А это плохо. Чтобы это исправить, создадим в корне нашего проекта файл «.htaccess». Это специальный служебный документ, который содержит целый ряд инструкций, указывающих веб-серверу Apache и похожим серверам, что делать, как это делать и куда дальше отослать полученный запрос.
Прописываем инструкцию следующего содержания:
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> </IfModule>
С её помощью мы запрещаем просмотр всех папок нашего проекта. Заметьте мы не блокируем доступ к ним, а просто запрещаем их просматривать. Теперь папке public, проекта, создадим файл «index.php». запишем в него следующий код:
<?php
echo "Test";
Инструкция echo выводит текст «Test» в окно браузера. Чтобы этот текст отобразился следует в адресную строку браузера ввести:
http://имя вашего домена/public/
А можно отобразить этот текст при вводе только доменного имени? Да можно. Для этого файл .htaccess следует дополнить некоторыми инструкциями. Итоговый результат будет такой:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
# Включаем перенаправление с сервера Apache
RewriteEngine On
# Если запрос не содержит обращение к папке "public"
RewriteCond %{REQUEST_URI} !^public
# перенаправляем в эту папку
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Однако при вводе в адресную строку «http://имя вашего домена», появится сообщение «Internal Server Error». Поэтому в папке public нашего проекта тоже создаём файл «.htaccess». В нём прописываем:
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # Если это не директория, то запрос передаётся в файл index.php RewriteCond %{REQUEST_FILENAME} !-d # Если это не файл, то запрос передаётся в файл index.php RewriteCond %{REQUEST_FILENAME} !-f # Перенаправляем запрос в файл index.php RewriteRule ^ index.php [L] </IfModule>
Вот теперь при вводе в адресную строку «http://имя вашего домена», в окно браузера выведется слово «Test».
Таким образом на данный момент структура проекта такова:

Ну что же, теперь можно начинать разработку самого ядра. В целом структура ядра будет выглядеть так:

В процессе разработки я внесу некоторые изменения и дополнения. Поэтому окончательный результат может быть немного иной.