2014-05-18 91 views
0
$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 
+1

是什麼'compose.conf'包含哪些內容? – mbanzon

+0

它包含配置變量,請參閱編輯。 – LNT

+0

錯誤日誌中是否有任何內容?也許你的意思是調用'config_load'而不是'configLoad'? – mbanzon

回答

1

在你的Smarty插件目錄 smarty_internal_config.php 搜索statment

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); 

完蛋了:)

1

parse_ini_file手動:

注:有保留其一定不能被用作用於INI文件鍵字。這些措施包括:nullyesnotruefalse,>>>on < < <,offnone。值null,off,nofalse導致""。值on,yestrue導致"1"。字符?{}|&~![()^"不得在密鑰中的任何位置使用,並且在值中具有特殊含義。

如果我們試圖在你的文件we get the following error執行parse_ini_file(或parse_ini_string):

警告:語法錯誤,在/ tmp/execpad-e67cf6f095ae在未知的意外BOOL_TRUE線路7 /線32上的源-e67cf6f095ae

因此,當嘗試使用Smarty時,Smarty出現錯誤(我假設它在內部使用這些函數中的一個)解析您的INI文件,因爲您使用了保留字。解決方案是簡單地將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

用X試過了,還沒有工作 – LNT

+0

@LNT'bootstrap_js'還剩下一個:'ON = jquery' – h2ooooooo

+1

對不起,在實際代碼中刪除了所有代碼,沒有成功。 – LNT