用php解析.cfg文件时遇到困难

时间:2012-07-03 19:27:19

标签: php file parsing config

  

可能重复:
  Converting ereg expressions to preg

我完全不熟悉将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&lt;br /&gt;";
else
echo "CONFIG_IDE is not set&lt;br /&gt;";
?>

但我收到错误:

Deprecated: Function ereg() is deprecated in C:\xampp\htdocs\test.php on line 9
CONFIG_IDE is set<br />

任何解决方案???

2 个答案:

答案 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)

您有&amp;&amp; ...应该是&&

if ($line && !ereg("^$comment", $line)) {

自PHP 5.3.0起,ereg已被弃用。您应该使用preg_match代替。语法对你来说都是一样的。