如何在php中创建全局配置文件

时间:2013-01-05 14:48:45

标签: php function configuration

  

可能重复:
  Reading and Writing Configuration Files

我的大多数功能都取决于设置。

截至目前,我将设置值存储在数据库中。

例如,在页面中显示广告我正在检查我的数据库是否要显示广告

我的意思是这样的

$display_ad = 'get value from database';

if ($display_ad) {
echo 'Ad code goes here';
}

这很好。但事实是我有超过100个设置。因此,如果我在settings.php文件中定义值,我认为我的数据库负载会减少,如

define('DISPLAY_AD', true); 

if (DISPLAY_AD) {
echo 'Ad code goes here';
}

但我不确定这是正确的方法。 define()是否是正确的解决方案。或者有更好更快的解决方案吗?

4 个答案:

答案 0 :(得分:1)

如上所述,有几个选项包括.ini个文件(使用parse_ini_file()等等。),XML(某些与SimpleXML的混合)但我更喜欢在本机PHP中保留配置。

include()构造允许从包含的文件中获取return。这允许您:

<强>的config.php

return [
    'foo' => [
        'bar' => [
            'qux' => true,
        ],
        'zip' => false,
    ],
];

<强> elsewhere.php

function loadConfig($file) {
    if (!is_file($file)) {
        return false;
    }
    return (array) call_user_func(function() use($file) {
        // I always re-scope for such inclusions, however PHP 5.4 introduced 
        // $this rebinding on closures so it's up to you
        return include($file);
    });
}

$config = loadConfig('config.php');

if ($config['foo']['bar']['qux']) {
    // yeop
}
if ($config['foo']['zip']) {
    // nope
}

需要特别小心,因为当你试图取消引用一个不存在的维度时,PHP会大肆宣传你:

if ($config['i']['am']['not']['here']) { // poop

}

创建一个包装类/函数来管理配置以满足您的需求是相当微不足道的。您可以添加对级联配置的支持(在ASP世界中 la web.config ),缓存等。

答案 1 :(得分:0)

define()是一种很好的做事方式。另一种方法是定义全局数组。比如

$config['display_ad']=true;
$config['something_else']='a value';
//...
function doSomething() {
   global $config;
   if ($config['display_ad']) echo 'Ad code goes here';
}

后一种方式是许多项目使用的,例如phpmyadmin,原因可能是,你不能define()非标量值,例如define('SOME_ARRAY',array('a','b'))无效。

答案 2 :(得分:0)

执行最简单的事情是ini文件。您创建一个如下所示的文件:

value1 = foo
value2 = bar
value3 = baz

然后,从PHP中,您可以执行此操作:

$iniList = get_ini_file("/path/to/ini/file/you/just/made");
if ($iniList['value1'] == 'foo') {
    print "This will print because the value was set from get_ini_file."
}

如果你有很多类似的常量,那比几十种定义方法更好,比数据库提取更快。

答案 3 :(得分:0)

你也可以在这里上课: php.net