一个不错的文本文件操作的php类

发布时间:2020-09-14编辑:脚本学堂
一个不错的对文本文件操作的php类,有详细的注释,供大家学习参考。

代码如下:

复制代码 代码如下:
<?php
class  CtbClass  {
    var  $file;        
    var  $index;    
 
//建立一个文件并写入输入
function  null_write($new)
{
      $f=fopen($this->file,"w");        
      flock($f,LOCK_EX);
      fputs($f,$new);        
      fclose($f);  
}
//  添加数据记录到文件末端
function  add_write($new)  {
 $f=fopen($this->file,"a");        
 flock($f,LOCK_EX);
 fputs($f,$new);
 fclose($f);  
}  
//  配合readfile()的返回一起使用,把一行数据转换为一维数组
function  make_array($line)  {
 $array  =  explode("x0E",$line);
 return  $array;
}
 
//把为一维数组转换一行数据
function  join_array($line)  {
 $array  =  join("x0E",$line);
 return  $array;
}
//  返回数据文件的总行数
function  getlines()  {
 $f=file($this->file);        
 return  count($f);        
}
//  返回下一行的数据记录(备用)
function  next_line()  {
 $this->index=$this->index++;        
 return  $this->get();        
}
 
//  返回上一行的数据记录(备用)
function  prev_line()  {
 $this->index=$this->index--;        
 return  $this->get();        
}    
//  返回当前行的数据记录数据较小
function  get()  {
 $f=fopen($this->file,"r");        
 flock($f,LOCK_SH);
 for($i=0;$i<=$this->index;$i++)  {
  $rec=fgets($f,1024);        
 }
 $line=explode("x0E",$rec);
 fclose($f);
 return  $line;        
}    
//  返回当前行的数据记录数据较大
function  get_big_file()  {
 $f=fopen($this->file,"r");        
 flock($f,LOCK_SH);
 for($i=0;$i<=$this->index;$i++)  {
  $rec=fgets($f,1024*5);        
 }
 $line=explode("x0E",$rec);
 fclose($f);
 return  $line;        
}    
//  打开数据文件---以一维数组返回文件内容
function  read_file()  {
 if  (file_exists($this->file))  {
  $line  =file($this->file);
 }
 return  $line;
}
//  打开数据文件---以二维数组返回文件内容
function  openFile()  {
 if  (file_exists($this->file))  {
  $f  =file($this->file);
  $lines  =  array();
  foreach  ($f  as  $rawline)  {
   $tmpline  =  explode("x0E",$rawline);
   array_push($lines,  $tmpline);
  }
 }
 return  $lines;
}
//  传入一个数组,合并成一行数据,重写整个文件
function  overwrite($array){
 $newline  =  implode("x0E",$array); 
 $f  =  fopen($this->file,"w");
 flock($f,LOCK_EX);
 fputs($f,$newline);
 fclose($f);
}
   
//  添加一行数据记录到文件末端
function  add_line($array,$check_n=1)  {    
 $s=implode("x0E",$array);        
 $f=fopen($this->file,"a");        
 flock($f,LOCK_EX);
 fputs($f,$s);        
 if  ($check_n==1)  fputs($f,"n");        
 fclose($f);  
}        
 
//  插入一行数据记录到文件最前面
function  insert_line($array)  {
 $newfile  =  implode("x0E",$array);
 $f  =  fopen($this->file,"r");
 flock($f,LOCK_SH);
 while  ($line  =  fgets($f,1024))  {
  $newfile  .=  $line;
 }
 fclose($f);
 $f  =  fopen($this->file,"w");
 flock($f,LOCK_EX);
 fputs($f,$newfile);
 fclose($f);
}
 
//  更新所有符合条件的数据记录,适用于每行字节数据较大的情况
function  update($column,$query_string,$update_array)  {
 $update_string  =  implode("x0E",$update_array);      
 $newfile  =  ""; 
 $fc=file($this->file);
 $f=fopen($this->file,"r");
 flock($f,LOCK_SH);
 for  ($i=0;$i<count($fc);$i++)  {
  $list  =  explode("x0E",$fc[$i]);
  if  ($list[$column]  !=  $query_string)  {
   $newfile  =  $newfile.chop($fc[$i])."n";
  }  else  {
   $newfile  =  $newfile.$update_string;
  }
 }
 fclose($f);
 $f=fopen($this->file,"w");
 flock($f,LOCK_EX);
 fputs($f,$newfile);
 fclose($f);
}
 
//  更新所有符合条件的数据记录,适用于每行字节数据较小的情况
function  update2($column,$query_string,$update_array)  {
 $newline  =  implode("x0E",$update_array);      
 $newfile  =  "";
 $f  =  fopen($this->file,"r");
 flock($f,LOCK_SH);
 while  ($line  =  fgets($f,1024))  {
  $tmpLine  =  explode("x0E",$line);
  if  ($tmpLine[$column]  ==  $query_string)  {
   $newfile  .=  $newline;
  }  else  {
   $newfile  .=  $line;
  }
 }
 fclose($f);
 $f  =  fopen($this->file,"w");
 flock($f,LOCK_EX);
 fputs($f,$newfile);
 fclose($f);
}
 
//  删除所有符合条件的数据记录,适用于每行字节数据较大的情况
function  delete($column,$query_string)  {
 $newfile  =  ""; 
 $fc=file($this->file);
 $f=fopen($this->file,"r");
 flock($f,LOCK_SH);
 for  ($i=0;$i<count($fc);$i++)  {
  $list  =  explode("x0E",$fc[$i]);
  if  ($list[$column]  !=  $query_string)  {
   $newfile  =  $newfile.chop($fc[$i])."n";
  }
 }
 fclose($f);
 $f=fopen($this->file,"w");
 flock($f,LOCK_EX);
 fputs($f,$newfile);
 fclose($f);
}        
 
//  删除所有符合条件的数据记录,适用于每行字节数据较小的情况
function  delete2($column,$query_string){    
 $newfile  =  "";
 $f  =  fopen($this->file,"r");
 flock($f,LOCK_SH);
 while  ($line  =  fgets($f,1024))  {
  $tmpLine  =  explode("x0E",$line);
  if  ($tmpLine[$column]  !=  $query_string)  {
   $newfile  .=  $line;
  }
 }
 fclose($f);
 $f  =  fopen($this->file,"w");
 flock($f,LOCK_EX);
 fputs($f,$newfile);
 fclose($f);
}
 
