我的 CMS 将有许多配置值,例如站点名称、标语等 - 每次生成页面时都会读取这些值。这些值当然会被缓存,持续时间设置为 1-2 小时或类似(将在设置更改时重置)。
我应该使用 XML 还是 MySQL 保存这些值?最好的方法是什么,性能虎钳?
我的 CMS 将有许多配置值,例如站点名称、标语等 - 每次生成页面时都会读取这些值。这些值当然会被缓存,持续时间设置为 1-2 小时或类似(将在设置更改时重置)。
我应该使用 XML 还是 MySQL 保存这些值?最好的方法是什么,性能虎钳?
称其为传统的,但我发现.INI
文件对 PHP 应用程序特别有用。
PHP 有一个内置的parse_ini_file()函数,让这变得轻而易举
方便的是,它返回一个数组,您可以使用该数组将多个文件合并到一个$config
数组或AppConfig
单例类中
事实上,PHP 使用 .INI 文件来配置自己!见/etc/php.ini
:)
你可以做一些有用的事情,比如
[development]
host = localhost
user = foo
pass = password123
name = dev_db
[production]
host = localhost
user = sqluser
pass = AJ539jf
name = live_db
当传递true
给 中的第二个参数时parse_ini_file()
,PHP 将使用节标题作为数组键。输出看起来像这样
Array
(
[db] => Array
(
[development] => Array
(
[host] => localhost
[user] => foo
[pass] => password123
[name] => dev_db
)
[production] => Array
(
[host] => localhost
[user] => sqluser
[pass] => AJ539jf
[name] => live_db
)
)
)
这很棒,因为您可以将所有配置文件检查到版本控制中,并且只需使用一行应用程序配置文件或环境变量来确定您的应用程序在哪个环境中运行
另一个答案建议遵守您选择的 CMS 的配置指南,但是,我发现大多数 PHP 框架在这方面都没有做到;尤其是在支持不同环境的多种配置时。编写您自己的“扩展”以正确处理应用程序配置通常是我们为规避特定 CMS 的刚性解决方案而要做的第一件事。
使用大型配置数组的另一个好处是,如果您想让其他应用程序或服务与您的应用程序交互,它可以轻松编码为 JSON。
我一般会看一下 CMS,并坚持那里使用的任何约定。没有什么比寻找所有出现在某处的配置/设置更糟糕的了,只是发现您正在寻找的是隐藏在其他地方的异常。在这种情况下,任何选择的性能都是最小的。
对我来说,XML 是存储配置的更好方式。它易于阅读和编写(通过所有语言),易于由极客以外的人控制,并且易于通过版本控制(SVN、Git)控制。