2009-02-27 43 views
24

我需要在PHP中存儲一堆配置信息。在PHP中存儲配置變量的最佳方式是什麼?

我曾考慮以下....

// Doesn't seem right. 
$mysqlPass = 'password'; 

// Seems slightly better. 
$config = array(
    'mysql_pass' => 'password' 
); 

// Seems dangerous having this data accessible by anything. but it can't be 
// changed via this method. 
define('MYSQL_PASSWORD', 'password'); 

// Don't know if this is such a good idea. 
class Config 
{ 
    const static MYSQL_PASSWORD = 'password'; 
}  

這一切到目前爲止,我已經想到了。我打算通過require /config.inc.php將該配置信息導入到我的應用程序中。

什麼適合您存儲配置數據,以及與此有關的最佳實踐是什麼?

回答

7

我一直使用選項#2,只是確保除了所有者之外沒有人擁有任何訪問權限。它是Joomla,vBulletin,Gallery和其他許多PHP應用程序中最流行的方法。

第一種方法對我來說太亂了(可讀性),第三種方法太危險了。我從來沒有想過類方法,所以別人可以提供他們的輸入。但是,只要正確的訪問權限用於班級的使用,我想這很好。


例..

define('EXAMPLE1', "test1"); // scenario 1 
$example2 = "test2"; // scenario 2 

function DealWithUserInput($input) 
{ 
    return eval($input); 
} 

現在的代碼這個例子是很愚蠢的,但只是一個例子。考慮函數返回的內容,具體取決於用戶可以嘗試在輸入中使用哪種情況。

如果您在功能中將其設爲全局,則情況2只會導致問題。否則,它超出了範圍和無法訪問。

+0

是否危險的方式,如果某些用戶輸入與MYSQL_PASSWORD進來它可能會傳遞與實際密碼? – alex 2009-02-27 04:06:12

+0

如果你按照你列出的第二種方法,那將會發生什麼。它基本上將其設置爲全局變量,可在任何範圍內查看。 你可以選擇類或函數如何訪問$ config數組,所以只要你沒有在錯誤的範圍內可見,你應該沒問題。 – 2009-02-27 04:22:57

+0

編輯過的文章舉例說明了兩種不同的方式,您可以在代碼中定義內容以及用戶如何獲取信息。 – 2009-02-27 04:30:32

1

我通常使用第二種方法......處理數據庫連接時,我通常在請求開始時打開一個連接,然後在最後關閉它。我有一個建立連接的函數,然後從全局數組中刪除用戶名/密碼(使用unset()函數),這可以防止系統的其他部分訪問「敏感」的mysql連接數據。

0

我也爲選項2大多數配置值。如果你要去實現類,那麼我會把具體的值綁定到它影響的類,而不是一般的配置類。

在您的示例中,您的類將用於數據庫連接,並且實例將保存密碼,db_name等。這將正確地封裝數據,並且還提供了一種創建多個連接(如果需要的話)的簡單方法。

4

我想說這也取決於用戶基地。如果配置必須非常用戶友好或用戶必須有能力通過網絡更改配置等

我使用Zend Config Ini這個和其他設置存儲在SQL數據庫。

相關問題