ファイルシステム 関数
PHP Manual

parse_ini_file

(PHP 4, PHP 5, PHP 7)

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

説明

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

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

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

パラメータ

filename

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

process_sections

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

scanner_mode

INI_SCANNER_NORMAL (デフォルト) あるいは INI_SCANNER_RAWINI_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" という設定項目がありますが、この項目には何も値を設定しません。 そのため、この項目は無視されます。

参考


ファイルシステム 関数
PHP Manual