百科 教育 动画 游戏 博览 网址 金融 搜搜 资料 新闻
触屏版

close ◇ 读取数据,请稍候 Loading...

.: Welcome to flymote.com [flymot.com] :.

网页太慢?试试: 或 [ 刷新 ]




  »

◆ 其它资料:.
第九套广播体操 分享(1302)
佳木斯快乐舞步视频分享(2022)
缩略图处理函数模块(2079)
投票功能模块(2385)
五行健康操 分享(2438)
纯PHP编写的PHP 简易中文分词(SCWS) sqlite词典工具(2858)
Flash网上投票系统 PHP李茂祥修改版 含flash源文件(4394)
读写 ini 文件的类(5361)
RSSLite RSS处理类(5379)
文件分割分卷的程序(5387)

读写 ini 文件的类

2006-11-23   李茂祥    GNU原创 * 修改   阅读: 5361   【本类别其它资料】 【资料库首页
上一篇 收藏 评论 打印 收藏夹 发布 下一篇

这是一个读写 ini 文件的类 ,是基于一个开源代码的多次修改版,是我常用的一个类,对小型的ini文件而言,很有用的! --- 主要用于读写管理系统配置信息---
〖ini CLASS〗

<?php
// path !!
// because the default configuration file is mysite.conf ,
// its place with "mysite.conf",the path Same as this file.
//
//the mysite.conf's structure(default file) ::
// [include]
//<the section name>=<the configuration file name with path>
//
//i.e: insurance=base/insurance.ini
//
//the configuration file's structure ::
//  valid formats:
//
//     [my-section]       <<<---- it must be UPPERALPHA !!
//     # single values
//     var1 = value1
//     var2=value 2
//     var3 = 'value 3'
//     ; if we use values between ' or ", they are not trimmed
//     var4="  value 4"
//
//     ; setting an array
//     var_array1 = this is var_array1[0]
//     var_array1 = this is var_array1[1]
//     var_array1 = this is var_array1[2]
//
//     sample_var = this is a = symbol
//
//
//to use:: $globalConfigCachedObject=new globalConfigObject('base/insurance.ini');
//    can with filename and path to designate which file been open.
//            If filename not been appoint,it will use the default file.
//         echo $globalConfigCachedObject->value($section,$variable,$default);
//    this will get one variable under designate section
//    the $default been used when the variable is NULL.
//
//---------------------------- lmx 2002.6.22
//
//---------------------------------class >> globalconfigobject define

