2014-09-19 39 views
0

我试图折叠一个我正在用PHP读取的文件,并生成一个可以在我的应用程序的其他地方使用的配置文件。 PHP脚本我从一个系统中提取这个文件,我可以使用set命令在bash提示符下进行配置。解析PHP中的自定义配置文件

例如,命令

set system ntp server 0.pool.ntp.org
set system ntp server 1.pool.ntp.org
set system ntp server 2.pool.ntp.org

会产生这种结构在系统的配置文件:

system { ntp { server 0.pool.ntp.org { } server 1.pool.ntp.org { } server 2.pool.ntp.org { } } }

..我想让我的PHP脚本读取这个文件并生成t他以下的输出:

system ntp server 0.pool.ntp.org
system ntp server 1.pool.ntp.org
system ntp server 2.pool.ntp.org

我不知道我会怎样处理这,和我甚至有写psudo代码问题,明白我怎么可以折叠这些节点和生成我所需的线路。是什么使得它很难对我来说是一个事实,即配置节点的深度可以改变,例如:

system login user root authentication encrypted-password <password>

..产生结构..

system { login { user root { authentication { encrypted-password <password> } } } }

..并与上面的NTP命令合并,整个配置文件看起来像:

system { login { user root { authentication { encrypted-password <password> } } } ntp { server 0.pool.ntp.org { } server 1.pool.ntp.org { } server 2.pool.ntp.org { } } }

有人可以提出任何方法吗?

+0

你有选择切换到更标准的格式吗? 您当前的格式与JSON相当接近,并且如果您有权访问创建配置的脚本,您将拥有许多简单的选项。 – ornous 2014-09-19 12:45:33

+0

系统如何知道'user root'是一个关键字,而不是'{user {root ...'中的两个分隔符?是否有允许的密钥列表? – georg 2014-09-19 12:59:55

回答

0
  1. 取配置文件并创建它与每一行的阵列是所述阵列的项目
  2. 如果这些项中的一个具有{}在其中,分裂所述项目插入到两个项目,使得在每个支架的一端是自己的项目
  3. 创建创建具有以下规则的数组的函数:如果该项目是一个开放托架
    • :创建一个新的子阵列,并把在它followis一切
    • 如果项目i SA右括号,终止子阵列并继续之前的父阵列
    • 如果没有在,将其放在

与小algorythm你应该能够循环使用您的配置和创建你想要的输出。例如,过滤器keyntp匹配。有创意:)