Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: псевдо-статические данные
 
 автор: Zezst   (14.04.2014 в 14:57)   письмо автору
 
 

Здравствуйте.
Появилась идея хранить псевдо-статические данные (например, массив описывающий структуру меню) в сериализованом виде, в отдельном файле, со своим расширением (*.cfg). В .htaccess закрываю к нему доступ конструкцией -
RewriteRule .*\.cfg index.php [L]
.
Функция построения страницы проверяет наличие файла menu.cfg, если файл есть вставляем данные в страницу. Если нет получаем данные из базы, сохраняем их в файл menu.cfg, вставляем данные в страницу.
Хотелось бы услышать мнение, имеет ли право на существование такой доход?

  Ответить  
 
 автор: confirm   (14.04.2014 в 16:31)   письмо автору
 
   для: Zezst   (14.04.2014 в 14:57)
 

Зачем закрывать через .htaccess, не достаточно хранить его в закрытой директории?

  Ответить  
 
 автор: Zezst   (14.04.2014 в 16:55)   письмо автору
 
   для: confirm   (14.04.2014 в 16:31)
 

Т.е. самими решением можно пользоваться?
На сайте используется модульный движок. Модули организованны по папкам, один модуль - одна папка. Название модуля index.php берет из адресной строки (название_сайта.ru/модуль/еще_какие-то_параметры). Просто хотелось хранить данные относящиеся к модулю непосредственно в папке модуля.
С другой стороны скинуть cfg файлы в одну директорию не проблема, но будет ли от этого хоть какой-то выигрыш?

  Ответить  
 
 автор: confirm   (14.04.2014 в 17:08)   письмо автору
 
   для: Zezst   (14.04.2014 в 16:55)
 

А что такое модуль? Это что сплошь html-файлы, к которым напрямую есть доступ из браузера? Если все таки модуль это еще и исполняемые файлы, то могут ли папки этих файлов быть открытыми для доступа?
Да и вообще, уж если это конкретно для каждого, то почему сериализация (еще короче будет JSON, если уж требуется пост обработка данных), а не готовый к подключению html?

  Ответить  
 
 автор: Zezst   (14.04.2014 в 17:30)   письмо автору
 
   для: confirm   (14.04.2014 в 17:08)
 

Модуль это php-файл, иногда несколько. Всегда есть index.php на который передается управление. Так же модуль может содержать html, css и js файлы необходимые для работы модуля. Модуль может обращаться к другим модулям.
Движок самописный, приходится работать с тем что есть. 100% статические данные инклюдятся из cfg.php, все остальное идет из базы. Просто есть некоторый тип данных, которые могут меняться, но происходит это не часто. Поэтому родилась идея сбросить их в файлы.

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

  Ответить  
 
 автор: confirm   (14.04.2014 в 17:36)   письмо автору
 
   для: Zezst   (14.04.2014 в 17:30)
 

Как не называйте это, но их подключением занимается все таки либо индексный файл, либо ядро системы, а ни как пользователь вызывая каждый модуль из под браузера. Для пользователя все файлы модуля, кроме подключаемых напрямую браузером (css, js) должны быть закрыты. Так что положить в закрытый каталог файл этот проблем нет. Вам же не приходит в голову прописывать в htaccess все типы файлов, которые подключаются во время сборки модуля.

  Ответить  
 
 автор: Zezst   (14.04.2014 в 18:16)   письмо автору
 
   для: 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?
Изначально, был выбран вариант с закрытием файла для того, чтобы при удалении модуля не искать и не удалять, дополнительно, файлы к нему относящиеся. Но если есть возможность еще чуток облегчить работу сервера, то можно и вручную по удалять. Поэтому вопрос и был задан.

  Ответить  
 
 автор: confirm   (14.04.2014 в 18:57)   письмо автору
 
   для: Zezst   (14.04.2014 в 18:16)
 

Кошмар какой-то ей богу.

Если ваш модуль имеет подключаемые файлы и даже они html, то как это назвать, если я эти файлы могу получить в браузере минуя остальной контент сайта?

Вы смешали все в кучу и доступ, и кеширование, и mod_rewrite... Причем тут mod_rewrite, если файл да еще сериализованный нужно подключить где-то в модуле?

Каша у вас в голове.

  Ответить  
 
 автор: Zezst   (14.04.2014 в 19:20)   письмо автору
 
   для: confirm   (14.04.2014 в 18:57)
 

Абсолютно согласен про кашу.
Но вопрос вроде был не о структуре. Честно, мне очень приятно, что именно вы вступили в дискуссию. Но, как я уже сказал, все это работает. И с этим уже ничего не поделаешь. Задача, ничего не ломая снизить нагрузку на сервер. Хостинг и БД работают на одной машине. Было решено часть данных отдавать не из БД, а из файлов. Те данные которые меняются, но от силы раз в месяц.
И кстати, там все очень хитро. Сейчас проверил. Сервер не отдает просто так html, css. А вот cfg почему-то отдает. Потому и закрыл файл через rewriterule. Вы предложили использовать закрытую директорию. Идея интересная, но только если есть реальный выигрыш в производительности. Иначе удобнее возится с этой кашей размещая данные модуля непосредственно в папке модуля.

Как же просто было на Z80. У каждой команды было известное количество тактов и легко было рассчитать на сколько быстр тот или иной участок кода :)

  Ответить  
 
 автор: confirm   (14.04.2014 в 20:36)   письмо автору
 
   для: Zezst   (14.04.2014 в 19:20)
 

Было бы о чем дискутировать. Давать доступ пользователю к файлу, который ему совсем не нужен, и при этом извращаться с htaccess, это вершина фантазии.

Не знаю что там за хитрости, но беспокоится о запросе к базе за данными для меню, который так так грузит сервер, это же сколько километров длиною должно быть меню.

  Ответить  
 
 автор: Zezst   (14.04.2014 в 21:04)   письмо автору
 
   для: confirm   (14.04.2014 в 20:36)
 

Фух.
Перечитал начало топика. Подумалось мож я, шо не так спросил. Вроде правильно написал:
Появилась идея хранить псевдо-статические данные (НАПРИМЕР, массив описывающий структуру меню)

Спасибо.

  Ответить  
 
 автор: confirm   (14.04.2014 в 21:20)   письмо автору
 
   для: Zezst   (14.04.2014 в 21:04)
 

Храните, но причем тут htaccess и упоминание в нем файла?

Если у меня есть "сборщик", в котором я подключаю меню, то:

<?
if($menu file_get_contents('menu')) { //из закрытой директории, а не фиг знает откуда, где ворота настеж
    
$menu json_decode($menu);
    
//etc    
} else {
    
//запрос к базе
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования