-
- 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 $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 $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;
- }
- ?>
-
|