【发布时间】:2009-07-28 21:23:29
【问题描述】:
我有一个保存配置参数的数据库,我只想将配置参数加载到我的应用程序变量中一次(或根据特定请求重新加载参数),我还希望保存配置参数的这些变量是可从所有 php 页面/脚本访问,其想法是保存数据库中的命中并提高应用程序响应时间。 解决这个问题的“经典”php 解决方案是什么?
【问题讨论】:
标签: php configuration
我有一个保存配置参数的数据库,我只想将配置参数加载到我的应用程序变量中一次(或根据特定请求重新加载参数),我还希望保存配置参数的这些变量是可从所有 php 页面/脚本访问,其想法是保存数据库中的命中并提高应用程序响应时间。 解决这个问题的“经典”php 解决方案是什么?
【问题讨论】:
标签: php configuration
在我看来,这与任何其他缓存问题基本相同。从技术角度来看,要缓存的内容是配置参数而不是网页内容或用户配置文件信息这一事实并不重要。
所以你要做的就是想出一些缓存解决方案,无论是 memcached 还是只是用你想要缓存的数据写入静态文件。
这里的诀窍是,您不是在缓存要呈现给用户的 HTML,而是在缓存数据库查询结果,因此您可能希望查看类似这样的方法:
【讨论】:
我喜欢使用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
【讨论】:
在您的例程早期创建一个设置常量(关键字“定义”)的页面。只需将它包含在需要的地方。
【讨论】:
就像 Smandoli 的回答一样,我使用一个包含我的配置的文件。
但是,我的配置实际上是一个多维数组 - 这意味着我可以更好地控制我的配置 - 如果需要,我可以随时更改它,以及分解变量。
$config['error']['nologin'] = "你没有登录"; $config['db']['host'] = "localhost"; $config['something']['else'] = "hello world";编辑:我使用一个文件来存储不会发生太大变化的值。我偶尔会使用数据库中的变量,但不会太频繁。
我的经验法则是“如果用户不需要更改它,从文件加载;如果他们需要更改它,那么它来自数据库”。
【讨论】:
我来自 C++ 的世界,其范例是使用单例在第一次(也是唯一一次)实例化时加载参数并导出具有相关 get'ter 的接口(如 'int GetVal(char* key,int &val )' ) 可以从应用程序的所有部分访问单音,PHP 中有类似的东西吗?
【讨论】: