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

在PHP中,将配置参数加载到应用程序变量的正确方法是什么?,php,configuration,Php,Configuration,我有一个保存配置参数的数据库,我只想将配置参数加载到我的应用程序变量中一次(或根据重新加载参数的特定请求),我还想从所有php页面/脚本访问这些保存配置参数的变量,这样做的目的是保存对数据库的点击,并提高应用程序的响应时间。 什么是解决这个问题的“经典”php解决方案?在例程的早期创建一个设置常量(关键字“define”)的页面。只要把它放在需要的地方 在我看来,这与任何其他缓存问题基本相同。要缓存的内容是配置参数,而不是网页内容或用户配置文件信息,这一事实从技术角度来看并不重要 所以,您需要做

我有一个保存配置参数的数据库,我只想将配置参数加载到我的应用程序变量中一次(或根据重新加载参数的特定请求),我还想从所有php页面/脚本访问这些保存配置参数的变量,这样做的目的是保存对数据库的点击,并提高应用程序的响应时间。
什么是解决这个问题的“经典”php解决方案?

在例程的早期创建一个设置常量(关键字“define”)的页面。只要把它放在需要的地方

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

所以,您需要做的是想出一些缓存解决方案,无论是memcached还是编写包含要缓存的数据的静态文件

这里的诀窍是,您并不是缓存要呈现给用户的HTML,而是缓存数据库查询结果,因此您可能希望了解以下方法:


与Smandoli的回答一样,我使用一个包含我的配置的文件

然而,我的配置实际上是一个多维数组——这意味着我对配置有更大的控制权——如果需要的话,我可以动态更改它,也可以分解变量

$config['error']['nologin'] = "You're not logged in"; $config['db']['host'] = "localhost"; $config['something']['else'] = "hello world"; $config['error']['nologin']=“您未登录”; $config['db']['host']=“localhost”; $config['something']['else']=“你好,世界”; 编辑:我使用一个文件来表示不会改变太多的值。我偶尔会使用数据库中的变量,但不会太频繁


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

我喜欢使用
Zend\u Config\u 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

<>我来自C++世界,它的范例是使用单参数,它在第一个(而且只有)实例化上加载参数,并导出一个与相关的GET(例如int GetVal(char *KEY,INT/VALL)”的接口。PHP中有类似的内容吗?

您可以为生产服务器和开发服务器保留此页面的不同版本。加载新工作时,不要加载该页面。节省了很多时间。谢谢你,放得好。我可以尝试这样做:(A)常量,包括依赖于服务器的,来自“define”。(B) 会话附带的静态变量存储在表中(例如基于登录的用户详细信息)。但我认为他们有自己的阵列供实际使用。(C) 需要在调用之间保持的变量只会进入一个数组。至于到目前为止的其他4个答案,它们很有趣,但我不会尝试,因为我没有太多的页面或太多的变量(而且我很懒,全神贯注于此……目前网站还没有崩溃)。对于上面评论中的(A,B,C),我总共有十几个变量。但奥德可能得到了他所需要的。APC是用于配置变量的最常见的缓存解决方案,因为(1)每个请求都需要它们(2)它们通常对每个请求都是相同的(3)您希望尽快访问它们。街上的传言是facebook将其配置变量缓存在APC中。您还可以考虑“HIDEF”PECL扩展:但是它并没有得到积极的维护。您必须记住PHP中的每个请求基本上像是启动一个完全可执行的新实例,得到输出,然后让可执行文件终止。在一个请求中设置的单例将不能用于第二个请求,除非您将其放入某种缓存中。默认的香草PHP安装不包括任何此类缓存机制(缺少平面文件)。你必须安装一个,比如memcached或APC。我现在还不能研究单例,但我要补充的是,我的VBA背景确实要求我对HTTP的单态现实进行重大调整(如Frank所述,+1)。