什么是配置文件的最佳文件格式?

18

我需要一个好的配置文件格式。我计划将其转化为表格模式,就像Symfony、Ruby on Rails等框架一样。对于配置文件,最好使用哪种文件格式?YAML、XML还是JSON编码文件?对于这个目的,哪一种最好?


你知道如果你接受更多的问题,你会得到更多的声望,对吧? - Tanner Ottinger
8个回答

17

*.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'];

很棒的答案。特别是如果长期来看,语言范围仍然是PHP的话。我一直在我的应用程序中使用.ini文件作为“控制杆和旋钮”。 - pim
ini文件支持多行字符串吗? - starbeamrainbowlabs

17

正如其他人所说,你有很多选择。除非你有一个非常好的理由(想不到任何理由),否则不要自己发明(即编写解析器)。只需评估你的选项:

  • 你是否需要在应用程序之外的地方(使用另一种语言)访问这些数据?
  • 你是否希望用户(或你自己)能够使用简单的文本编辑器编辑文件?
  • 你是否需要向后兼容使用的语言的旧版本?

例如,PHP提供了非常简单的serialize()和unserialize()函数。但是,该格式并不像XML那样容易被人类阅读/编辑(XML可能也很难读取,但比PHP格式容易得多。Python的pickle模块甚至更糟糕)。如果你需要在其他语言中访问数据,这是一个不好的选择。还要考虑其他人的情况-最近我必须在我的python项目中解析来自Horde项目的PHP序列化数据!JSON是更好的选择,因为它是人类可读的(如果“漂亮打印”并非紧凑形式!),可由人类编辑,并且现今每种主要的编程语言都支持JSON。但是,你会失去向后兼容性,例如对于python,JSON需要2.6+版本。


1
我对答案中的一部分有异议:XML 怎么可能不容易被人类阅读/编辑呢?这是它的一个重要优势。(虽然 XML 比 JSON 更冗长,但 JSON 也没有问题) - ViennaMike
1
没错,相较于PHP和Python的序列化格式,它确实更易读。但同时也非常冗长,这让我在阅读时感到分心,在编写时感到繁琐。难怪有一个软件类别叫做“XML编辑器”呢 ;) - c089
我把答案改成了“不那么容易”。 - c089
我觉得很奇怪,这个被@RaYell回答的最明显和简单的解决方案(parse_ini_file())在这个被接受的答案中缺失。除此之外,这个答案提供了一些很好的细节。 - Byson
@ViennaMike,JSON 存在一些问题,最显著的是它不允许注释。一个不允许注释的人类可编辑配置文件格式基本上只能写入,因此毫无价值。 - sam hocevar

5

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

这将打印: 表table1有一个名为id的记录 表table1有一个名为some_field的记录 在我看来,JSON比XML更易于使用,json_encode/decode非常快,因此开销很小。 在我看来,它比XML更可读,并且比INI文件更适合处理复杂的数据结构。 有些人喜欢YAML,但语法上真的没有太大区别。

3
很遗憾,你的示例不是正确的JSON格式,而是JavaScript代码。两者相似但并不相同。 - pythonator
8
评论在纯JSON中不被允许,这是配置文件的一个缺点,因为它可能包含你需要或不需要的想法或选项。 - Q Studio
首选YAML - Hans Ginzel

2

XML在这方面是最好的选择,因为大多数编程语言都提供了读取XML文件的API。


25
XML 很难维护。 - Dmytrii Nagirniak
7
XML是魔鬼创造的。 - slier
@DmytriiNagirniak 你好,你能解释一下为什么XML很难维护吗?或者请分享一个链接/博客来解释这个问题。谢谢。 - Ayush

1
你打算在那里放什么?
你有很多选择:
  • 带有自定义标签的XML
  • 每行上的键值对
  • SQLite?

3
我不建议将SQLite作为配置选项,因为你需要一个SQLite客户端工具来设置你的应用程序,并且你还需要熟悉SQL查询。 - RaYell

1

我的偏好是

  1. 有良好文档的 PHP 文件
  2. 用户特定配置的数据库

就像 WordPress 和无数其他 PHP 应用程序一样使用的那样。


0
Joomla最近从ini文件转换为JSON编码文件。使用json_encode()json_decode()进行编码和解码比读写ini文件更有效。但是,json的缺点是不易于人类阅读。您需要使用php脚本来编码配置文件。当您想要在网站管理员部分编写配置时,可以很好地使用此解决方案。

5
我会说JSON相对于标准PHP序列化格式而言,非常容易被人类读懂。 - Adam Byrtek

0
这些人已经给了你很好的答案。个人而言,我喜欢将.ini文件放在文档根目录之外。此外,请确保(如果您在Linux托管环境中)您的文件只能被Web服务器读取,而不能被写入。
然后,您可以简单地解析INI文件并像那样使用配置设置。(如果您使用的是诸如PHP之类的语言,则JavaScript等在此处无法工作。)
但就像他们所说的那样。这完全取决于您想在配置文件中拥有什么数据以及您想要对其进行什么操作。
问候 康拉德c'',)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接