parse_ini_file()は定数の影響を受ける罠


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


くっそ、なんだこの罠は。

name=HOGE
<?php

define('HOGE', 'ほげほげ');

$ini = parse_ini_file('/tmp/hoge.ini');
print_r($ini);

?>
Array
(
    [name] => ほげほげ
)


嬉しいときもあれば余計なお世話なときもある機能だな。
明示的にオプションで選択できるべきじゃないのかこれ。
フレームワークとか自分の与り知らぬところで定義されてる定数とかどうすんだよ。
もっと言えばパースを許可する定数を明示的に渡すとか、いっそkey/valuで(INIファイル内で使える定数を)渡せるとかできれば良いかも。


追記

どうやらbarewordで書くのがいけないらしい。
こうであればちゃんとname=HOGEになる。

name="HOGE"
Array
(
    [name] => HOGE
)


ちなみに、シングルクォートを使っちゃうとシングルクォートが文字列に含まれちゃうので注意。

name='HOGE' ; ←シングルクォートでくくってみた
Array
(
    [name] => 'HOGE'
)