PHP源码:读取 ini 文件配置信息

<?php

##################################################################################################
/*
功        能:读取 ini 文件. [ 不 ] 支持节. 配置值中可能存在连续的多个空格
版        本:1.0
作        者:Jinsen
日        期:2010-09-20
入        参:ini 文件名:字符串
返    回    值:一个一维:关联数组
修        改:
注        意:ini 文件
            !!! 所有的配置节或配置项 均为小写!!!
            支持 "#" 或 ";" 开头的整行注释;
            支持 "//" 或 "--" 之后的行尾注释;
            多个相同的配置,后面的配置覆盖前面定义的配置;
            
*/
##################################################################################################

function get_config($configfilename)
{
    $debug=0;
    
    #创建空的配置栈
    $configs=array();
    
    $rows=@file($configfilename); #逐行读取记录
    foreach($rows as $row)
    {
        #清理空白字符
        $config=trim($row);
        #过滤掉空行;处理为空行
        if ($config)
        {
            #过滤注释行;处理非注释行
            if(substr($config,0,1)<>"#")
            {
                #删除行尾注释
                if ($pos==strpos($config,"#",0)) {$config=substr($config,0,$pos);}
                #根据“=”分割配置项和配置值,并进行格式化处理
                if ($pos==strpos($config,"=",0))
                {
                    #获取key:配置项
                    $key=strtolower(trim(substr($config,0,$pos)));
                    #获取value:配置值
                    $value=trim(substr($config,$pos+1));
                    #将配置入栈,等待返回
                    $configs["$key"]=$value;
                    #debug模式,打印调式信息
                    if ($debug) {print "\t$key:$value\n";}
                }                            
            }
        }
    }
    
    return $configs;
}

?>
<?php

##################################################################################################
/*
功        能:读取 ini 文件. [ 不 ] 支持节
版        本:1.1
作        者:Jinsen
日        期:2010-09-20
入        参:ini 文件名:字符串
返    回    值:一个一维:关联数组
修        改:2011-05-31: 配置值中 利用正则表达式替换 多个空格为单一的空格
注        意:ini 文件
            !!! 所有的配置节或配置项 均为小写!!!
            支持 "#" 或 ";" 开头的整行注释;
            支持 "//" 或 "--" 之后的行尾注释;
            多个相同的配置,后面的配置覆盖前面定义的配置;
            
*/
##################################################################################################

function get_config($configfilename)
{
    $debug=0;
    
    #创建空的配置栈
    $configs=array();
    
    $rows=@file($configfilename); #逐行读取记录
    foreach($rows as $row)
    {
        #清理空白字符
        $config=trim($row);
        #过滤掉空行;处理为空行
        if ($config)
        {
            #过滤注释行;处理非注释行
            if(substr($config,0,1)<>"#")
            {
                #删除行尾注释
                if ($pos==strpos($config,"#",0)) {$config=substr($config,0,$pos);}
                #根据“=”分割配置项和配置值,并进行格式化处理
                if ($pos==strpos($config,"=",0))
                {
                    #获取key:配置项
                    $key=strtolower(trim(substr($config,0,$pos)));
                    #获取value:配置值
                    $value=trim(preg_replace('/[ ]{1,}/'," ",substr($config,$pos+1)));
                    #将配置入栈,等待返回
                    $configs["$key"]=$value;
                    #debug模式,打印调式信息
                    if ($debug) {print "\t$key:$value\n";}
                }                            
            }
        }
    }
    
    return $configs;
}

?>
<?php

##################################################################################################
/*
功        能:读取 ini 文件. 支持节
版        本:2.0
作        者:Jinsen
日        期:2011-05-31
入        参:ini 文件名:字符串
返    回    值:一个二维数组.第一维是节:简单字符串类型,第二维是节内的配置:关联数组
修        改:
注        意:ini 文件
            !!! 所有的配置节或配置项 均为小写!!!
            支持 "#" 或 ";" 开头的整行注释;
            支持 "//" 或 "--" 之后的行尾注释;
            没有节的配置(第一个节之前的配置) 定义为 [default]节;
            如果出现多个相同的节,后面的节覆盖前面定义的节;
            如果节下出现多个相同的配置,后面的配置覆盖前面定义的配置;
            
*/
##################################################################################################
function getiniconfig($configfilename)
{
    # debug 输出控制
    $debug=0;
    
    #创建空的配置栈
    $configs=array();    
    $rows=@file($configfilename); #逐行读取记录
    foreach($rows as $row)
    {
        #清理空白字符
        $config=trim($row);
        #过滤掉空行;处理为空行
        if ($config)
        {
            #过滤注释行;处理非注释行
            if(substr($config,0,1)<>"#")
            {
                #删除行尾注释
                if ($pos=strpos($config,"//",0)) {$config=substr($config,0,$pos);}
                
                $configs[]=$config;                        
            }
        }
    }
    //if ($debug) print_r ($configs);
    
    # **********************************************************************************8
    $ini=array();
    $section='default'; //定义默认节
    $section_config=array();

    foreach($configs as $value)
    {
        # 新的节
        if (substr($value,0,1)=='[')
        {
            if ($debug) print "$value\n";
            $ini[$section]=$section_config;
            $section=strtolower(trim($value,"[]"));
            $section_config=array();
        }
        # 节配置项
        else
        {
            #根据“=”分割配置项和配置值,并进行格式化处理.
            if ($pos=strpos($value,"=",0)) //该处的算法为 计算 $pos 的值,如果大于0则进行"{}"内的代码判断
            {
                #获取key:配置项
                $key=strtolower(trim(substr($value,0,$pos)));
                #获取value:配置值
                $value=trim(substr($value,$pos+1));
                #将配置入栈,等待返回
                if ($debug) print "$key=$value\n";          
                $section_config[$key]=$value;            
            }    
        }
        
    }
    # 抓取最后节的配置
    $ini[$section]=$section_config;
    print "\n";
    if ($debug) print_r ($ini);
    # **********************************************************************************8

    return $ini;
        
}

?>
原文地址:https://www.cnblogs.com/jinzhenshui/p/2444933.html