-1

可能重复:
将 ereg 表达式转换为 preg

我对将 cfg 文件解析为 php 完全陌生。仍然试图搜索几个网站,我发现了这个例子。但它有一些错误。我不明白我该如何解决它们。
我有一个名为 .cfg 的文件my_config.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 />

任何解决方案???

4

2 回答 2

2

该弃用警告表明您应该找到一个不同的功能来执行您需要的功能。有关PHP 的 ereg 文档页面的更多信息。preg_match()怎么样?

if ($line && !preg_match("/^$comment/", $line)) {
    ...
}

但是,您可以不用使用正则表达式,而不必使用 using substr(),如下所示:

if ($line && substr($line, 0, 1) != $comment) {
    ...
}

在循环的每次迭代中启动正则表达式匹配子系统是昂贵的,性能方面。 substr()便宜多了!

顺便说一句,parse_ini_file()在这里使用怎么样?在我对您的代码和示例 Linux 内核配置片段的测试中,它产生了相同的结果,但只有 1 行代码而不是 12 行。

于 2012-07-03T19:33:32.870 回答
1

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

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

自 PHP 5.3.0 起,ereg已弃用。你应该preg_match改用。语法对你来说是一样的。

于 2012-07-03T19:28:39.130 回答