Правильный формат конфига: php, ini, json, db table ?

программирование php конфигурация производительность

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

Какой способ хранения конфига Вам кажется наиболее оптимальным ?

1. Внутри отдельного файла config.php, в котором хранится что-то вроде (неограниченный уровень вложенности, подключение простым include('config.php') )

<?php
/**
* config file
*
*/
$GLOBALS['uconfig'] = array(
'site' => array(
'header' => 'MySite',
'timezone' => 'Asia/Yekaterinburg',
),
'core' => array(
'productionmode' => 0,
'sitemapfile' => 'sitemap.php',
'imagedir' => 'images',
'indexdir' => array('core','ucomponents', 'utemplates'),
'autodir' => 'auto',
),
..........
);

2. В файле формата json вида (неограниченная степень вложенности, простое декодирование функцией json_decode() )

{
"site":{
"header":"My Site",
"timezone":"Asia\/Yekaterinburg"
},
"core":{
"productionmode":0,
"sitemapfile":"sitemap.php",
"imagedir":"images",
"indexdir":[
"core",
"ucomponents",
"utemplates"
],
"autodir":"auto"
},
........
}

3. В файле формата ini (максимум 2 уровня вложенности, нужен специальный парсер, либо parse_ini_file, имеющий ограничения)

[site]
header = 'My Site'
timezone = 'Asia/Yekaterinburg'

[core]
productionmode = 0
sitemapfile = 'sitemap.php'
imagedir = 'images'
indexdir = 'core,ucomponents,utemplates'
autodir = 'auto'
...........

4. В таблице БД в виде Ключ => Значение (свободный доступ к любому значению, но посредственная скорость)

Прошу пояснить Ваш выбор.

Примечание:
2 Yorie:
уточните - где и как обычно храните кэш конфигурации ?

Примечание:
2 Yorie:
значит, кэш хранится по принципу №1, так можно сказать ? Получается, что в сухом остатке вы для хранения конфигурации используете принцип №1.

Примечание:
Потому что мой вопрос именно и касался способа хранения конфигурации, при котором она извлекается каждый запуск скрипта.

Примечание:
2 Yorie:
конечно же у каждого своё мнение, потому я и задал этот вопрос.
Ваша точка зрения понятна, хотя я так до конца не понял, каким образом у вас хранится конфигурация (каким образом вы обычно записываете её в кэш - что это - XML-файл, сериализованный array, php-файл с массивом, таблица в БД или что-то ещё).

Всё дело конечно же в мелочах. Один способ даёт значительный выигрыш в скорости при использовании большинства настроек и при чтении блока настроек целиком, другой - при чтении лишь выборочных регулировок.
Ответы:
Номер 1. За простоту! )
в зависимости от ситуации использую 1, 3 и  4  методы
1 - когда данные устанавливаются один раз и на долго.
4 - когда администратор сайта может менять некоторые данные
3 - в Zend framework данный формат легко разбирается, в таких проектах и использую
#4 с кэшированием конфигурации, имхо. Позволяет структуировать данные, к тому же при необходимости, можно будет хранить в одной таблице конфигурацию не только для системы, но и для расширений, что с файлами будет довольно проблематично. Ну и редактирование конфигурации значительно упрощается, это не будет тупо перезаписью всего файла с конфигурацией..
По поводу первого варианта, я бы сделал так:
<?php
class config
{
 const site = 'My Site';
}
?>
Люблю ООП :)
json
по ситуации - php или БД.
Но в 98%  в БД
>> 2 Yorie:
уточните - где и как обычно храните кэш конфигурации ?
Дополнение #2 27.11.2010 0:06:31
2 Yorie:
значит, кэш хранится по принципу №1, так можно сказать ? Получается, что в сухом остатке вы для хранения конфигурации используете принцип №1.
Если будете кэшировать результаты парсинга (например через Zend_Cache_Frontend_File) то всё равно, делайте как вам удобнее. Если не будете и нужна скорость юзайте формат языка. PHP - для php, json - для js.


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.