2013-01-05 49 views
0

可能重複:
Reading and Writing Configuration Files如何在PHP創建一個全局配置文件

我的大部分功能取決於設置。

截至目前,我將我的設置值存儲在數據庫中。

例如在頁面顯示廣告我檢查我的數據庫是否顯示廣告或不

我的意思是這樣

$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'; 
} 

值我DATABSE負荷將減少,但我不知道這是正確的方式。是define()是正確的解決方案。還是有更好更快的解決方案?

+2

使用定義使您的代碼無法驗證。 –

回答

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'))無效。

+0

不錯的解決方案..謝謝 – Giri

+0

我一直在運作的前提是,如果'全球'是答案,你問的是錯誤的問題,需要重新評估問題。 +1獲得OP,他需要去,-1代表'全球'。 – Dan

+0

@Blacketworks我個人儘可能使用define(),但我接受,**全局**配置可能是其中一個問題,可以通過'global'語句正確回答。 –

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." 
} 

如果你有很多類似的常量,這比幾十個定義方法的更好比數據庫抓取更快。

+0

我想你的意思是'parse_ini_file()' – Dan

1

幾個選項,比如提到的那些,包括.ini文件(使用parse_ini_file()),XML(一些藥汁與SimpleXML也許),但我更喜歡保持在配置本地PHP。

include()構造允許從包含文件到return。這使您可以:

的config.php

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

別處。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世界一拉web.config),緩存等