【问题标题】:What's Is the Best File Format for Configuration Files配置文件的最佳文件格式是什么
【发布时间】:2009-01-24 23:42:44
【问题描述】:

我正在用 PHP 创建一个框架,需要一些配置文件。其中一些文件不可避免地会有大量条目。

什么格式最适合这些配置文件?

这是我对最佳的量化:

  1. 很容易被 PHP 解析。如果我不必编写任何解析代码就好了,但这不会破坏交易。
  2. 即使有大量条目,仍然很容易被人类阅读
  3. 是一种广泛使用的标准,没有自定义格式
  4. 简洁明了

我开始使用 XML,但由于显而易见的原因很快就放弃了。我想到了 JSON 和 YAML,但想看看还有什么。

【问题讨论】:

  • “我需要某种树状结构,”是另一条评论的一部分。请使用此附加信息更新问题。人们可能会根据您的其他事实改变他们的答案。

标签: php configuration file-format


【解决方案1】:

INI 文件格式怎么样?这是一个事实上的配置文件标准,PHP 有一个针对该格式的内置解析器:

parse_ini_file

【讨论】:

  • 此外,编写自己的 INI 解析器非常简单。
  • 为了实现树状层次结构,INI 文件可以包含带有点分隔名称的部分,例如 [persistence.connection]、[persistence.cache]、[users.admin]、[users.安全]等
  • 太好了,我会在下一个项目中使用它:)
【解决方案2】:

YAML 是一个不错的选择: http://www.yaml.org/

它也非常简单和强大

Ruby 项目经常使用它进行配置。

【讨论】:

  • 与 PHP 数组、INI 文件、XML 相比,它也非常慢。我阅读了包括 YAML 在内的所有这些的基准测试。虽然三大巨头每秒执行大约 3,500 个请求,但 YAML 在相同的测试数据和系统下只能执行大约 850 个。
【解决方案3】:

为什么不使用 PHP 文件进行配置?

好处很明显:

  • 可能的错误会被自动捕获
  • 无需使用/创建自定义解析器
  • PHP 程序员普遍理解它
  • 您可以有一些自定义逻辑,例如使用自定义配置进行开发,将其他配置用于生产等

其他框架,如 Django 和 rails 使用配置文件,即脚本。

【讨论】:

  • 配置文件中的实际数据不适合此解决方案。配置文件将包含不同类型数据的定义,每种类型可能有 20 多个条目。我需要某种树状结构,而将其全部输入 PHP 数组的想法似乎令人生畏。
  • 我看不出你将如何使用 .ini 文件来构建一个漂亮的树状结构。
【解决方案4】:

另一种选择是使用 JSON 并使用 json_encodejson_decode

您将能够在配置参数中使用更丰富的数据结构。

【讨论】:

  • JSON 不好评论。配置文件需要 cmets。
【解决方案5】:

我个人喜欢在课堂上做配置数据。

class appNameConfig {
    var $dbHost = 'localhost';
    var $dbUser = 'root';
    //...
 }

那么你所要做的就是使用它们

$config = new appNameConfig;
mysql_connect($config->dbHost, $config->dbUser, $config->dbPassword) or die(/*...*/);

要更改配置,您只需读取包含类的文件,我使用如下函数:

function updateConfig($parameter, $value) {
    $fh = fopen('config.php', 'w+');
    while(!feof($fh)) {
        $file .= fgets($fh);
     }
    $fileLines = explode("\n", $file);
    for($i=0;$i<count($fileLines);$i++) {
        if(strstr($fileLines[$i], $parameter)) {
            $fileLines[$i] = "$" . $parameter . " = '" . $value . "'";
         }
     }
    $file = implode("\n", $fileLines);
    fwrite($fh, $file);
    fclose($fh);
 }

【讨论】:

  • 您需要在 $value 周围添加斜杠。这假设您的配置永远不会将复杂数据附加到参数。
  • 我省略了我认为很明显的清理代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-24
  • 2021-09-04
  • 2015-02-14
  • 1970-01-01
相关资源
最近更新 更多