在PHP中,将配置参数加载到应用程序变量中的正确方法是什么?

时间:2009-07-28 21:23:30

标签: php configuration

我有一个数据库,我保留配置参数,我只想将配置参数加载到我的应用程序变量中一次(或根据特定请求重新加载参数),我也希望这些变量保存配置参数可以从所有php页面/脚本访问,这个想法是保存数据库上的命中并改善应用程序响应时间。 什么是这个问题的'经典'php解决方案?

5 个答案:

答案 0 :(得分:3)

在我看来,这与任何其他缓存问题基本相同。从技术角度来看,要缓存的内容是配置参数而不是说网页内容或用户配置文件信息是不重要的。

所以你需要做的是提出一些缓存解决方案,无论是memcached还是只用你想要缓存的数据编写静态文件。

这里的诀窍是你没有缓存HTML呈现给用户而是数据库查询结果,所以你可能想看看这样的方法:

http://devzone.zend.com/article/1258

答案 1 :(得分:3)

我喜欢使用Zend_Config_Ini类。创建可以扩展其他部分的单独部分很容易,Zend_Cache使用Zend_Cache_Frontend_File(检查.ini文件的更新)和后端(我使用APC),访问速度特别快任何重新解析的开销。

; Production site configuration data
[production]
webhost                  = www.example.com
database.adapter         = pdo_mysql
database.params.host     = db.example.com
database.params.username = dbuser
database.params.password = secret
database.params.dbname   = dbname

; Staging site configuration data inherits from production and
; overrides values as necessary
[staging : production]
;  'database.adapter' is inherited
;  others are overridden
database.params.host     = dev.example.com
database.params.username = devuser
database.params.password = devsecret

答案 2 :(得分:1)

在您的例程中尽早创建一个设置常量(关键字'define')的页面。只需将它包含在需要的地方。

答案 3 :(得分:1)

就像Smandoli的回答一样,我使用的是一个具有我配置的文件。

但是,我的配置实际上是一个多维数组 - 这意味着我可以更好地控制我的配置 - 如果需要,我可以动态更改它,以及分解变量。

$config['error']['nologin'] = "You're not logged in";
$config['db']['host'] = "localhost";
$config['something']['else'] = "hello world";

编辑:我将文件用于不会改变太多的值。我偶尔会使用数据库中的变量,但不是经常使用。

我的经验法则是“如果用户不需要更改它,请从文件加载;如果需要更改它,那么它来自数据库”。

答案 4 :(得分:0)

我来自C ++世界的范例是使用一个单例,它在第一个(也是唯一的)实例化时加载参数并导出一个带有相关getter的接口(比如'int GetVal(char * key,int& amp; ; val)')单例可以从应用程序的所有部分访问,在PHP中有类似的东西吗?