PHP においても Windows の様にINIファイルを読込んで設定値として利用できる関数があります。
それが parse_ini_file で関数の引数にINIファイルのファイル名を指定すれば、INIファイルの中身を全て配列として返してきます。 Windows のINIファイル用の API と較べれば非常に簡単です。
■parse_ini_file の使用例
関数定義は以下の通りです。
// 関数定義
array parse_ini_file ( string $filename [, bool $process_sections = false
[, int $scanner_mode = INI_SCANNER_NORMAL ]] )
[引数]
$filename ini ファイル指定
$process_sections TRUE を設定するとセクション名と設定が含まれた多次元の配列を得ることができます
$scanner_mode INI_SCANNER_NORMAL (デフォルト) または INI_SCANNER_RAW を指定すると、
オプションの値はパースされません。
PHP 5.6.1 以降では INI_SCANNER_TYPED も指定でき、
boolean や null そして integer の型を、可能な限り維持します
[返り値] 成功した場合に設定を連想配列形式で返します。 失敗した場合に FALSE を返します。
それでは以下のINIファイルを読込んでみます。
; これはテストINIファイルです。[test.ini] [section1] data1 = 1 data2 = 1000 data3 = abcde [section2] string1 = "aaa123" string2 = "bbbbb11" [section3] array1[] = "100" array1[] = "200" array1[] = "300" array2["test1"] = "test1aaa" array2["test2"] = "test2bbbbb"
以下にセクションを意識する指定と、そうでない指定で行ってみます。
<?php
// $process_sections 未指定
$arr = parse_ini_file("test.ini");
print_r($arr);
// $process_sections 指定
$arr = parse_ini_file("test.ini", true);
print_r($arr);
?>
実行結果は以下の様に表示されます。
Array
(
[data1] => 1
[data2] => 1000
[data3] => abcde
[string1] => aaa123
[string2] => bbbbb11
[array1] => Array
(
[0] => 100
[1] => 200
[2] => 300
)
[array2] => Array
(
[test1] => test1aaa
[test2] => test2bbbbb
)
)
Array
(
[section1] => Array
(
[data1] => 1
[data2] => 1000
[data3] => abcde
)
[section2] => Array
(
[string1] => aaa123
[string2] => bbbbb11
)
[section3] => Array
(
[array1] => Array
(
[0] => 100
[1] => 200
[2] => 300
)
[array2] => Array
(
[test1] => test1aaa
[test2] => test2bbbbb
)
)
)
セクションを指定すると、セクション毎に配列となり、セクション以下は更にその中の配列になっています。
■parse_ini_file の使用例その2
私のPHPは PHP Version 5.6.28 ですので、第3引数を INI_SCANNER_TYPED の指定を行い実行してみます。
内部的に文字列なのか、数値なのかが分かりにくいので出力は var_dump を使います。
<?php
// $process_sections 指定
$arr = parse_ini_file("test.ini", true, INI_SCANNER_TYPED);
var_dump($arr);
?>
実行結果は以下の様に表示されます。数値として判断できるデータは数値になっています。
array(3) {
["section1"]=>
array(3) {
["data1"]=>
int(1)
["data2"]=>
int(1000)
["data3"]=>
string(5) "abcde"
}
["section2"]=>
array(2) {
["string1"]=>
string(6) "aaa123"
["string2"]=>
string(7) "bbbbb11"
}
["section3"]=>
array(2) {
["array1"]=>
array(3) {
[0]=>
string(3) "100"
[1]=>
int(200)
[2]=>
string(3) "300"
}
["array2"]=>
array(2) {
["test1"]=>
string(8) "test1aaa"
["test2"]=>
string(10) "test2bbbbb"
}
}
}
PR
コメント