10

.iniファイルを配列に解析し、後で配列の値を変更して同じ.iniファイルにエクスポートする必要があります。ファイルを読み取ることはできましたが、書き戻す簡単な方法が見つかりませんでした。助言がありますか?

サンプル.iniファイル:

1 = 0;
2 = 1372240157;    // timestamp.
4

5 に答える 5

11

ファイルを書き.ini戻すには、独自の関数を作成する必要があります。PHP には、読み取り以外の機能が用意されていないためです ( http://php.net/manual/pl/function. parse-ini-file.php )。

多次元配列を構文互換の文字列にカプセル化する関数の例は、次の.iniようになります。

function arr2ini(array $a, array $parent = array())
{
    $out = '';
    foreach ($a as $k => $v)
    {
        if (is_array($v))
        {
            //subsection case
            //merge all the sections into one array...
            $sec = array_merge((array) $parent, (array) $k);
            //add section information to the output
            $out .= '[' . join('.', $sec) . ']' . PHP_EOL;
            //recursively traverse deeper
            $out .= arr2ini($v, $sec);
        }
        else
        {
            //plain key->value case
            $out .= "$k=$v" . PHP_EOL;
        }
    }
    return $out;
}

次のようにテストできます。

$x = [
  'section1' => [
    'key1' => 'value1',
    'key2' => 'value2',
    'subsection' => [
      'subkey' => 'subvalue',
      'further' => ['a' => 5],
      'further2' => ['b' => -5]]]];
echo arr2ini($x);

(短い配列構文は、PHP 5.4 以降でのみ使用できることに注意してください。)

また、質問に含まれていたコメントは保持されないことに注意してください。ファイルを元に戻すのが (人間ではなく) ソフトウェアである場合、それらを覚えておく簡単な方法はありません。

于 2013-06-26T10:05:48.917 に答える
1

RRの回答が機能し、1つの変更を追加しました

else文で

//plain key->value case
$out .= "$k=$v" . PHP_EOL;

に変更します

//plain key->value case
$out .= "$k=\"$v\"" . PHP_EOL;

値の前後に " を使用することで、INI に大きな値を含めることができます。そうしないと、parse_ini_* 関数で問題が発生します。

http://missioncriticallabs.com/blog/2009/08/double-quotation-marks-in-php-ini-files/

于 2015-02-05T16:13:56.033 に答える