設定ファイルをパースする

# parse_ini_file

(PHP 4, PHP 5, PHP 7)

parse_ini_file — 設定ファイルをパースする

### 説明

parse_ini_file ( string `$filename` [, bool `$process_sections` = `FALSE` [, int `$scanner_mode` = INI_SCANNER_NORMAL ]] ) : array

parse_ini_file() は、 `filename` で指定した ini ファイルをロードし、 連想配列としてその設定値を返します。

ini ファイルの構造は、php.ini の構造と同じです。

### パラメータ

`filename`

  パースしたい ini ファイルのファイル名。

`process_sections`

  `process_sections` パラメータに `TRUE` を設定すると、セクション名と設定が含まれた多次元の配列を得ることができます。 デフォルトでは、`process_sections` は `FALSE` です。

`scanner_mode`

  `INI_SCANNER_NORMAL` (デフォルト) あるいは `INI_SCANNER_RAW`。`INI_SCANNER_RAW` を指定すると、オプションの値はパースされません。

  PHP 5.6.1 以降では `INI_SCANNER_TYPED` も指定できるようになりました。 このモードでは、boolean や null そして integer の型を、可能な限り維持します。 文字列 "true"、"on" そして "yes" は `TRUE` に変換されます。"false"、"off"、"no" そして "none" は `FALSE` だとみなされます。このモードでは、"null" は `NULL` に変換されます。また数値形式の文字列も、可能な限り integer 型に変換されます。

### 返り値

成功した場合に設定を連想配列形式で返します。 失敗した場合に `FALSE` を返します。

### 変更履歴

バージョン | 説明
--- | ---
7.0.0 | ハッシュマーク (#) をコメントとみなさないようになりました。
5.6.1 | `INI_SCANNER_TYPED` モードが新たに追加されました。
5.3.0 | オプションのパラメータ `scanner_mode` が追加されました。 シングルクォートも変数の代入に使うことができます。 ハッシュ記号 (#) はコメントとしては扱われなくなり、 もし使うと警告が発生します。
5.2.7 | 構文エラーが発生した場合は、空の配列ではなく `FALSE` を返すようになりました。
5.2.4 | 数字から始まるキーおよびセクション名は、PHP では 整数 として評価されます。 よって、0 で始まる数字は 8 進数として評価され、0x で始まる数字は 16 進数として評価されます。
5.0.0 | 値をダブルクォートで囲めばその中で改行を使用することもできます。
4.2.1 | この関数は セーフモード と open_basedir の影響を受けます。

### 例

例1 sample.ini の内容

    ; これは設定ファイルのサンプルです。
    ; php.ini と同様、';' で始まる行はコメントです。

    [first_section]
    one = 1
    five = 5
    animal = BIRD

    [second_section]
    path = "/usr/local/bin"
    URL = "http://www.example.com/~username"

    [third_section]
    phpversion[] = "5.0"
    phpversion[] = "5.1"
    phpversion[] = "5.2"
    phpversion[] = "5.3"

    urls[svn] = "http://svn.php.net"
    urls[git] = "http://git.php.net"

例2 parse_ini_file() の例

定数も ini ファイル上でパースされます。 そのため、parse_ini_file() をコールする前に ini ファイル上の値として定数を定義した場合、返り値に統合されます。 ini ファイル上の値だけが評価されます。以下は例です：

`<?php
define('BIRD', 'Dodo bird');
// セクションを無視してパースします。
$ini_array = parse_ini_file("sample.ini");
print_r($ini_array);
// セクションを意識してパースします。
$ini_array = parse_ini_file("sample.ini", true);
print_r($ini_array);
?>`

上の例の出力は、 たとえば以下のようになります。

    Array
    (
        [one] => 1
        [five] => 5
        [animal] => Dodo bird
        [path] => /usr/local/bin
        [URL] => http://www.example.com/~username
        [phpversion] => Array
            (
                [0] => 5.0
                [1] => 5.1
                [2] => 5.2
                [3] => 5.3
            )

        [urls] => Array
            (
                [svn] => http://svn.php.net
                [git] => http://git.php.net
            )

    )
    Array
    (
        [first_section] => Array
            (
                [one] => 1
                [five] => 5
                [animal] => Dodo bird
            )

        [second_section] => Array
            (
                [path] => /usr/local/bin
                [URL] => http://www.example.com/~username
            )

        [third_section] => Array
            (
                [phpversion] => Array
                    (
                        [0] => 5.0
                        [1] => 5.1
                        [2] => 5.2
                        [3] => 5.3
                    )

                [urls] => Array
                    (
                        [svn] => http://svn.php.net
                        [git] => http://git.php.net
                    )

            )

    )

例3 parse_ini_file() による php.ini ファイルのパース

`<?php
// 以下の結果を比較するための簡単な関数
function yesno($expression)
{
return($expression ? 'Yes' : 'No');
}
// php.ini へのパスを the php_ini_loaded_file() 関数で取得します
// この関数は PHP 5.2.4 以降で使用可能です
$ini_path = php_ini_loaded_file();
// php.ini をパースします
$ini = parse_ini_file($ini_path);
// 結果を表示して比較します。get_cfg_var() を使用すると、
// ここでパースして読み込んだのと同じ結果が得られることに注意しましょう
echo '(parsed) magic_quotes_gpc = ' . yesno($ini['magic_quotes_gpc']) . PHP_EOL;
echo '(loaded) magic_quotes_gpc = ' . yesno(get_cfg_var('magic_quotes_gpc')) . PHP_EOL;
?>`

上の例の出力は、 たとえば以下のようになります。

    (parsed) magic_quotes_gpc = Yes
    (loaded) magic_quotes_gpc = Yes

### 注意

> 注意:

> この関数は、php.ini ファイルには何もしません。 このファイルはスクリプトを実行している時には既に処理されています。 この関数は、アプリケーション個有の設定ファイルを読み込む際に使用可能です。

> 注意:

> ini ファイル上の値に英数字ではないものがある場合、 ダブルクォート(")で囲う必要があります。

> 注意: ini ファイル上でキーとして使ってはいけない単語があります。 null, yes, no, true, false, on, off, none などです。 null, off, no および false は "" となり、 on, yes および true は "1" となります。 ただし、`INI_SCANNER_TYPED` モードを使っている場合 (PHP 5.6.1 以降) は別です。 次の文字 ?{}|&~!()^" は、キーで使ってはいけません。 また、値の中で特別な意味を持ちます。

> 注意:

> 等号が含まれないエントリは無視されます。 つまり、"foo" というエントリは無視されますが、 "bar =" は、空の値を持つエントリとして追加されます。 たとえば MySQL の my.cnf には "no-auto-rehash" という設定項目がありますが、この項目には何も値を設定しません。 そのため、この項目は無視されます。

### 参考

- parse_ini_string() - 設定文字列をパースする