您的位置:首页 > 编程语言 > PHP开发

zend framework ini配置文件大致读取过程 以及处理函数

2014-04-11 20:38 519 查看
首先建立标准配置文件,跟php.ini配置文件相识的
<?php

$iniArray = parse_ini_file('application.ini',true); //在Zend_Config_Ini类中可以找到

//var_dump($iniArray);

//处理扩展
function loadfile($config)//在Zend_Config_Ini类中可以找到
{
$iniArray = array();
foreach ($config as $key=>$val)
{
$pices = explode(':', $key);
//当前区域
$currSection = trim($pices[0]);

switch(count($pices))
{
case 1: //没有扩展
$iniArray[$currSection] = $val;
break;
case 2://存在扩展
$extendSection = trim($pices[1]);
//将继承(扩展)添加到对应的区域,作为对应区域的第一个元素
$iniArray[$currSection] = array_merge(array(';extends'=>$extendSection),$val);
break;
}
}

return $iniArray;
}

$iniArray = loadfile($iniArray);

//接下来就是更具区域来读取
//读取testing区域和mysql
$section = array('testing','mysql');
$dataArray = array();
foreach ($section as $sectionName)
{
//这里合并多个区域的配置信息
$dataArray =_arrayMergeRecursive(_processSection($iniArray, $sectionName),$dataArray);
}

$iniArray = $dataArray;

//读取区域
function _processSection($iniArray,$section,$config=array())//在Zend_Config_Ini有对应的源代码
{
$currSection = $iniArray[$section];

foreach ($currSection as $key=>$val)
{
if(strtolower($key)==';extends') //这里当前区域存在继承
{
if(isset($iniArray[$val])) //检查继承区域是否存在
{
$config = _processSection($iniArray, $val,$config); //递归到继承区域
}

}
else
{
$config = __processKey($config, $key, $val);
}
}
return $config;
}

function __processKey($conf,$key,$val)//在Zend_Config_Ini有对应的源代码
{
if(strpos($key, '.')!==false)
{
//这里每次只取出一个点
$pices = explode('.',$key,2);
if(strlen($pices[0])&&strlen($pices[1]))
{
if(!isset($conf[$pices[0]]))
{
$conf[$pices[0]] = array();
}
$conf[$pices[0]] = __processKey($conf[$pices[0]], $pices[1], $val);
}
}
else
{
$conf[$key] = $val;
}
return $conf;
}

//若果读取的区域是多个那么通过_arrayMergeRecursive 函数来合并读取区域配置信息
function _arrayMergeRecursive($firstArray, $secondArray)//在基类Zend_Config中有对应的源代码
{
if (is_array($firstArray) && is_array($secondArray)) {

foreach ($secondArray as $key => $value) {

//如果第二个数值中的键在第一个中存在
//那么合并这个键对应的值
if (isset($firstArray[$key])) {
$firstArray[$key] = _arrayMergeRecursive($firstArray[$key], $value);
} else {
if($key === 0) {
$firstArray= array(0=>_arrayMergeRecursive($firstArray, $value));
} else {
$firstArray[$key] = $value;
}
}
}
} else {
$firstArray = $secondArray;
}

return $firstArray;
}

var_dump($iniArray);
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: