-
-
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;$iindex;$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;$iindex;$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 $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_pren_line(next. $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;
- }
- ?>
-
複製程式碼
| 複製程式碼