注意:配置保存在PHP文件config.php
中。
我已经看到了不同的做法,这里是一个简短的示例列表(我在这些示例中存储了DB信息):
常数:全局,只读
define('DB_USER','user12');
define('DB_PASS','21user');
使用GLOBALS数组:全局,可变,重复,与其他全局变量混合
$GLOBALS['DB_USER']='user12';
$GLOBALS['DB_PASS']='21user';
使用非全局数组但提升全局:可能比第二个选项更差
$config=array(); ...
$config['DB_USER']='user12';
$config['DB_PASS']='21user';
... global $config;
mysql_connect('localhost',$config['DB_USER'],$config['DB_PASS']);
定义类属性:(全局,可枚举)
class Config {
public $DB_USER='user12';
public $DB_PASS='21user';
}
标准/选项/特性:
在系统运行期间可能需要更改配置,因此选项1已不可行。第三种选择也不太干净。
在写这篇文章时,我对主观和封闭的讨论发出了重大警告。所以请跟上主题,并给出正确答案的理由。
这是一个非常明显的问题,考虑到我对不同的答案非常熟悉,你可能会问,为什么我要大惊小怪呢?问题是,我正在开发一个框架,并且与另一个框架(* ahem * joomla * ahem *)不同,我不想通过他们错误的投掷错误信息的解决方案,最终必须更改/在将来重新定位。
编辑:首先,配置文件的位置与我无关。我会确保人们可以轻松更改位置,如果他们愿意,但这不是要求。 首先,廉价的虚拟主机不允许这样做,其次,就安全性而言,这真的不是一个好的选择。为什么?因为,框架需要知道配置的位置。真的,通过默默无闻的安全无效。我宁愿修复所有RFI和XSS(例如),而不是偏执地将配置文件隐藏在多个层下。
答案 0 :(得分:4)
硬编码数据可能不是选择重新配置的人不熟悉的选项。考虑使用parse_ini_file()。
答案 1 :(得分:2)
为什么不使用Zend_Config?它为配置选项创建了一个通用接口,可以存储在配置文件或数据库中(使用适当的适配器)。它很轻巧;你不必引入整个Zend框架来使用它。
顺便说一下,既然你正在构建一个框架,你应该将全局命名空间的污染降到最低。类似于你的第三个选项,如果你专门针对5.3,请查看使用适当的命名空间。答案 2 :(得分:1)
有点晚了,但您可能会感兴趣:http://milki.include-once.org/genericplugins/genconfig.html
它提供了一个简单的API来编辑PHP配置文件。它保持评论和其他代码。它允许全局$ config数组/ ArrayObject并定义常量。如果与插件配置注释结合使用,它几乎可以自动运行。但是,这是很多代码。但也许值得一试这个概念。 (我也使用可读的config.php,因为它似乎是我最有用的配置格式。)
答案 3 :(得分:0)
放入一个公共文件,并将其包含在您需要的任何地方。当您上线或移动到测试服务器时,您只需要编辑这个文件并更改所有配置。方法2更好,因为它允许你改变它。
请记住,如果您需要更改用户并通过,则必须重新连接
才能连接到mysql