将php中的配置文件解析为变量

时间:2012-04-18 17:08:29

标签: php parsing configuration-files ini

- 背景 -

所以我正在为本地开发机器安装一个安装程序脚本,并且用于安装word press,我想要做的就是让用户从下拉框中选择一个特定的插件,然后从那里选择他们想要安装的版本。

- 问题 -

所以我需要能够解析.cfg文件并将所有值动态存储到变量中,这样如果我们添加更多的插件就不会破坏它们。我该怎么做呢?

2 个答案:

答案 0 :(得分:3)

多种方式,具体取决于您希望如何存储配置数据。最快的方法是将数据存储为.ini文件,并使用PHP内置的parse_ini_file解析它。您还可以将数据存储为其他格式,例如XML和YAML,但我不建议使用XML,因为您可能不会在不同的系统之间传输数据,而且XML往往更难以阅读所有无关标签( vs yaml或ini)。

我个人更喜欢yaml并使用Symfony's Yaml Component解析器将yaml文件解析为数组。 Symfony的Yaml组件可以在Symfony框架之外使用。您也可以查看Zend's Yaml parser

选择要使用的格式和解析器之后,就像将文件存储在Web服务器可访问的地方一样简单,并将其传递给解析器API。在解析之后,您应该可以通过数组访问这些值。

- 更新 -

<?php

$settings = parse_ini_file('test.ini');

var_dump($settings);

结果:

array(41) {
["plugins"]=>
string(0) ""
["breadcrumb-navxt"]=>
string(5) "4.0.1"
["bp-moderation"]=>
string(5) "0.1.4"
["buddypress-activity-stream-hashtags"]=>
string(5) "0.4.0"
["buddypress-group-documents"]=>
string(5) "0.3.5"
["buddypress-group-email-subscription"]=>
string(5) "2.9.1"
["buddypress-links"]=>
string(3) "0.5"
["buddypress"]=>
string(6) "1.2.10"
["calendar"]=>
string(5) "1.3.1"
["collapsing-pages"]=>
string(5) "0.6.1"

这似乎按预期工作,所以如果我想要calendar插件的版本号,我会这样做:

var_dump($settings['calendar']);

存储在动态变量中:

$settings = parse_ini_file('test.ini');

foreach ($settings as $key => $setting) {
    // Notice the double $$, this tells php to create a variable with the same name as key
    $$key = $setting; 
}

var_dump($calendar);

答案 1 :(得分:0)

你能用json或php序列化格式存储文件吗?