       //取得一个文件里某个字段的最大值
function  get_max_value($column)  {
 $tlines  =  file($this->file);
 for  ($i=0;$i<=count($tlines);$i++)  {
  $line=explode("x0E",$tlines[$i]);
  $get_value[]=$line[$column];
 }
    $get_max_value  =  max($get_value);
 return  $get_max_value;
}
 
 
//  根据数据文件的某个字段是否包含$query_string进行查询,以二维数组返回所有符合条件的数据
function  select($column,  $query_string)  {
 $tline  =  $this->openfile();
 $lines  =  array();
 foreach  ($tline  as  $line)  {
  if  ($line[$column]  ==  $query_string)  {
   array_push($lines,  $line);
  }
 }
 
 return  $lines;
}
 
//  功能与function  select()一样,速度可能略有提升
function  select2($column,  $query_string)  {
 if  (file_exists($this->file))  {
  $tline  =  $this->read_file();
  foreach  ($tline  as  $tmpLine)  {
   $line  =  $this->make_array($tmpLine);
   if  ($line[$column]  ==  $query_string)  {
    $lines[]=$tmpLine;
   }
  }
 }
 
 return  $lines;
}
 
//  根据数据文件的某个字段是否包含$query_string进行查询,以一维数组返回第一个符合条件的数据
function  select_line($column,  $query_string)  {
 $tline  =  $this->read_file();
 foreach  ($tline  as  $tmpLine)  {
  $line  =  $this->make_array($tmpLine);
  if  ($line[$column]  ==  $query_string)  {
      return  $line;
   break;
  }
 }
}
//  select  next/prev  line(next_prev  ==>  1/next,  2/prev)  by  cx
function  select_next_prev_line($column,  $query_string,  $next_prev)  {
 $tline  =  $this->read_file();
 $line_key_end  =  count($tline)  -  1;
 $line_key  =  -1;
 foreach  ($tline  as  $tmpLine)  {
  $line_key++;
  $line  =  $this->make_array($tmpLine);
  if  ($next_prev  ==  1)  {    //  next?
   if  ($line[$column]  ==  $query_string)  {
    if  ($line_key  ==  0)  {
     return  0;
    }  else  {
     $line_key_up  =  $line_key  -  1;
     return  $up_line;
    }
   }  else  {
    $up_line  =  $line;
   }
  }  elseif  ($next_prev  ==  2)  {    //  prev?
   if  ($line[$column]  ==  $query_string)  {
    if  ($line_key  ==  $line_key_end)  {
     return  0;
    }  else  {
     $line_key_down  =  $line_key  +  1;
     break;
    }
   }
  }  else  {
   return  0;
  }
 }
 $down_line  =  $this->make_array($tline[$line_key_down]);
 return  $down_line;
}
?>

您可能感兴趣的文章:
php文件操作类的代码一例
php文件操作的小例子
PHP文件操作方法问答
php中目录与文件操作详解
php目录与文件操作的实例教程