用php解析ini

1,446次阅读
没有评论

不喜欢php的array()类型的配置文件,最近项目需要一个多语言配置,比较喜欢key=value形式的配置文件,于是便抽空写了这么个ini文件操作类代码如下

class IniParse extends Think{
	private $file;
	var $iniarr=array();
	public function __construct($f){
		$this->file=$f;
		$this->parse();
	}
	//解析成array
	public function parse()
	{
		$fp=fopen($this->file,"r");
		while(($line = fgets($fp,1024))!='')
		{
				$line=str_replace(array('rn','r','n',' '),'',$line);
				$line=trim($line);
				if(preg_match('/[(.+)]/',$line,$match))
				{
					$first=$match[1];
					$this->iniarr[$first]=array();
					$pre=$first;
				}
				else
				{
					list($key,$val)=explode('=',$line);
					$this->iniarr[$pre][$key]=$val;
				}
				
		}
		//dump($this->iniarr);
	}
	//设置值
	public function set($key,$value)
	{
		foreach($this->iniarr as $k=>$v)
		{
			if(array_key_exists($key,$v))
			{
				$this->iniarr[$k][$key]=$value;
			}
		}
	}
	//添加一个配置
	public function add($key,$arr){
		
		if(array_key_exists($key,$this->iniarr))
		{
			foreach($arr as $k=>$v)
			$this->iniarr[$key][$k]=$v;
		}
		else
		{
			$this->iniarr[$key]=$arr;
		}
	}
	
	//反解析,用于生成ini
	public function deparse(){
		$content='';
		foreach($this->iniarr as $k=>$v)
		{
			$content.="[".$k."]"."rn";
			foreach ($v as $kk=>$vv)
			{
				$content.=$kk."=".$vv."rn";
			}
		}
		return $content;
	}
	//保存
	public function saveIni(){
		import('@.ORG.FileUtil');
		FileUtil::writefile($this->file,$this->deparse());
	}
}
正文完
 

公众号