(PHP) parse_ini_file()関数を使って、.iniファイルを読み込む方法

(PHP) parse_ini_file()関数を使って、.iniファイルを読み込む方法

 

本記事では、
parse_ini_file関数を使って、iniファイルの読み込み方法や複数行にわたる値の取得方法について紹介していく。

 

parse_ini_file() を使って、 iniファイルを読み込む

PHPのparse_ini_file()関数を使うと、
iniファイル(設定ファイル)設定内容を読み込んで、phpプログラムで使いやすい連想配列の形にして取り込んでくれることが可能だ。

 

iniファイルとは?

iniファイルとは設定ファイルのことで、
下記のように、「キー = バリュー」の形で値を定義する設定ファイルのことだ。

[first]
number = one
url = "https://hoge.com"

 

[]で囲ったセクションごとに、「キー=バリュー」を定義していけるのが特徴。

上記では、「first」と言うセクションに対して、
「number = one」と言う定義と、「url = “https://hoge.com”」と言う定義を設定している。

phpユーザーなら最も身近なiniファイルは、php.iniファイルが有名なところだろう。

 

 

parse_ini_file() の書式

parse_ini_file()の書式は次の通り、2通りの書式がある。

parse_ini_file()の書式(2通り)

①セクションを意識してパースする

$arr = parse_ini_file(ファイルパス, true);

②セクションを無視してパースする

$arr = parse_ini_file(ファイルパス);

 

2通りの違いは、第二引数に「true」を指定するかしないかの違いとなっている。

trueを指定した場合はセクションを意識してパースし、
trueを指定しなかった場合は、セクションを無視してパースする形となる。

 

parse_ini_file() で設定ファイルを読み込むサンプル

ではここからは実際に、
parse_ini_file()を使って、設定ファイルを読み込むサンプルを紹介していく。

なおサンプルでは、次のような「test.ini」ファイルを読み込むものとする。

//test.ini

[first]
number = one
url = "https://hoge.com"

[second]
number = two
url = "https://fuga.com"

 

「first」「second」というセクションが2つ定義してあり、
それぞれ、セクションに「number」と「url」と言う設定値を持っている。

 

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

parse_ini_file()の第2引数に true を指定した場合、
ファイルのセクションを意識して読み込む。

以下はそのサンプル。

■ PHP実行

$arr_ini = parse_ini_file("test.ini", true);

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

print_r($arr_ini);

 

■ 実行結果

one

Array
  (
    [first] => Array
      (
        [number] => one
        [url] => https://hoge.com
      )

    [second] => Array
      (
        [number] => two
        [url] => https://fuga.com
      )
  )

 

現段階ではセクションを意識して読み込むことの意味が分からないと思う。

が、とにかくここでは、
セクションごとに値がそのままパースされてphpの連想配列に取得されているのが理解できればOK

 

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

parse_ini_file()の第2引数に true を指定しなかった場合、
ファイルのセクションを無視して読み込む。

無視して読み込むとはどういうことかと言うと、
同じパラメータの値があった場合に、値が上書きされると言うことだ。

以下はそのサンプル

■ PHP実行

$arr_ini = parse_ini_file("test.ini",);

print_r($arr_ini);

■ 実行結果

Array
  (
    [number] => two
    [url] => https://fuga.com
  )

 

セクションを無視しているので、同じキーで値を再定義しているsecondの値で上書きされてしまったnumberとurlだけが残った状態になっているのが分かる。

 

複数行にわたる値の取得結果

iniファイルに複数行にわたる値を記述した場合、
値の記述の仕方によって取得結果が異なることがあるので注意しよう。

下のiniファイルは、
パラメータ lines の値を””ダブルクォートで括っているかどうかが異なっている。

[first]
number = one
lines = "1行目
2行目"

[second]
number = two
lines = 1行目
2行目

■ PHP実行

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

print_r($arr_ini);

 

実行結果を見ればわかるとおり、””で括っている場合は取得できているが、
“”で括っていない場合は1行目しか取得できていないのが分かる。

■ 実行結果

Array
  (
    [first] => Array
      (
        [number] => one
        [multi] => 1行目
          2行目
      )

    [second] => Array
      (
        [number] => two
        [multi] => 1行目
  )

)

 

 

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

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

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

実行結果

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

 

https://www.php.net/manual/ja/function.parse-ini-file.php

https://phpspot.net/php/man/php/function.parse-ini-file.html

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。