class globalConfigObject
{
var 
$iniCachedValues=array();
var 
$iniCachedSections=array();
var 
$iniCachedFilenames=array();
var 
$filename;
var 
$error ="";
//---------------------------------auto initization function

function globalConfigObject($file)
{
   
$this->filename=$file;
    if (!isset(
$goto)||!is_array($goto))
    
$goto=$file;
    do {  if (
is_array($goto))
             {
                
reset($goto);
                
$goto=current($goto);
             }
          
$this->loadFile($goto);
          
$this->set2main();
          
$mainFile=current($this->iniCachedFilenames);
          
$goto=$this->iniSetting($mainFile,'readconfig','goto',false);
       }
    while (!empty(
$goto));
    
$require=$this->iniSetting($mainFile'readConfig''require',false);
    if (!empty(
$require))
       {
          if (!
is_array($require))
             
$require=array($require);
          while (
$v=each($require))
             {
                
$this->loadFile($v[1]);
             }
       }
}

//----------------------------------- load file
function loadFile($filename=false)
{
      if (empty(
$filename))
         {
        
$filename=$this->filename;
         }
      
$filename strtolower($filename);
      
$section "readconfig";      //default section when a variable has no section
      
if (!file_exists($filename))
             {   
                 
$this->error '数据无法读取,系统文件丢失!!('.$filename.')
'
;
                 return 
false;
             }
      else
      {
         
$this->iniCachedFilenames[$filename] = $filename;
         
$lines file($filename);//print_r($lines);
         
for ($i 0$i count($lines); $i++)
         {
            
$lines[$i] = trim($lines[$i]);//print_r($lines[$i]);
            
if (ereg("^#",$lines[$i]))
            {
               continue;     
// it's a comment and do nothing
            
}
            elseif (
ereg("^\[(.*)\]"$lines[$i], $regs))
               {
                   
// new section
                
if (preg_match("/^[a-zA-Z0-9_]+$/",$regs[1])) $sect strtoupper($regs[1]);
                else 
$sect $regs[1];
                
$section trim($sect);//print_r($regs); get the section name
                
$this->iniCachedSections[$filename][] = trim($sect);
               }
                elseif (
preg_match("'^(.*?)[\s]*=[\s]*(.*)'"$lines[$i], $regs))
                    {
                        
// setting variable
                        
if (preg_match("/^[a-zA-Z0-9_]+$/",$regs[1])) $sect strtoupper($regs[1]);
                 else 
$sect $regs[1];
                 
$variable trim($sect);
                        
$value trim($regs[2]);
                        if (
ereg("^[\"'](.*)[\"']$"$value$regs))
                           {
                              
$value $sect;
                           }
                        
$lower_value $value;
                        if (
in_array($lower_value, array('true''yes''on')))
                           {
                              
$value 1;
                           }
                        elseif (
in_array($lower_value, array('false''no''off')))
                           {
                              
$value 0;
                           }
                       if (! isset(
$this->iniCachedValues[$filename][$section][$variable]))
                          {
                             
// new variable
                             
$this->iniCachedValues[$filename][$section][$variable] = $value;
                          }
                       elseif (
gettype($this->iniCachedValues[$filename][$section][$variable]) == "array")
                             {
                              
// append new element to array
                              
$this->iniCachedValues[$filename][$section][$variable][] = $value;
                             }
                          else
                             {
                                 
// two values for a single variable, convert to array
                                 
$ovalue $this->iniCachedValues[$filename][$section][$variable];
                                 
$this->iniCachedValues[$filename][$section][$variable] = array($ovalue,$value);
                             }
                    }
         }
      }
}

function 
set2main()
{
     while (
sizeof($this->iniCachedFilenames)>1)
     {
     
array_shift($this->iniCachedValues);
     
array_shift($this->iniCachedSections);
     
array_shift($this->iniCachedFilenames);
     }
}

function 
value($section,$value,$default)
{
    if (
preg_match("/^[a-zA-Z0-9_]+$/",$section)) $section strtoupper($section);
    if (
preg_match("/^[a-zA-Z0-9_]+$/",$value)) {$variable strtoupper($value);$value=$variable;}
    
reset($this->iniCachedFilenames);
    
$main=current($this->iniCachedFilenames);
    if (isset(
$this->iniCachedValues[$main]['include'][$section]))
       {
//inicachedvalues is a array with filename->section->content
        //if the configuration file had [include] section,
        //  all value under this will appoint to another file!!
        //  <section>=<filename>,the <section> been include in the file with <filename>
          
$file=$this->iniCachedValues[$main]['include'][$section];
          
$this->loadFile($file);
          if (
$value=='') return $this->iniCachedValues[$file];
          return 
$this->iniCachedValues[$file][$section][$value];
        
//  get the value with <value> under <section> in file with <filename>
       
}
    while (
$f=each($this->iniCachedFilenames))
          {
              if (
$default=='section') return $this->iniCachedSections[$f[1]];
              elseif (
$value=='')
              if (isset(
$this->iniCachedValues[$f[1]]))
              return 
$this->iniCachedValues[$f[1]];
              else
              return 
'';
              if (isset(
$this->iniCachedValues[$f[1]][$section][$value]))
              return 
$this->iniCachedValues[$f[1]][$section][$value];
          }
    if (isset(
$this->iniCachedValues[$main]['include']))
       {
           
$array=$this->iniCachedValues[$main]['include'];
           while (
$f=each($array))
                 {
                    
$this->loadFile($f[1]);
                    if (isset(
$this->iniCachedValues[$f[1]][$section][$value]))
                       {
                          
$v=$this->iniCachedValues[$f[1]][$section][$value];
                          
array_pop($this->iniCachedValues);
                          
array_pop($this->iniCachedSections);
                          
array_pop($this->iniCachedFilenames);
                          return 
$v;
                       }
                 }
       }
    return 
$default;

}

function 
iniSetting($filename$section$variable$default)       // returns a value
   
{
    if (
preg_match("/^[a-zA-Z0-9_]+$/",$section)) $section strtoupper($section);
    if (
preg_match("/^[a-zA-Z0-9_]+$/",$variable)) $variable strtoupper($variable);
    if (empty(
$filename))
        
$filename=$this->filename;
    
$filename strtolower($filename);
    if (isset(
$this->iniCachedValues[$filename][$section][$variable]))
        return 
$this->iniCachedValues[$filename][$section][$variable];
    else
        return 
$default;
   }

function 
info_list($section,$value,$default,$sel='',$output='',$disabled=0) {

//if  $section='',$value='',$default=''  will list all of the element in the file!!
//if  $section,$value  had value, it will list a variable value under the section!!
//if  $section had NOT NULL,$default=''  will list all of the element under the section !!
//if  $default=section  will list all the section name !!
//if  $sel='' and $output='' ,this output will be sent to a "select" variable with named 'id2'
//if  $sel!='' and $output='', this output will be sent to a "select" variable with name $sel
//if  $sel='' and $output='multiple', this output will be sent to a group of variable, it is
//              "checkbox" type ,and the variables named id0--id?, the function return the ? value !!
//and , if  $sel!='' and $output='multiple', this output will be sent to a group of variable, it is
//              "checkbox" type ,and the variables named $sel0--$sel?, the function return the ? value !!

        
if (preg_match("/^[a-zA-Z0-9_]+$/",$section)) $section strtoupper($section);
        if (
preg_match("/^[a-zA-Z0-9_]+$/",$value)) $variable strtoupper($value);
        else 
$variable $value;
        
$arr=$this->value($section,$variable,$default);
        if (
$sel!=''&&$output=='') echo "<select name=\"".$sel."\"".($disabled?" disabled ":"").">";
        elseif (
$sel==''&&$output=='') echo "<select name=\"id2\"".($disabled?" disabled ":"").">";
        if (
is_array($arr))
        {
$ww=0;
         foreach (
$arr as $key => $result)
         {
         if (
is_array($result)&&$default==''&&$section=='')
          foreach (
$result as $ke => $resul)
           {if (
preg_match("/^[a-zA-Z0-9_]+$/",$ke)) $ke strtoupper($ke);
            if (
preg_match("/^[a-zA-Z0-9_]+$/",$resul)) $resul strtoupper($resul);
            if (
$sel!=''&&$output=='multiple')
               {echo 
"<input type=\"checkbox\" name=\"".$sel."[]\" value=\"".$ke."\"".($disabled?" disabled ":"").">";
                echo 
$ke.':'.$resul.'
'
;
           }
            elseif(
$sel==''&&$output=='multiple')
                {echo 
"<input type=\"checkbox\" name=\"id2[]\" value=\"".$ke."\"".($disabled?" disabled ":"").">";
                echo 
$ke.':'.$resul.'
'
;
           }
          else {
           echo 
"<OPTION VALUE=\"".$ke."\">";
    echo 
$ke.':'.$resul;
    echo 
"  </OPTION>";  }
    
$ww++;
    }
         elseif (
is_array($result)&&$section==$key&&$section!='')
          foreach (
$result as $ke => $resul)
           {if (
preg_match("/^[a-zA-Z0-9_]+$/",$ke)) $ke strtoupper($ke);
            if (
preg_match("/^[a-zA-Z0-9_]+$/",$resul)) $resul strtoupper($resul);
            if (
$sel!=''&&$output=='multiple')
               {echo 
"<input type=\"checkbox\" name=\"".$sel."[]\" value=\"".$ke."\"".($disabled?" disabled ":"").">";
                echo 
$ke.':'.$resul.'
'
;
           }
            elseif(
$sel==''&&$output=='multiple')
                {echo 
"<input type=\"checkbox\" name=\"id2[]\" value=\"".$ke."\"".($disabled?" disabled ":"").">";
                echo 
$ke.':'.$resul.'
'
;
           }
          else {
           echo 
"<OPTION VALUE=\"".$ke."\">";
    echo 
$ke.':'.$resul;
    echo 
"  </OPTION>";  }
    
$ww++;
                 }
         elseif (
$default=='section')
          {if (
preg_match("/^[a-zA-Z0-9_]+$/",$key)) $key strtoupper($key);
          if (
$sel!=''&&$output=='multiple')
               {echo 
"<input type=\"checkbox\" name=\"".$sel."[]\" value=\"".$result."\"".($disabled?" disabled ":"").">";
                echo 
$result.'
'
;
           }
            elseif(
$sel==''&&$output=='multiple')
                {echo 
"<input type=\"checkbox\" name=\"id2[]\" value=\"".$result."\"".($disabled?" disabled ":"").">";
                echo 
$result.'
'
;
           }
          else {
          echo 
"<OPTION VALUE=\"".$result."\">";
   echo 
$result;
   echo 
"  </OPTION>";  }
    
$ww++;
          }

  if (
count($arr)==1&&$output=='') {
  echo 
"</select>";
  return 
$ww-1; }
 }
 if (
$output=='') echo "</select>";
 }
        else
 {
 echo 
"</select>";
 return 
$arr;
 }
}

//////////////////////////////////////////////////
function fputsm($files,$string)//写入行函数
{
$string=$string."\r\n";
fputs($files,$string,strlen($string));
}

function 
writeini($filename,$section,$value,$comment)

//  如果 $section 为空,进行添加新行(附加到文件的末尾,不考虑章节)
//  如果 $section 不为空,将进行关键值对应的内容的修改,关键值不存在则什么也不做
//  noting :: if you modified this file , you can't view it now ,as this file only open once.
{
 if (empty(
$filename))
        
$filename=$this->filename;
  
$filename strtolower($filename);
  if (
preg_match("/^[a-zA-Z0-9_]+$/",$value)) $value strtoupper($value);
  if (
preg_match("/^[a-zA-Z0-9_]+$/",$section)) $section strtoupper($section);
  if (
file_exists($filename))
    {
     
$word=file($filename);
     if (
$section=='')
     {
     if (
is_array($this->iniCachedValues[@$filename]))
       foreach (
$this->iniCachedValues[$filename] as $key=>$val)
        if (
is_array($val))
          foreach (
$val as $k=>$v)
           if (
$k==$value)
            {
             
$this->error "关键信息已经存在,不能重复!";
             return 
false;
            }
     
$file=fopen($filename,"ab+");
     if (!
$file)
      return 
false;
     
flock($file,2);
     
$temp=$value.'='.$comment;
     
$count=count($word);
     
$this->fputsm($file,$temp);
       
fclose($file);
     
$this->error "<font color='blue'>信息添加,成功!</font>";
     return 
true;
     }
     else
  if (
$this->iniSetting($filename$section$value,'-f_a_l_s_e-')!='-f_a_l_s_e-')
   {
    
$width=strlen($this->iniSetting($filename$section$value,'false'));
     if (empty(
$filename))
        
$filename=$this->filename;
      
$filename strtolower($filename);
   
$fd=fopen($filename,"rb");
      
$i=0;
      while (
$buffer fgets($fd))
      {
      if (
eregi("\[".$section."\]",$buffer)) $i=1;
      if (
$i&&eregi($value."=",$buffer))
      {
       
$point=ftell($fd);
          while (
fgetc($fd)!='=')
           {
            
$point--;
            
fseek($fd,$point);
           }
           break;
      }
       }
  
fclose($fd);
  
$fd=fopen($filename,"rb+");
  if (!
$fd) return false;
  if (!isset(
$point))
  {
    
$this->error "信息位置不明确!";
    return 
false;
  }
  
flock($fd,2);
         
fseek($fd,$point+1);
         
$aaa=strlen($comment);
         if (
$aaa<$width)
         for (
$as=0;$as<=$width-$aaa;$as++)
         
$comment=$comment.' ';
         if (
$aaa $width)
         {
          
$a=$aaa $width+1;$b='';
          
fseek($fd,$point+1+$width);
          while (!
feof($fd))
          
$b.=fgetc($fd);
        
//echo $b;exit;
          
fseek($fd,$point+1);
          
$comment=$comment.$b;
          }
          
fputs($fd,$comment,strlen($comment));
   
fclose($fd);
   
$this->error "<font color='blue'>信息修改,成功!</font>";
   return 
true;
 }
 else
 {
  
$this->error "修改的信息不存在,请先添加!";
  return 
false;
 }
}
 else
 {
   
$this->error "系统文件丢失!";
   return 
false;
 }
}


function 
delline($filename,$section,$value)
{
//I will get the value from $value, it always put by info_list() with id2 !!!
    
if (empty($filename))
        
$filename=$this->filename;
    
$filename strtolower($filename);
    if (
preg_match("/^[a-zA-Z0-9_]+$/",$value)) $value strtoupper($value);
     if (!
file_exists($filename))
     {
                 
$this->error '数据无法读取,系统文件丢失!('.$filename.')
'
;
                 return 
false;
     }
     else
     {
    if ( 
$value=="" || $this->iniSetting($filename$section$value,'-f_a_l_s_e-') == '-f_a_l_s_e-' )
      { 
        
$this->error '你要删除的信息不存在!';
       return 
false;
      }
       
$lines file($filename);//print_r($lines);
       
$count_number count($lines);
       if (
$count_number 3
       {
        
$this->error '基本信息太少,系统要求保留部分信息以保证系统的运行;若你需要删除当前信息,请首先添加其它信息!!';
        return 
false;
       };
       for (
$i 0$i $count_number$i++)
         {
            
$lines[$i] = trim($lines[$i]);//print_r($lines[$i]);
            
if (preg_match("/[[:space:]]*".$value."[[:space:]]*=/"$lines[$i]))
                    {
$ii=$i;break;  }

         };
       if (!isset(
$ii)) $ii=0;
       
// print_r($lines);echo $ii;exit;
       
for ($i $ii;$i count($lines)-1$i++)
       
$lines[$i]=$lines[$i+1];
      
// print_r($lines);exit;
     
if (!copy($filename$filename.'.bak'))
     {
     
$this->error "数据备份 $filename 失败...
\n"
;
     return 
false;
   }
       
$file=fopen($filename,'wb');
       if (!
$file) return false;
       
flock($file,2);
      for (
$i 0;$i count($lines)-1$i++)
      { 
$lines[$i]=trim($lines[$i]);
        
$this->fputsm($file,$lines[$i]);
       }
     
fclose($file);
     
$this->error "<font color=blue>数据删除 成功!</font>";
     return 
true;
      }
}

function 
newline($filename,$section,$value,$comment,$sec)
{

//if $sec != yes ,this function will add a new line under $section !!
//if $sec == yes ,this function will add a new section and a new line with $value and $comment !!
//if $sec == yes and $value had exist , I will do nothing !!
//the filename and section can not be NULL !!
//the value can not be NULL too!!
    
if (empty($filename))
        
$filename=$this->filename;
    if (
$section=="")
     return 
false;
    
$filename strtolower($filename);
    if (
preg_match("/^[a-zA-Z0-9_]+$/",$value))
     
$value strtoupper($value);
    if (
preg_match("/^[a-zA-Z0-9_]+$/",$section))
     
$section strtoupper($section);
  if ( !
file_exists($filename) )
   {
      
$this->error "数据无法读取,系统文件丢失!( $filename )
"
;
   return 
false
  }
    else
    {
       if (
$value=='')
       {
         
$this->error "不允许关键字为空!";
         return 
false;
       }
       
$lines file($filename);//print_r($lines);
       
for ($i 0$i count($lines); $i++)
       {
            
$lines[$i] = trim($lines[$i]);//print_r($lines[$i]);
            
if (preg_match("/^\[[[:space:]]*".$section."[[:space:]]*\]$/"$lines[$i]))
                    {
$ii=$i;break;  }
       }
      if (
$sec=='yes')
      {
        if (isset(
$this->iniCachedValues[$filename][$section]))
         return 
false;
    
$lines[]='['.$section.']';
       if (
is_array($this->iniCachedValues[$filename]))
         foreach (
$this->iniCachedValues[$filename] as $key=>$val)
         if (
is_array($val))
           foreach (
$val as $k=>$v)
             if (
$k==$value)
              {
               
$this->error "关键字不允许重复!";
               return 
false;
              }
     
$lines[]=$value.'='.$comment;
    }
    else
    {
       
$lines[]="";
       for (
$i count($lines)-1;$i $ii$i--)
       
$lines[$i+1]=$lines[$i];
       
$lines[$ii+1]=$value.'='.$comment;
   };
      if (!
copy($filename$filename.'.bak')) 
      {
       
$this->error "数据备份 $filename 失败...
\n"
;
       return 
false;
   }
      
$file=fopen($filename,'wb');
       if (!
$file) return false;
      
flock($file,2);
      for (
$i 0;$i count($lines); $i++)
      {
       
$lines[$i]=trim($lines[$i]);
        
$this->fputsm($file,$lines[$i]);
      }
     
fclose($file);
     
$this->error "<font color=blue>数据添加 成功!</font>";
     return 
true;
  }
}

}
?>
责任编辑: admin

【最近的搜索】:

上一篇 收藏 评论 打印 收藏夹 发布 下一篇
平均得分 0, 共 0 人评分
1 2 3 4 5 6 7 8 9 10
CopyRight(c) 2007 - 2017 All Rights Reserved  【赣ICP备12001042号】
触屏版 | Archiver 20171118 16:36 | 简介 | 帮助 | 留言 | 关于 | 360网站安全检测平台