拡張(縮小?)parse_ini_file()関数
/** * parse_ini_file extension * * @param string $file * @return string[]|false * @access public */ function parse_ini_file_ex($file){ if (!$lines = file($file, 1)) return false; $res = array(); $curr = & $res; $sectionPattern = '/^\[([^\]]+)\]/'; $linePattern = '/^\s*([^=\s]*)\s*=\s*"?(.*?)"?\s*(?:;.*)?$/'; foreach ($lines as $line){ if (preg_match($sectionPattern, $line, $m)){ // セクションの判断 $res[$m[1]] = array(); $curr = & $res[$m[1]]; }elseif(preg_match($linePattern, $line, $m)){ // キーと値をまとめて解析 $curr[$m[1]] = $m[2]; } } return $res; }
- trueや定数を判断しない(以前noの文字列が取れなくてハマったことがあったので・・
- 英数字以外でもダブルクォーテーションで囲む必要は特にない(互換性のため、あっても構わない
- key = "value1;value2" ; comment とすると ;value2" ; comment がコメントとしてスルーされる(値はvalue1
正規表現の部分を使いやすいように適当に変更するといいかも。
ぱっぱと書いたのでバグがあるかもしれないが・・それはその都度対応で。