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 ファイルのファイル名。 相対パスが指定された場合、 現在のディレクトリから相対的な位置として評価され、 さらに include_path からファイルを探します。
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
を返します。
例
例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() の例
定数
(但し __FILE__
のような "マジカル定数" は除く)
も ini ファイル上でパースされます。
そのため、parse_ini_file() をコールする前に
ini ファイル上の値として定数を定義した場合、返り値に統合されます。
ini ファイル上の値だけが評価されます。この値は定数でなければなりません。以下は例です:
<?phpdefine('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
例4 ini ファイルの値の補完
定数を評価することに加えて、文字によっては ini ファイルの値として特別な意味を持つものがあります。
さらに、環境変数や以前定義された値は ${}
を使って読み取ることができます。
; | は ビット演算の OR is used for bitwise OR three = 2|3 ; & は ビット演算の AND four = 6&5 ; ^ は ビット演算の XOR five = 3^6 ; ~ は ビット演算の NOT negative_two = ~1 ; () はグループ化に使います seven = (8|7)&(6|5) ; \ は値のエスケープに使います newline_is = "\\n" ; results in the string "\n", not a newline character. with quotes = "She said \"Exactly my point\"." ; Results in a string with quote marks in it. path = ${PATH} also_five = ${five}
上の例の出力は、 たとえば以下のようになります。
(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" という設定項目がありますが、この項目には何も値を設定しません。 そのため、この項目は無視されます。
注意:
ini ファイルは、一般的にWebサーバからはプレーンテキストとして扱われます。 よって、ini ファイルにリクエストがあった場合、ブラウザにそのまま表示されます。 これは、セキュリティを考慮すると、 ini ファイルはドキュメントルートの外側に置くか、 Webサーバがそれを返さないように設定を変更しなければならないということです。 そうしないと、セキュリティ上のリスクが発生する可能性があります。