parse_ini_fileの戻り値が面妖な件

今日作業していて気が付きましたがparse_ini_fileの戻り値がPHPのバージョンによって違います。
エラー処理を書くときは気をつけないとまずいですね。なおマニュアルにはこの現象について記載がありませんでした。

PHP: parse_ini_file - Manual


PHP4の場合


$ php -v
PHP 4.3.11 (cli)
$ php -d safe_mode=off -r "var_dump(parse_ini_file('a'));"

Warning: parse_ini_file(): Cannot open 'a' for reading in Command line code on line 1
bool(false)

PHP5の場合


$ php -v
PHP 5.2.3 (cli)
$ php -d safe_mode=off -r "var_dump(parse_ini_file('a'));"

Warning: parse_ini_file(a): failed to open stream: No such file or directory in Command line code on line 1
array(0) {
}

どういう事かというと存在しないファイルをparse_ini_fileで指定した際の戻り値がfalseか空の配列かという事です。
どちらのバージョンでもエラーを判定できるようにするには条件を複数書くか、empty()を使って判定すればとりあえずはよさそうですが・・・。
なお上記の例ではあえてsafe_modeをoffで揃えていますが、safe_modeがonの時の挙動も異なります。

PHP4の場合


$ php -d safe_mode=on -r "var_dump(parse_ini_file('a'));"

Warning: parse_ini_file(): SAFE MODE Restriction in effect. The script whose uid/gid is 1600/1000 is not allowed to access /hoge owned by uid/gid 0/0 in Command line code on line 1
bool(false)

PHP5の場合


$ php -d safe_mode=on -r "var_dump(parse_ini_file('a'));"

Warning: parse_ini_file(a): failed to open stream: No such file or directory in Command line code on line 1
array(0) {
}

PHP5ではsafe_modeの影響を受けなくなりました。この点についてはマニュアルにも明確に記載されています。
まだソースまでみていませんが、仕様が変更になったという事でしょう。とはいえエラー時の戻りが異なるのは微妙ですね。
少なくともマニュアルには記載したほうが・・・・。

追記
似たような話を教えてもらいした。 parse_ini_file - bobchinの日記