PHP: iniファイルを読み込む parse_ini_file()

PHPで iniファイル(設定ファイル)を読み込む場合は、 あらかじめ用意されている parse_ini_file()関数を使うと簡単です。
ここではiniファイルの読み込み方法や複数行にわたる値の取得についても紹介します。

iniファイルを読みこむ

parse_ini_file()の書式は次の通りです。


// セクションを意識してパース
$arr = parse_ini_file(ファイルパス, true);

// セクションを無視してパース
$arr = parse_ini_file(ファイルパス);

次のような「test.ini」ファイルを読み込みます。 first, secondというセクションが2つで、 各セクションにパラメーターが2つあります。。

[first]
color = red
url = "https://sample.com"

[second]
color = blue
url = "https://sample2.com"

セクションを意識して読み込む

iniファイルのセクションを意識して読み込む場合は第2引数に true を指定します。


// セクションを意識してパース
$arr_ini = parse_ini_file("test.ini", true);

echo $arr_ini["first"]["color"] . "\n";

print_r($arr_ini);

実行結果

red

Array
(
    [first] => Array
        (
            [color] => red
            [url] => https://sample.com
        )

    [second] => Array
        (
            [color] => blue
            [url] => https://sample2.com
        )

)

セクションを無視して読み込む

iniファイルのセクションを無視して読み込んだ場合は、 同じパラメータの値が上書きされます


// セクションを無視してパース
$arr_ini = parse_ini_file("test.ini",);

print_r($arr_ini);

実行結果

Array
(
    [color] => blue
    [url] => https://sample2.com
)

複数行にわたる値は取得できる?

iniファイルに複数行の値を記述した場合、 ちゃんと取得できるかを検証します。

下のiniファイルは、 パラメータ multi の値を""ダブルクォートで括っているかどうかが違います。


[first]
color = red
multi = "1行目
2行目"

[second]
color = blue
multi = 1行目
2行目

PHPコード


// セクションを意識してパース
$arr_ini = parse_ini_file("test.ini", true);

print_r($arr_ini);

実行結果を見ればわかるとおり、""で括っている場合は取得できていますが、 ""で括っていない場合は1行目しか取得できていません。

実行結果

Array
(
    [first] => Array
        (
            [color] => red
            [multi] => 1行目
2行目
        )

    [second] => Array
        (
            [color] => blue
            [multi] => 1行目
        )

)

""(ダブルクォーテーション)を取得したい場合

例えば「これは"サンプル"です。」のような、 ダブルクォーテーションを含む文字列を取得したい場合、 次のように全体を '(シングルクォーテーション)で囲むと取得できます。


[first]
color = red
str = 'これは"サンプル"です。'

実行結果

Array
(
    [first] => Array
        (
            [color] => red
            [str] => これは"サンプル"です。
        )

)