|
|
|
| Здравствуйте.
Появилась идея хранить псевдо-статические данные (например, массив описывающий структуру меню) в сериализованом виде, в отдельном файле, со своим расширением (*.cfg). В .htaccess закрываю к нему доступ конструкцией -
RewriteRule .*\.cfg index.php [L]
| .
Функция построения страницы проверяет наличие файла menu.cfg, если файл есть вставляем данные в страницу. Если нет получаем данные из базы, сохраняем их в файл menu.cfg, вставляем данные в страницу.
Хотелось бы услышать мнение, имеет ли право на существование такой доход? | |
|
|
|
|
|
|
|
для: Zezst
(14.04.2014 в 14:57)
| | Зачем закрывать через .htaccess, не достаточно хранить его в закрытой директории? | |
|
|
|
|
|
|
|
для: confirm
(14.04.2014 в 16:31)
| | Т.е. самими решением можно пользоваться?
На сайте используется модульный движок. Модули организованны по папкам, один модуль - одна папка. Название модуля index.php берет из адресной строки (название_сайта.ru/модуль/еще_какие-то_параметры). Просто хотелось хранить данные относящиеся к модулю непосредственно в папке модуля.
С другой стороны скинуть cfg файлы в одну директорию не проблема, но будет ли от этого хоть какой-то выигрыш? | |
|
|
|
|
|
|
|
для: Zezst
(14.04.2014 в 16:55)
| | А что такое модуль? Это что сплошь html-файлы, к которым напрямую есть доступ из браузера? Если все таки модуль это еще и исполняемые файлы, то могут ли папки этих файлов быть открытыми для доступа?
Да и вообще, уж если это конкретно для каждого, то почему сериализация (еще короче будет JSON, если уж требуется пост обработка данных), а не готовый к подключению html? | |
|
|
|
|
|
|
|
для: confirm
(14.04.2014 в 17:08)
| | Модуль это php-файл, иногда несколько. Всегда есть index.php на который передается управление. Так же модуль может содержать html, css и js файлы необходимые для работы модуля. Модуль может обращаться к другим модулям.
Движок самописный, приходится работать с тем что есть. 100% статические данные инклюдятся из cfg.php, все остальное идет из базы. Просто есть некоторый тип данных, которые могут меняться, но происходит это не часто. Поэтому родилась идея сбросить их в файлы.
Наверно правильнее модуль назвать плагином, просто в движке они названы модулями, вот и я, по инерции их так называю. | |
|
|
|
|
|
|
|
для: Zezst
(14.04.2014 в 17:30)
| | Как не называйте это, но их подключением занимается все таки либо индексный файл, либо ядро системы, а ни как пользователь вызывая каждый модуль из под браузера. Для пользователя все файлы модуля, кроме подключаемых напрямую браузером (css, js) должны быть закрыты. Так что положить в закрытый каталог файл этот проблем нет. Вам же не приходит в голову прописывать в htaccess все типы файлов, которые подключаются во время сборки модуля. | |
|
|
|
|
|
|
|
для: confirm
(14.04.2014 в 17:36)
| | .htaccess выглядит так:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=$1 [L]
RewriteRule .*\.cfg index.php [L]
|
Закрывать html, css и js файлы смысла нет. Браузер их все равно получает. Все php файлы при старте проверяют константу которая задается в index.php. Если ее нет – получите ошибку 404. Если модуля нет – получите 404.
Просто хотелось избавиться от лишних запросов к базе. Если данные положить просто в php то их становится не удобно обновлять. А так:
file_get_content();
$menu = unserialize();
и дальше продолжаем работать с данными как будто мы получили их из базы. Т.е. не переписываем все эти модули-плагины, а всего лишь добавляем пару строчек. Если в каком то модуле забыли прописать не страшно, он возьмет данные из базы.
Все данные которые лежат в базе редактируются через админку, данные которые лежат в cfg.php не доступны из админки.
Но мы немного ушли в сторону от вопроса. Что для сервера легче? Закрыть директорию (через .htaccess?) или дополнительное правило в mod_rewrite?
Изначально, был выбран вариант с закрытием файла для того, чтобы при удалении модуля не искать и не удалять, дополнительно, файлы к нему относящиеся. Но если есть возможность еще чуток облегчить работу сервера, то можно и вручную по удалять. Поэтому вопрос и был задан. | |
|
|
|
|
|
|
|
для: Zezst
(14.04.2014 в 18:16)
| | Кошмар какой-то ей богу.
Если ваш модуль имеет подключаемые файлы и даже они html, то как это назвать, если я эти файлы могу получить в браузере минуя остальной контент сайта?
Вы смешали все в кучу и доступ, и кеширование, и mod_rewrite... Причем тут mod_rewrite, если файл да еще сериализованный нужно подключить где-то в модуле?
Каша у вас в голове. | |
|
|
|
|
|
|
|
для: confirm
(14.04.2014 в 18:57)
| | Абсолютно согласен про кашу.
Но вопрос вроде был не о структуре. Честно, мне очень приятно, что именно вы вступили в дискуссию. Но, как я уже сказал, все это работает. И с этим уже ничего не поделаешь. Задача, ничего не ломая снизить нагрузку на сервер. Хостинг и БД работают на одной машине. Было решено часть данных отдавать не из БД, а из файлов. Те данные которые меняются, но от силы раз в месяц.
И кстати, там все очень хитро. Сейчас проверил. Сервер не отдает просто так html, css. А вот cfg почему-то отдает. Потому и закрыл файл через rewriterule. Вы предложили использовать закрытую директорию. Идея интересная, но только если есть реальный выигрыш в производительности. Иначе удобнее возится с этой кашей размещая данные модуля непосредственно в папке модуля.
Как же просто было на Z80. У каждой команды было известное количество тактов и легко было рассчитать на сколько быстр тот или иной участок кода :) | |
|
|
|
|
|
|
|
для: Zezst
(14.04.2014 в 19:20)
| | Было бы о чем дискутировать. Давать доступ пользователю к файлу, который ему совсем не нужен, и при этом извращаться с htaccess, это вершина фантазии.
Не знаю что там за хитрости, но беспокоится о запросе к базе за данными для меню, который так так грузит сервер, это же сколько километров длиною должно быть меню. | |
|
|
|
|
|
|
|
для: confirm
(14.04.2014 в 20:36)
| | Фух.
Перечитал начало топика. Подумалось мож я, шо не так спросил. Вроде правильно написал:
Появилась идея хранить псевдо-статические данные (НАПРИМЕР, массив описывающий структуру меню)
|
Спасибо. | |
|
|
|
|
|
|
|
для: Zezst
(14.04.2014 в 21:04)
| | Храните, но причем тут htaccess и упоминание в нем файла?
Если у меня есть "сборщик", в котором я подключаю меню, то:
<?
if($menu = file_get_contents('menu')) { //из закрытой директории, а не фиг знает откуда, где ворота настеж
$menu = json_decode($menu);
//etc
} else {
//запрос к базе
}
|
| |
|
|
|