【问题标题】:Best way to modify a custom configuration file via web interface?通过 Web 界面修改自定义配置文件的最佳方式?
【发布时间】:2012-04-05 19:19:12
【问题描述】:

所以在我们的项目中,我们有一个看起来像这样的配置文件

%class
name: class1 
option1: on
optionN: off
%classend

我需要制作一个网络界面以便于修改这个文件。我正在考虑将 JavaScript 与 PHP 或 Python 一起使用(实际上并没有太大的区别)。

那么我将如何实施呢?我应该将选项的值存储在数组还是变量中?但是,我将如何为每个类创建一个单独的数组或变量?如果有 1000 个类怎么办?

或者也许我根本不应该在任何地方存储任何东西,而只是使用正则表达式实时找到所需的选项?

我能否提供一些代码示例,说明如何最好地将设置与类相关联?例如,程序“知道” option1: on 属于名为 class1 的类。

【问题讨论】:

    标签: php javascript python configuration


    【解决方案1】:

    对于这样的事情,我建议使用某种结构化格式,例如 XMLYAML,而不是自己发明。

    这样做的好处是:

    • 人们已经为这些结构化格式编写了编码器和解析器,因此您可以轻松获取库并将其与您选择的语言一起使用。

    • 结构化格式可以轻松移植到不同的应用程序中。

    • 任何第三方都可以轻松地将您的配置文件实施到他们的应用程序中。

    至于使用 Web 界面编辑它们,如果您使用 XML 或 YAML,PHP 出色的 XML 和 YAML 扩展应该允许您轻松浏览配置文件并修改所需的变量。

    至于将设置与类关联,这可以通过使用 XML 或 YAML 轻松解决。

    在 XML 中,您的文件可能如下所示

    <class name="class1">
     <option1>on</option1>
     <optionN>off</optionN>
    </class>
    
    <class name="class2">
     <option1>on</option1>
     <optionN>off</optionN>
    </class>
    
    <class name="class3">
     <option1>on</option1>
     <optionN>off</optionN>
    </class>
    

    【讨论】:

    • 我实际上认为这也是最好的方法。但是在我们的项目中,已经有一个自定义配置文件也在其他地方使用。这就是为什么我有一些麻烦。使用 XML 或 INI 会容易得多。
    • @radioprotector:在这种情况下,也许您可​​以编写一对 custom-config-to-XML 和 XML-to-custom-config 转换器。这将使您能够通过 XML 进行操作,然后以自定义配置格式保存。
    【解决方案2】:

    您可以简单地创建 2 个 php 页面来管理此配置文件: 1. read.php:读取配置文件,友好显示 2.save.php:保存你修改的内容

    read.php的示例代码:

    <?php
    $f = fopen('config.cfg', 'r');
    # Read the file line by line
    $curr = '';
    while(!feof($f)){
        $line = fgets($f);
        if ($line=='%class'){
            $line = fgets($f);
            $classname = explode(': ', $line)[1];
            $curr = $classname;
            $cfg[$classname] = array();
        }
        if ($line=='%classend'){
            continue;
        }
        $opt = explode(': ', $line);
        $cfg[$curr][$opt[0]] = $opt[1];
    }
    fclose($f);
    ?>
    <html>
    <body>
    <!-- output the $cfg into form -->
    <form action="save.php" method="POST">
    <?php foreach ($cfg as $k => $v): ?>
    <p>
        <input type="text" name="<?php echo $k; ?>" value="<?php echo $k; ?>" /><br/>
        <textarea name="<?php echo $k; ?>_v"><?php echo implode(',',$v); ?></textarea>
    </p>
    <?php endforeach; ?>
    <button type="submit">Save</button>
    </form>
    </body>
    </html>
    

    还有save.php:

    <?php
    # try to save the POST data into file
    ?>
    

    【讨论】:

      【解决方案3】:

      试试 flaskcode 一个基于 Python 烧瓶框架的基于 Web 的代码编辑器,它解决了我的问题。

      允许其他人修改配置文件而不暴露不必要的部分。

      如何

      安装

      pip install flaskcode
      

      用法

      flaskcode /path/to/resource/folder
      

      默认会在“http://127.0.0.1:5001”上提供代码编辑器

      参考

      https://pypi.org/project/flaskcode/

      【讨论】:

      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
      猜你喜欢
      • 1970-01-01
      • 2011-06-08
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      相关资源
      最近更新 更多