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