2009-08-07 173 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“”)

    相关问题