【问题标题】:having difficulties parsing the .cfg file with php [duplicate]用php解析.cfg文件时遇到困难[重复]
【发布时间】:2012-07-03 19:27:18
【问题描述】:

可能重复:
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.ini 中解析它。

代码:

<?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 />

任何解决方案???

【问题讨论】:

  • 要问什么? ereg 函数已弃用,您不应使用它们。

标签: php file parsing config


【解决方案1】:

该弃用警告表明您应该找到一个不同的功能来执行您需要的功能。有关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 内核配置 sn-p 的测试中,它产生了相同的结果,但使用 1 行代码而不是 12 行。

【讨论】:

  • 我试过preg_match,但还是有一些错误:Warning: preg_match() [function.preg-match]: No ending delimiter '^' found in C:\xampp\htdocs\test.php on line 9 Notice: Undefined offset: 1 in C:\xampp\htdocs\test.php on line 12
  • 糟糕,我忘记了分隔符。我确定了我的答案。现在应该可以工作了。祝你好运!
  • 感谢 curtisdfsachleen 的帮助...它成功了...
  • 嘿还有一个问题...我能够成功地做到这一点,因为我的配置文件与我的 php.ini 文件在同一个文件夹中。但是如果我想远程使用配置文件呢?有什么想法吗?
  • 您仍然可以使用远程配置文件使其工作。如果你给它一个完整的 URL,fopen() 就可以工作。
【解决方案2】:

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

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

从 PHP 5.3.0 开始,ereg 已被弃用。您应该改用preg_match。语法对你来说是一样的。

【讨论】:

  • 我试过了,但我收到了这个错误。 Deprecated: Function ereg() is deprecated in C:\xampp\htdocs\test.php on line 9 Deprecated: Function ereg() is deprecated in C:\xampp\htdocs\test.php on line 9 Deprecated: Function ereg() is deprecated in C:\xampp\htdocs\test.php on line 9 Deprecated: Function ereg() is deprecated in C:\xampp\htdocs\test.php on line 9 Deprecated: Function ereg() is deprecated in C:\xampp\htdocs\test.php on line 9 Deprecated: Function ereg() is deprecated in C:\xampp\htdocs\test.php on line 9 CONFIG_IDE is set&lt;br /&gt;
  • 请改用preg_match。查看更新的答案。
  • 好的。我会用 preg_match 试试...谢谢sachleen
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多