Самый быстрый способ хранить легко редактируемые данные конфигурации в PHP? - PullRequest
23 голосов
/ 06 января 2010

Какой самый быстрый способ хранить данные конфигурации в PHP, чтобы их можно было легко изменять (через PHP)? Сначала я думал о файле config.php, но я не могу редактировать его на лету с помощью PHP, по крайней мере, не очень просто? Затем я подумал о том, чтобы иметь XML-файлы, но анализ их для каждого HTTP-запроса является огромным. Итак, я подумал о INI-файлах, но потом понял, что INI-файлы ограничены значениями int / string. В конце концов, я пришел к выводу, что файл в формате JSON является лучшим:

$config['database']['host'] = ...;
$config['another']['something'] = ...;
...
json_encode($config);

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

Мой вопрос: я что-то упустил или есть лучший способ сделать это?

Ответы [ 7 ]

37 голосов
/ 06 января 2010

Serialize - лучший вариант для хранения PHP-переменных, чем JSON.

Мне нравится использовать var_export для сохранения файла конфигурации и include для загрузки информации о конфигурации. Это позволяет легко сохранять конфигурационные данные и облегчает чтение и запись данных для человека:

config.php:

return array(
 'var1'=> 'value1',
 'var2'=> 'value2',
);

test.php:

$config = include 'config.php';
$config['var2']= 'value3';
file_put_contents('config.php', '<?php return ' . var_export($config, true) . ';');

Обновленный config.php теперь содержит следующее:

return array(
 'var1'=> 'value1',
 'var2'=> 'value3',
);
2 голосов
/ 06 января 2010

Хотя это, скорее всего, излишне для того, что вам нужно, но я склоняюсь к тому, чтобы сохранять данные конфигурации в базе данных с использованием класса PHP для управления изменениями пар имя / значение внутри. (т.е. нет прямого доступа к БД извне этого класса.)

Когда вызывается класс конфигурации PHP для изменения значения, он затем записывает стандартный включаемый файл PHP со всеми различными значениями, определенными в нем.

Таким образом, при чтении данных конфигурации не происходит ухудшения производительности при загрузке, и все данные конфигурации могут быть изменены в базе данных через модуль CMS.

2 голосов
/ 06 января 2010

Я сохраняю конфигурацию, помещая некоторые переменные во внешний файл .php, а затем, когда я хочу использовать эти файлы, я говорю:

<?php include("fileName"); ?>

И это позволит вам обмениваться информацией о конфигурации на многих страницах. Однако я не уверен, что это самый эффективный метод, но мне он показался самым простым.

2 голосов
/ 06 января 2010

Вы должны использовать serialize, а не json_encode:

http://docs.php.net/serialize

0 голосов
/ 12 сентября 2011

Если вы используете require вместо include для файла конфигурации, вы немного увеличите производительность. Вы можете сделать это, если знаете, что файл конфигурации всегда будет на месте, или если у вас есть собственный механизм проверки, существует ли он.

0 голосов
/ 07 января 2010

Я использую базу данных с таблицей под названием config или settings. Таблица имеет два столбца:

name [varchar(255)]
value [varchar(255)]

Это позволяет легко хранить int, float и короткие строки.

Затем я создаю две функции, GetSetting и SetSetting. Они хранят строку и получают строку соответственно. Я считаю, что это значительно упрощает хранение значений.

0 голосов
/ 06 января 2010

Я почти уверен, что вы правы относительно значений int / string, и да, JSON - это способ, но сериализация и десериализация строки будут быстрее для оптимизации скорости:

Эта ссылка поможет вам:

http://docs.php.net/serialize

...