2009-08-07 172 views
10

我需要一個很好的配置文件格式。我打算放置表格模式。像symfony,ruby on rails等什麼是配置文件的最佳文件格式? Yaml或XML或JSON編碼的文件?哪個最適合這個目的?什麼是配置文件的最佳文件格式?

+0

你知道,如果你接受更多的問題,你會得到更多的代表,對不對? – 2011-03-23 13:08:44

回答

13

正如其他人所說,你有很多選擇。除非你有一個非常好的理由去做(不能想到任何),否則不要發明(即寫解析器)這樣的事情。只是評估你的選擇:

  • 你需要的任何地方訪問這些數據,我的應用程序之外(與另一種語言)
  • 你希望用戶(或自己)能夠編輯使用簡單的文本編輯器中的文件
  • 你需要向後兼容舊版本使用的語言

例如兼容性,PHP提供了非常簡單的序列化()和反序列化()函數。然而,這種格式不容易被人讀取/編輯(XML也可能難以閱讀,但不像PHP格式那麼難,Python的pickle模塊更糟糕)。如果您需要使用其他語言訪問數據,這是一個不錯的選擇。想想其他人 - 我最近在我的python項目中解析來自部落項目的PHP序列化數據! JSON是一個更好的選擇,因爲它的人類可讀性(如果它的「漂亮打印」,而不是壓縮形式!),人性化編輯和每種主要語言都支持JSON。但是,您將失去向後兼容性,例如用python,JSON需要版本2.6+。

+1

我回答了答案的一部分:XML如何不易被人讀取/編輯?這是它的一大優點。 (它比JSON更詳細,並且JSON沒什麼問題) – ViennaMike 2011-05-24 21:04:28

+1

嗯,你說得對,它比PHP的序列化格式或python醃菜更可讀。但它也非常冗長,我發現在閱讀時感到分心,在寫作時很麻煩。有一個稱爲「XML編輯器」的整個軟件類別是有原因的;) – c089 2011-05-29 11:12:57

+0

我將答案改爲「不那麼容易」。 – c089 2011-05-29 11:13:42

1

你打算放哪裏?

你有選擇的負荷:每一個新的行

  • SQLite的

    • XML與自定義標籤
    • 鍵值對?
  • +1

    我不會推薦SQLite作爲配置,因爲您需要SQLite客戶端工具來設置您的應用程序,並且您還需要熟悉SQL查詢。 – RaYell 2009-08-07 07:12:51

    13

    *.ini應該對此

    [MyApp] 
    var1 = "foo" 
    var2 = "bar" 
    
    [MyPlugin] 
    var1 = "qwe" 
    

    您可以輕鬆地閱讀它使用parse_ini_file()

    $config = parse_ini_file('/path/to/config/file', true); 
    echo $config['MyApp']['var2']; 
    
    +0

    很好的回答。特別是如果長期的語言範圍保持爲PHP。我一直使用.ini文件作爲我的應用程序中的「控制桿和控制旋鈕」。 – pimbrouwers 2015-04-04 19:03:13

    +0

    ini是否支持多行字符串? – starbeamrainbowlabs 2016-05-30 12:47:46

    2

    XML不錯是最適合這個目的,因爲大多數編程的langauge privide API來讀取XML文件。

    +9

    XML很難維護。 – 2009-08-07 07:24:45

    +2

    ...和XML很慢! – Marecky 2013-08-27 12:12:05

    +0

    xml是由魔鬼創建的.. – slier 2017-09-08 08:37:42

    0

    Joomla最近從ini文件切換到JSON編碼文件。編碼和解碼json使用json_encode()json_decode()比讀取和寫入ini文件執行得更好。

    但是有一個缺點:json不容易被人讀取。你需要使用一個php腳本來編碼你的配置文件。當你想在你的網站的管理員部分編寫你的配置時,你可以很好地使用這個解決方案。

    +5

    我會說JSON是非常人性化的(與標準的PHP序列化格式相比)。 – 2009-08-07 07:26:04

    3

    JSON是一個不錯的選擇,在我看來。你可以定義你的數據庫模式,例如:

    { 
        table1: { 
         id: { 
          type:"int", 
          autoincrement:true 
         }, 
         some_field: { 
          type:"string", 
         } 
        }, 
        table2: { // etc 
        } 
    } 
    

    那麼就使用json_decode把它變成一個PHP數組。

    例如

    $tables = json_decode($json_text); 
    foreach ($tables as $tablename => $t) { 
        foreach ($t as $fieldname => $field) { 
         echo "Table {$tablename} has a record called {$fieldname}"; 
        } 
    } 
    

    這將打印: Table table1 has a record called id Table table1 has a record called some_field

    JSON是更容易比XML在我看來,和json_encode工作/解碼非常快,所以有小的開銷。在我看來,它比XML更可讀,並且比INI文件更好地處理複雜的數據結構。有些人更喜歡YAML,但是語法真的沒有太大的區別。

    1

    我的偏好是

    1. 有案可稽的PHP文件
    2. 數據庫用戶的具體配置

    就像WordPress和無數其他的PHP應用程序使用

    0

    這些傢伙真的給你已經有好的答案。我個人喜歡文件根目錄之外的.ini文件。另外請確保(如果您使用的是Linux託管環境),您的文件只能由您的Web服務器讀取,且不可寫入。

    然後,您可以簡單地解析INI文件並使用您的配置設置。 (這是如果你使用的是PHP等語言,JavaScript等ect不會在這裏工作。)

    但它就像他們說的。這一切都取決於你想要在你的配置文件中有什麼數據,以及你想要什麼。

    問候 康拉德C「」)

    相關問題