Реализуем внутреннюю архитектуру CMS. Часть вторая
Ноябрь 7, 2007
Поскольку мы уже определились с физической структурой нашей будущей системы — переходим к действию.
Создадим карту директорий, дабы потом было проще ориентироваться и подключать файлики. Файл этот будет весь обвешан Define-ами, поэтому создаем его в директории kernel/defines/ и называем paths.php
Что мы сюда будем закладывать?
В первую очередь — создадим алиасы всех директорий нашей системы.
<?php
define ('ROOT_DIR', $_SERVER['DOCUMENT_ROOT']);
define ('SCRIPT_DIR', ROOT_DIR.'/'.'selfcms');
define ('KERNEL_DIR', SCRIPT_DIR.'/'.'kernel');
define ('DEFINES_DIR', KERNEL_DIR.'/'.'defines');
define ('CONFIGS_DIR', DEFINES_DIR.'/'.'configs');
define ('CONFIGS_DIR', LANGS_DIR.'/'.'langs');
define ('CLASSES_DIR', KERNEL_DIR.'/'.'classes');
define ('LIBS_DIR', KERNEL_DIR.'/'.'libs');define ('APP_DIR', SCRIPT_DIR.'/'.'app');
define ('VIEWS_DIR', APP_DIR.'/'.'views');
define ('COMS_DIR', APP_DIR.'/'.'coms');
define ('MODS_DIR', APP_DIR.'/'.'mods');
define ('BOTS_DIR', APP_DIR.'/'.'bots');
define ('TEMPLATES_DIR', APP_DIR.'/'.'templates');?>
Это маленький кусочек кода приведен лишь для того, чтобы дать Вам понять как выглядит данный файл.
Прошу обратить внимание на то, что в скрипте ни разу не использовались двойные кавычки. Почему это есть хорошо?
Со структурой обращения к скриптам мы выяснили... Теперь подумаем — зачем нужно использовать константы, чтобы хранить в них длинные абсолютные пути если можно воспользоваться короткими относительными?
Это закономерный вопрос, который стоит уяснить сразу: за время написания системы наша cms вырастет из 1-го файла и 10 папок в большой скрипт с большим количеством файлов. Чтобы включить каждый файл (чего мы делать, конечно же не будем) может потребоваться до 10-30 итераций (шагов). Экспериментальным путём выяснили: включение файла через относительный путь тормозит процесс инклуда в 3-5 раз. Достигается это тем, что файл-родитель (кто включает) (при обнаружении того факта, что путь относительный) обращается к серверу за определением его местонахождения, потом сравнивает с путем включаемого файла, и лишь потом выполняет нужное нам действие.
А так, как таскать за собой длинные пути к папкам и директориям мало кому приятно — решаем проблему контстантами. Они видны внутри любой функции и любого класса, что позволяет использовать их в любом участке кода.
Так же, условимся включать в заголовок каждого файла-скрипта слелующий код:
if (!defined ('ACCESS_ALLOW'))
{ die ('Ошибка! Прямой доступ к файлу невозможен!');
}
Для чего это нужно: любой пользователь, который набрал в своем браузере ваш домен НЕ должен общаться ни с каким файлом, кроме как index.php. Создав константу ACCESS_ALLOW в index.php и используя проверки в каждом файле скрипта вы убережете себе кучу нервов (конечно, это самый примитивный метод защиты, но необходимый).
Декабрь 10, 2007 в 23:23
Аффтвар Пеши исчо