php操作文本数据库,php文本数据库操作类 代码

class TxtDb{

var $dataBase;

var $dataRows;

var $dataCache;

var $dataError;

function TxtDb($dataBase = "data"){

$this->dataBase = $dataBase;

$this->dataCache = "cache";

$this->dataError = null;

}

function insert($tableName,$args){

if(!$fp = fopen($this->dataBase."/".$tableName.".tdb","r+")){

$this->dataError = "数据表打开失败";

return false;

}else if(!strstr(fread($fp,20),"TDB")){

$this->dataError = "数据库文件被破坏或者格式错误";

fclose($fp);

return false;

}else{

fseek($fp,20,SEEK_CUR);

for($i=0,$result="1",$length=0,$tmp=explode(';',trim(fread($fp,160)));$i

list($key,$value) = explode(':',$tmp[$i]);

$length += $value;

if(!array_key_exists($key,$args)){

$result .= str_pad("",$value);

}else if(strlen($args[$key])>$value){

$this->dataError = "用户字段太长 '$key' 错误";

fclose($fp);

return false;

}else{

$result .= str_pad($args[$key],$value);

}

}

fseek($fp,0,SEEK_END);

fwrite($fp,$result);

fclose($fp);

return true;

}

}

function update($tableName,$rows,$args){

if(!$fp = fopen($this->dataBase."/".$tableName.".tdb","r+")){

$this->dataError = "数据表打开失败";

return false;

}else if(!strstr(fread($fp,20),"TDB")){

$this->dataError = "数据库文件被破坏或者格式错误";

fclose($fp);

return false;

}else{

fseek($fp,20,SEEK_CUR);

for($i=0,$result="1",$length=0,$tmp=explode(';',trim(fread($fp,160)));$i

list($key,$value) = explode(':',$tmp[$i]);

$length += $value;

if(!array_key_exists($key,$args)){

$result .= str_pad("",$value);

}else if(strlen($args[$key])>$value){

$this->dataError = "用户字段太长 '$key' 错误";

fclose($fp);

return false;

}else{

$result .= str_pad($args[$key],$value);

}

}

if(fseek($fp,$rows*strlen($result)+200,SEEK_SET) == 0){

fwrite($fp,$result);

fclose($fp);

return true;

}else{

fclose($fp);

$this->dataError = "记录更新失败,数据定位失败";

return false;

}

}

}

function select($table,$rows){

if(!$fp = fopen($this->dataBase."/".$tableName.".tdb","r")){

$this->dataError = "数据表打开失败";

return false;

}else if(!strstr(fread($fp,20),"TDB")){

$this->dataError = "数据库文件被破坏或者格式错误";

fclose($fp);

return false;

}else{

fseek($fp,20,SEEK_CUR);

for($i=0,$result="1",$length=0,$head=array(),$tmp=explode(';',trim(fread($fp,160)));$i

list($key,$value) = explode(':',$tmp[$i]);

$head[$key] = $value;

$length += $value;

}

if(fseek($fp,$rows*($length+1)+200,SEEK_SET) == 0){

$result = array('rows'=>$rows);

foreach($head AS $key=>$value)$result[$key] = fread($fp,$value);

fclose($fp);

return $result;

}else{

fclose($fp);

$this->dataError = "记录更新失败,数据定位失败";

return false;

}

}

}

function getAll($tableName,$query,$order = "0,desc",$limit = "0,100000"){

$cacheFile = $this->dataBase."/".$this->dataCache."/".md5("$tableName:$query:$order").".tdc";

list($order,$ordertype,$limit,$end) = explode(",",$order.','.$limit);

if(!$fp = fopen($this->dataBase."/".$tableName.".tdb","r")){

$this->dataError = "数据表打开失败";

return false;

}else if(!strstr(fread($fp,20),"TDB")){

$this->dataError = "数据库文件被破坏或者格式错误";

fclose($fp);

return false;

}else{

fseek($fp,20,SEEK_CUR);

for($i=0,$length=0,$result="1",$head=array(),$tmp=explode(';',trim(fread($fp,160)));$i

list($key,$value) = explode(':',$tmp[$i]);

$head[$key] = $value;

$length += $value;

}

if(@filemtime($cacheFile) > time()-1000){

if($fp1 = fopen($cacheFile,"r")){

$result = unpack("Vrows",fread($fp1,4));

$this->dataRows = $result['rows'];

if(fseek($fp1,($limit+1)*4,SEEK_SET) == 0){

$result = unpack("V*",fread($fp1,$end*4));

fclose($fp1);

}else{

fclose($fp);

fclose($fp1);

return false;

}

}else{

$this->dataError = "缓存文件打开错误";

fclose($fp);

fclose($fp1);

return false;

}

}else if(fseek($fp,200,SEEK_SET) == 0){

$i = 0;

foreach($head AS $key=>$value){

$query = str_replace("@$key","@".$i++,$query);

}

$result = array();

preg_match_all('/@(\d+)/si',$query,$tmp);

$tmp[1][]= $order;

$query = preg_replace('/@(\d+)/si','$row[\1]',$query);

$execute = '$i=0;while(true){if(strlen($type=fread($fp,1))!=1)break;$row=array(\'rows\'=>$i++);';

for($i=0,$id=empty($tmp[1])?100:max($tmp[1]),$sum=0,$values=array_values($head);$i

$sum += $values[$i];

$execute .= '$row[]=trim(fread($fp,'.$values[$i].'));';

if($id <= $i){

$execute .= 'fseek($fp,'.($length-$sum).',SEEK_CUR);';

break;

}

}

eval($execute.'if($type==\'1\' && '.$query.'){$result[] = array($i-1,$row[$order]);}}');

usort($result,

create_function('$a,$b',$ordertype=="desc"?'return strcmp($a[1],$b[1]);':'return strcmp($b[1],$a[1]);'));

for($i=0,$tmp='';$i

if($fp1 = fopen($cacheFile,"w")){

fwrite($fp1,pack("V",($this->dataRows = strlen($tmp)/4)).$tmp);

fclose($fp1);

}

$result = unpack("V*",substr($tmp,$limit*4,$end*4));

}else{

fclose($fp);

$this->dataError = "记录查询失败,数据定位失败";

return false;

}

$tmp = $row = array();

foreach($result as $rows){

fseek($fp,$rows*($length+1)+201,SEEK_SET);

foreach($head AS $key=>$value){

$row[$key] = trim(fread($fp,$value));

}

$tmp[] = $row;

}

fclose($fp);

return $tmp;

}

}

function remove($tableName,$query){

if(!$fp = fopen($this->dataBase."/".$tableName.".tdb","r")){

$this->dataError = "数据表打开失败";

return false;

}else if(!strstr(fread($fp,20),"TDB")){

$this->dataError = "数据库文件被破坏或者格式错误";

fclose($fp);

return false;

}else{

fseek($fp,20,SEEK_CUR);

for($i=0,$length=0,$result="1",$head=array(),$tmp=explode(';',trim(fread($fp,160)));$i

list($key,$value) = explode(':',$tmp[$i]);

$head[$key] = $value;

$length += $value;

}

$i = 0;

foreach($head AS $key=>$value){

$query = str_replace("@$key","@".$i++,$query);

}

$result = array();

preg_match_all('/@(\d+)/si',$query,$tmp);

$tmp[1][]= $order;

$query = preg_replace('/@(\d+)/si','$row[\1]',$query);

$execute = '$i=0;while(true){if(strlen($type=fread($fp,1))!=1)break;$row=array(\'rows\'=>$i++);';

for($i=$rows=0,$id=empty($tmp[1])?100:max($tmp[1]),$sum=0,$values=array_values($head);$i

$sum += $values[$i];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、密码使用DES算法加密,无法逆向破解,使聊天更安全。 2、自动跟踪私聊状态,自动切换和对象是否私聊。 3、自定义头像功能。 4、滚屏方式。使用PHP中先进的流技术,使得显示流畅,达到实时聊天的效果。 5、方便实用的便签。(可随时让您记下聊友的信息等,以后随时可以查看) 6、内置简洁的论坛,方便大家交流。 7、功能强大的个性设置(进入欢迎语,各个窗口的背景与说话颜色)。不用每次进入时设置。 8、可购买和互相赠送礼品与送金钱。 9、多种个人属性设置(经验、魅力、体力、威望、等级、金钱等)设置合理。 10、公式:经验>1000=魅力+30、魅力>1000=体力+30、体力>1000=威望+30、威望>1000=等级+1 每发言一句,经验+1,在聊天室里体力-1 别人向你发言一句,魅力+1 定时开帮会,人气最高三人刚分别:威望+30,金钱+30000、威望+20,金钱+20000、威望+10,金钱+10000 (注:此功能还没有与网友们一起拟定) 在聊天室里每半分钟,金钱+1、在聊天室里体力恢复2点 11、可自定义动作(以 // 开头, 可替换成对方,如输入://知道不是很笨的了。不能连续使用,如: %,且替换次数有限;也可以在现有的动作后面加上一个以上空格后再接上您的话)。 12、飞鸽传书功能,直接与对方联系(但只能用一般格式,不能有动作表情命令等)。 13、可分屏显示,聊天更轻松。 14、自动防断线,也可手工断线重连(使用[辅助功能]),断线后不用退出聊天室。 15、大众聊天室功能(密谈,屏蔽,表情,动作,贴图,且表情与动作分为非善意与善意)。 16、使用文本数据库,穷人有福了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值