2009-04-28 51 views
10

我有一個用PHP編寫的應用程序,並且有許多可配置的變量。我們正在實現一項功能,用戶可以在其中創建一組配置並輕鬆切換它們。我應該如何存儲我的配置?作爲XML?在.ini文件中?在多個.ini文件中?在一個數據庫?如何存儲PHP應用程序的配置 - xml或ini或db

如果我們在道路上添加田地,那麼如何提供最大的靈活性?編碼方便嗎?

如果我使用數據庫,我將不得不使用一個單獨的應用程序的主數據庫,原因是不值得進入,這使我害羞。 (此外,我們正在使用.dbg文件爲我們的數據庫。)

我一直走下來的XML路線,但我有使用SimpleXML添加和編輯配置的問題。此外,該應用程序必須與PHP 5.1.6兼容,並且我對某些功能有些緊張。

從來沒有真正處理了創建自定義INI文件....

小澄:用戶不會接觸到的文件 - 他們非技術人員。因此,設置初始文件將由我們完成,但是我們正在編寫一個工具,可以根據我們選擇的任何格式將其配置(s)寫出。

回答

4

將一個數據庫的設置存儲在不同的數據庫中沒有多大意義,IMO。

我會選擇一個ini文件,一個xml文件或者一個php文件,如jmucchiello所建議的。每個選項都有其優點和缺點。至於xml與ini,xml提供了更多的靈活性,但更難以維護(不易讀)。如果您的需求被ini覆蓋,請堅持使用更簡單的解決方案。只有當你需要超過ini文件可以提供給你時才使用xml。

至於php的解決方案,我會評價ini和xml之間的可讀性,但保存當前設置會更困難。因此,儘管我喜歡這種方法,但對於您目前的情況,我不會推薦它。

1

我想這裏的答案將取決於你的個人情況。有些情況下,這些都是更好的選擇。對於你的特定情況,xml可能是最好的。但是,如果你有多個相關的選項,那麼xml真正照亮ini文件。例如,如果您需要保留某個數據庫的連接信息,而該數據庫的連接的不同部分的節點可以更容易閱讀和維護,那麼該節點下面的連接可以更容易。這真的取決於數據。

我也會說,如果您只是要提取一個值,並且不在應用程序的開始將整個文件加載到內存中,則xml文件將更容易使用。

2

其實,我更喜歡一個可運行的PHP文件進行配置。您可以在可運行文件中執行很多操作,但無法使用其他解決方案輕鬆完成。可運行文件唯一的缺點是管理員必須熟悉PHP,才能安全地編輯文件。 PHP也可以在你的配置中描述複雜的數據類型,因爲它是代碼。

數據庫是一個問題,因爲您仍然需要一個外部配置文件來查找並連接到數據庫。

XML對於配置來說是矯枉過正的。

INI文件可以工作,您可以使用PHP ini庫來讀取它們。請參閱parse_ini_file()。 ini文件雖然不能很好地處理複雜的數據類型。

編輯在回答伊泰Moav(評論不會格式化這個右):

<?php /* my config file */ 

$_CFG = Array(); /* problem solved */ 
$_CFG['key1'] = 'value1'; 
?> 
+1

並且您冒着在全球範圍內污染的危險,如果偶然發生全局註冊,那麼您將面臨嚴重的安全威脅。 – 2009-04-28 16:09:36

+0

無論如何,你的配置可能會在全球範圍內。這就是配置的原因。和一個簡單的$ _CFG = Array();在配置文件的頂部解決了register_globals問題。 – jmucchiello 2009-04-28 16:33:50

+0

我們真的不必擔心安全 - 這是編譯到本地運行的應用程序。 – sprugman 2009-04-28 16:37:52

5

我會存儲在一個PHP文件中的配置項。這是最靈活的方法I已經使用。

$config['website_url'] = 'google.com'; 

我則具有以下文件結構

- config/development 
- config/production 

我有一個名爲IN_PRODUCTION軟件早期定義的常量,當這是TRUE它加載了生產配置項和副反之亦然。

這很簡單,易於維護。

-Mathew

0

我會去的INI文件,它們是人類可讀的,他們正在解析非常快(如果你緩存....)。
當然不是XML。人類可讀性較差,解析速度並不快。
由於速度,我不會做DB。
我不會使用PHP變量,因爲它使您使用GLOBAL範圍...

0

寫你自己的配置類,加載配置文件。 CodeIgniter處理配置的一個很好的例子。

http://codeigniter.com/user_guide/libraries/config.html

它默認加載一些配置文件,也可以加載一個特定的一個與配置類。

你可以下載源代碼,並看看他們是如何做到教育目的。

另一種選擇是從數據庫中生成一個帶有配置數組的php文件。因此,您可以管理所有選項並保存生成文件。

2

我剛纔在同一個問題上看過一篇文章,這裏有一個很好的解決方案。 收集有用代碼是一種很好的做法。我想。 :)

點擊iniHandler class得到INI處理程序類!

相關問題