2014-09-19 96 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匹配。有創意:)