拡張(縮小?)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
正規表現の部分を使いやすいように適当に変更するといいかも。
ぱっぱと書いたのでバグがあるかもしれないが・・それはその都度対応で。