PHP 5.3: parse_ini_file()関数の非互換
parse_ini_file()関数が PHP 5.3 で結構動作が変わっています。
アンダースコア「_」で始まる定数が展開されない
test.ini
TEST = _ABC
test.php
<?php define('_ABC', '定数_ABC'); $config = parse_ini_file('./test.ini', TRUE); var_dump($config);
PHP 5.2以前では、
array(1) { ["TEST"]=> string(10) "定数_ABC" }
PHP 5.3では、
array(1) { ["TEST"]=> string(4) "_ABC" }
キーに非ASCII文字を使用できない
まあ、こんなことをしてる人はいないと思いますが。
test.ini
テスト = _ABC
test.php
<?php $config = parse_ini_file('./test.ini', TRUE); var_dump($config);
PHP 5.2以前では、
array(1) { ["テスト"]=> string(4) "_ABC" }
PHP 5.3では、
array(0) { }
セクション名が定数の場合も展開される
test.ini
[TEST] TEST = ABC
test.php
<?php define('TEST', 'XYZ'); $config = parse_ini_file('./test.ini', TRUE); var_dump($config);
PHP 5.2以前では、
array(1) { ["TEST"]=> array(1) { ["TEST"]=> string(3) "ABC" } }
PHP 5.3では、
array(1) { ["XYZ"]=> array(1) { ["TEST"]=> string(3) "ABC" } }
PHP 5.3 では、以下のように第3引数に INI_SCANNER_RAW を指定すれば、定数の展開はされなくなるので、セクション名の展開もされなくなる。しかし、この場合、値の定数も展開されなくなる。
$config = parse_ini_file('./test.ini', TRUE, INI_SCANNER_RAW);