我完全不熟悉将cfg文件解析为php。仍然试图搜索几个网站,我发现了这个例子。但它有一些错误。我不明白我怎么能解决它们。
我有一个名为my_config.cfg
的.cfg文件。它具有如下所示的信息。
# ATA/IDE/MFM/RLL support
#
CONFIG_IDE=y
#
# IDE, ATA and ATAPI Block devices
#
CONFIG_BLK_DEV_IDE=y
CONFIG_BLK_DEV_IDEDISK=y
CONFIG_BLK_DEV_IDECD=n
我试图在php中解析它。
代码:
<?php
$config_file = "my_config.cfg";
$comment = "#";
$fp = fopen($config_file, "r");
while (!feof($fp)) {
$line = trim(fgets($fp));
if ($line && !ereg("^$comment", $line)) {
$pieces = explode("=", $line);
$option = trim($pieces[0]);
$value = trim($pieces[1]);
$config_values[$option] = $value;
}
}
fclose($fp);
if ($config_values['CONFIG_IDE'] == "y")
echo "CONFIG_IDE is set<br />";
else
echo "CONFIG_IDE is not set<br />";
?>
但我收到错误:
Deprecated: Function ereg() is deprecated in C:\xampp\htdocs\test.php on line 9
CONFIG_IDE is set<br />
任何解决方案???
答案 0 :(得分:2)
弃用警告表示您应该找到一个不同的功能来执行您需要的功能。有关PHP's ereg documentation page的更多信息。那么preg_match()呢?
if ($line && !preg_match("/^$comment/", $line)) {
...
}
但是,您可以使用substr()
,而不是使用正则表达式,如下所示:
if ($line && substr($line, 0, 1) != $comment) {
...
}
在循环的每次迭代中启动正则表达式匹配子系统是昂贵的,性能方面的。 substr()
更便宜了!
顺便问一下,在这里使用parse_ini_file()
怎么样?在我对您的代码和示例Linux内核配置片段的测试中,它产生相同的东西,但是使用1行代码而不是12行。
答案 1 :(得分:1)
您有&&
...应该是&&
if ($line && !ereg("^$comment", $line)) {
自PHP 5.3.0起,ereg
已被弃用。您应该使用preg_match
代替。语法对你来说都是一样的。