通过web界面修改自定义配置文件的最佳方式


Best way to modify a custom configuration file via web interface?

因此,在我们的项目中,我们有一个类似的配置文件

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

我需要制作一个网络界面,以便轻松修改这个文件。我曾考虑将JavaScript与PHP或Python结合使用(并没有太大区别)。

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

或者,我根本不应该在任何地方存储任何东西,只需要使用regex实时定位所需的选项?

我可以举一些代码示例来说明如何最好地将设置与类相关联吗?例如,程序"知道"option1:on属于名为class1的类。

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

这样做的好处是:

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

  • 结构化格式可以很容易地跨不同的应用程序进行移植。

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

至于使用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>

您只需创建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
?>

试试flaskcode,一个基于python-flask框架的基于web的代码编辑器,它解决了我的问题。

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

如何

安装

pip install flaskcode

用法

flaskcode /path/to/resource/folder

默认情况下,它将在";http://127.0.0.1:5001"

参考

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