为什么打印配置数组给出空数组?

时间:2014-05-18 19:16:38

标签: php smarty

$tpl = new Smarty();
$tpl->configLoad('compose.conf');
$config = $tpl->getConfigVars();
print_r($config);

它返回

Array() 

这是什么,我做错了?

compose.conf

[jquery]
jquery = lib/jquery/jquery.js

[jquery_validate]
css=res/css/jquery.validate.css
js=lib/jquery/jquery.validate.js
X=jquery


[bootstrap_css]
main = lib/bootstrap/css/bootstrap.min.css
theme = lib/ootstrap-theme.min.css

[bootstrap_js]
js = lib/bootstrap/js/bootstrap.min.js
X=jquery

[bootstrap]
X=bootstrap_css,bootstrap_js

[utils]
utils=lib/utils/utils.js
odo=lib/utils/utils.odo.js
require=libutils/utils.require.js
template=lib/utils/utils.template.js
X=jquery

2 个答案:

答案 0 :(得分:1)

根据parse_ini_file的手册:

  

注意:保留字不得用作ini文件的密钥。其中包括:nullyesnotruefalse,>>> on <<&lt ;, offnone。值nulloffnofalse会产生""。值onyestrue会产生"1"。字符?{}|&~![()^"不得在键中的任何位置使用,并且在值中具有特殊含义。

如果我们尝试在您的文件we get the following error上执行parse_ini_file(或parse_ini_string):

  

警告:语法错误,第7行的未知中出现意外BOOL_TRUE    在第32行的/ tmp / execpad-e67cf6f095ae / source-e67cf6f095ae

因此,当您尝试解析INI文件时,Smarty会因为您使用保留字而收到错误(我假设它在内部使用其中一个函数)。解决方案是简单地将ON重命名为其他内容。

<强>更新

Smarty没有使用这些函数,但是它的解析器复制了它。 smarty_internal_configfilelexer.php的第313行引用"on"

if (!$this->smarty->config_booleanize || !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes", "no")) ) {
//                                                                                                   ^^

答案 1 :(得分:1)

在你的smarty插件目录中 smarty_internal_config.php 搜索声明

if (!empty($sections)) {

现在用

替换此语句
    if($sections=='*'){
        foreach ($_config_vars['sections'] as $key=>$value) {
            if (isset($value['vars'])) {
                $scope_ptr->config_vars[$key] = $value['vars'];
            }
        }
    } else if (!empty($sections)) {

并在加载文件时使用它

$tpl = new Smarty();
$tpl->configLoad('compose.conf','*');
$config = $tpl->getConfigVars();
print_r($config);

多数民众赞成:)