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

时间:2009-08-07 07:07:59

标签: php

我需要一个好的配置文件格式。我计划推出表架构。像symfony,ruby on rails等。配置文件的最佳文件格式是什么? Yaml或XML或JSON编码的文件?哪个最适合这个目的?

8 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:13)

正如其他人所说,你有很多选择。只是不要自己发明(即写解析器)这样的事情,除非你有一个非常非常好的理由这样做(不能想到任何)。只需评估您的选择:

  • 您是否需要在我的应用程序之外的任何地方(使用其他语言)访问此数据
  • 您是否希望用户(或您自己)能够使用简单的文本编辑器编辑文件
  • 您是否需要向后兼容旧版本的已用语言

例如,PHP提供了非常简单的serialize()和unserialize()函数。然而,这种格式并不像人类那样容易阅读/编辑(XML也很难读,但不像PHP格式那么难.Python的pickle模块更糟糕。)。如果您需要使用其他语言访问数据,这是一个糟糕的选择。并想想其他人 - 我最近在我的python项目中解析来自Horde项目的PHP序列化数据! JSON是一个更好的选择,因为它是人类可读的(如果它的“漂亮印刷”,而不是压缩形式!),人类可编辑,并且现在每种主要语言都有JSON支持。但是,您将失去向后兼容性,例如使用python,JSON需要2.6 +版本。

答案 2 :(得分:3)

在我看来,

JSON是一个不错的选择。您可以这样定义数据库模式:

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

然后只需使用json_decode将其转换为PHP数组。

e.g。

$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 / decode非常快,因此开销很小。在我看来,它比XML更具可读性,并且比INI文件更好地处理复杂的数据结构。有些人更喜欢YAML,但语法上没有太大区别。

答案 3 :(得分:2)

XML最适用于此目的,因为大多数编程语言都提供API来读取XML文件。

答案 4 :(得分:1)

你打算在那里投入什么?

您有很多选择:

  • 带有自定义标记的XML
  • 每个新行上的键值对
  • SQLite的?

答案 5 :(得分:1)

我的偏好是

  1. 详细记录的php文件
  2. 用户特定配置的数据库
  3. 就像wordpress和无数其他php应用程序一样使用

答案 6 :(得分:0)

Joomla最近从ini文件切换到JSON编码文件。使用json_encode()json_decode()对json进行编码和解码比读取和写入ini文件更好。

但是有一个缺点:json不易于人类阅读。您需要使用php脚本对配置文件进行编码。当您想在网站的管理员部分编写配置时,可以很好地使用此解决方案。

答案 7 :(得分:0)

这些家伙已经给你很好的答案了。我个人喜欢你的文档根目录之外的.ini文件。还要确保(如果你在linux主机环境中)你的文件只能由你的web服务器读取而且不可写。

然后,您可以简单地解析INI文件并使用您的配置设置。 (如果您使用的是PHP等语言,那么JavaScript ect将不起作用。)

但就像他们说的那样。这一切都取决于您希望在配置文件中包含哪些数据以及您想要使用它的内容。

此致 康拉德c'',)