是否有任何特殊功能来解析php中的.conf文件,如parse_ini_file()
函数?如果不是我怎么能实现这一目标?谢谢!
编辑:
Conf就像httpd.conf(Apache)。 (我想阅读和编辑httpd.conf文件)
答案 0 :(得分:3)
它取决于.conf文件的含义 - 标签是否意味着您指的是Apache httpd.conf文件?在那种情况下,我很确定答案是“不” - 但这取决于你想用它做什么。
解析Apache .conf文件的一般情况是一个非常棘手的问题。 < Location>,< Directory>,< VirtualHost>等块都可以更改服务器配置对特定请求的更改方式。最关键的是你需要能够理解< IfModule>如果启用了模块,则会添加额外配置的块(因此您需要能够确定该特定模块是否已加载到Apache进程中)。完成所有这些后,您需要查看使用Include指令加载的任何其他配置文件。美中不足的其他模块可以定义自己的配置设置 - 您的代码需要优雅地处理它不理解的任何配置设置。
如果您限制问题,那么它会变得更容易。您知道(并控制)服务器配置吗?如果是这样,那么您将知道加载了哪些模块,引用了哪些文件以及是否包含任何特殊结构。您可能能够以不同的方式限制问题 - 您是否只想要一个特定的设置,并且设置一个只能定义一次?如果是这样,您可以只搜索该字符串。
最后,如果您正在寻找解析Apache配置文件作为向其写入数据的前奏,那么我要注意这一点 - 允许Web应用程序修改服务器配置会使您暴露于一类安全漏洞以前没有。
当然,如果你根本不谈论Apache .conf文件,那么问题就更难回答了。如果您要为自定义应用程序定义自己的配置文件格式,则可以按照自己的喜好进行定义。
答案 1 :(得分:3)
不,解析httpd.conf没有特殊的功能,但解析器应该很容易编写。例如,如果您只对键值设置感兴趣,例如ServerRoot /var/www
,那么这将解决问题:
<?php
define('HTTPD_CONF', '/tmp/httpd.conf');
$lines = file(HTTPD_CONF);
$config = array();
foreach ($lines as $l) {
preg_match("/^(?P<key>\w+)\s+(?P<value>.*)/", $l, $matches);
if (isset($matches['key'])) {
$config[$matches['key']] = $matches['value'];
}
}
var_dump($config);
如果你想解析<Directory ...>
和其他块,它会带你几行代码,但它不应该太费力。这真的取决于你想做什么。您可以从$_SERVER
和getenv()
获取大量信息,因此您可能不需要解析配置文件。
修改强>
为了响应您的更新,为了编辑httpd.conf,您需要以超级用户权限运行脚本并导致重新加载httpd.conf(例如system("apachectl graceful");
)。
答案 2 :(得分:1)
如此处Apache config parser for PHP所述,pear / config收集了一些工具来解析不同类型的配置文件:https://github.com/pear/Config
示例:
$conf = new Config();
$root = $conf->parseConfig("/etc/apache2/httpd.conf", "apache");
print current($root->getItem('directive', 'Listen'))->content;
答案 3 :(得分:0)
最好的方法是使用
$conf = parse_ini_file("YOUR_CONF_FILE.conf",1)
解析您的配置文件。