-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)) {
    ...
}

ただし、正規表現を使用する代わりに、次のように を使用して回避できる場合がありますsubstr()

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

ループの反復ごとに regex マッチング サブシステムを起動するのは、コストがかかり、パフォーマンスの観点からも重要です。 substr()はるかに安いです!

ところで、parse_ini_file()ここの使い方は?あなたのコードとサンプル Linux カーネル構成スニペットの私のテストでは、同じことが生成されますが、12 行ではなく 1 行のコードになります。

于 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 に答える