⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 txtdb.inc.php

📁 M-logger v0.3.1 中文版
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?/*** Title:	Text DataBase Library* File:	./class/TxtDb.php* Author: 	episome <webmaster@3ants.org>;milkliker <milkliker@vip.sina.com>* Website:	http://3ants.org/txtdb* Version:	0.2.1 (DE)* Last changed:22:07 04-8-11* */define('DBSEPARATOR', '|'); #数据分隔符号define('DBHEADER', "<?die('Access Denied!');?>");class txtdb{//START CLASSvar $auto_name = 'id'; 		#auto id name 自动ID的字段名var $begin; 			#begin time 类开始操作时间var $exten = ".txtdb.php"; 	#exten 扩展名var $fp = array(); 		#文件指针var $db = array();		#data base info 数据库库信息数组var $tbls = array(); 		# tables 被打开的表群/*** Class constructor.(类构造)*/function txtdb($path = null, $cache_dir = 'cache/'){$this -> begin = array_sum(split(" ", microtime()));if(!is_null($path)){$this -> connect($path, $cache_dir);}}//+|START|[table operation]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/*** Create table(新建表)*/function create($table, $fields){if(!$this -> db['connect']){trigger_error('Unknow txtDb Server!');return false;}if(!$this -> _check($table)){trigger_error('Table name [' . $table . '] not allowed!', E_USER_WARNING);return false;}if(is_string($fields)){$fields = explode(",", $fields);}$fields = array_unique($fields);if(!is_array($fields)){trigger_error('Fields not set!', E_USER_WARNING);return false;}if(!$this -> _check($fields)){trigger_error('Fields name not allowed!', E_USER_WARNING);return false;}if($this -> exists($table)){trigger_error('Table [' . $table . '] already exists', E_USER_WARNING);return false;}$this -> tbls[$table]['path'] = $this -> db['path'] . $table . $this -> exten;if(in_array($this -> auto_name, $fields)){$this -> tbls[$table]['auto_id'] = '1';}else{$this -> tbls[$table]['auto_id'] = '0';}$this -> tbls[$table]['fields'] = $fields;$this -> tbls[$table]['max_len'] = '0';$this -> tbls[$table]['rows'] = '0';$this -> tbls[$table]['DBHEADER'] = DBHEADER . DBSEPARATOR . $this -> tbls[$table]['rows'] . DBSEPARATOR . $this -> tbls[$table]['auto_id'] . DBSEPARATOR . $this -> tbls[$table]['max_len'] . DBSEPARATOR . @implode(DBSEPARATOR, $this -> tbls[$table]['fields']) . "\n";if(!$this -> _write($this -> tbls[$table]['DBHEADER'], $table)){trigger_error ("Can't write to table [" . $table . "].", E_USER_ERROR);unset($this -> tbls[$table]);return false;}$this -> tbls[$table]['open'] = true;$this -> tbls[$table]['writeable'] = true;$this -> tbls[$table]['cols'] = count($this -> tbls[$table]['fields']);$this -> tbls[$table]['records'] = array();$this -> tbls[$table]['values'] = array();$this -> db['tbl'] = $table;$this -> db['opens']++;return true;}/*** Save table (存储表)*/function save($table = null){if(is_null($table)) $table = $this -> db['tbl'];if(!$this -> tbls[$table]['open']) $this -> open($table, true);elseif(!$this -> tbls[$table]['writeable']) $this -> _make_writeable($table);$DBHEADER = $this -> tbls[$table]['fields'];array_unshift($DBHEADER, DBHEADER, $this -> tbls[$table]['rows'], $this -> tbls[$table]['auto_id'], $this -> tbls[$table]['max_len']);$this -> tbls[$table]['DBHEADER'] = @implode(DBSEPARATOR, $DBHEADER) . "\n";$data = $this -> tbls[$table]['DBHEADER'] . @implode('', $this -> tbls[$table]['records']);$data = str_replace("\r", '', $data);if(!$this -> _write($data, $table)){trigger_error ("Can't write to table [" . $table . "].", E_USER_ERROR);return false;}return true;}/*** Drop table (删除表)*/function drop($table = null){if(is_null($table)) $table = $this -> db['tbl'];if($this -> tbls[$table]['open']){$file = $this -> tbls[$table]['path'];$this -> close($table);}else{$file = $this -> db['path'] . $table . $this -> exten;}return @unlink($file);}//-|END|[table operation]--------------------------------------------------------------------//+|START|[records operation]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/*** Append record(添加记录)*/function append($values, $id = null, $table = null){if(!is_array($values)) return false;if(is_null($table)) $table = $this -> db['tbl'];if(!$this -> tbls[$table]['open']) $this -> open($table, true);elseif(!$this -> tbls[$table]['writeable']) $this -> _make_writeable($table);if(is_null($id) or $id > $this -> tbls[$table]['rows']){$id = $this -> tbls[$table]['rows'];}elseif($id < 0){$id = 0;}foreach($this -> tbls[$table]['fields'] as $field){if($field == $this -> auto_name){$values[$field] = $this -> tbls[$table]['auto_id'];$this -> tbls[$table]['auto_id']++;}$_values[] = $values[$field];}$this -> _filter_nr($_values);$_line = @implode(DBSEPARATOR, $_values) . "\n";$this -> tbls[$table]['max_len'] = max($this -> tbls[$table]['max_len'], strlen($_line) + 10);$_DBHEADER = @array_slice($this -> tbls[$table]['records'], 0, $id);$_center = array($_line);$_footer = @array_slice($this -> tbls[$table]['records'], $id);$this -> tbls[$table]['records'] = @array_merge($_DBHEADER, $_center, $_footer);$this -> tbls[$table]['rows']++;unset($this -> tbls[$table]['values']);}/*** Get,Search,Sort record(s)(搜索,查询记录行)*/function get($expression, $whole = false, $limit = null, $table = null, $cache = false, $sortby = null, $flags = 'asc'){if(is_null($table)) $table = $this -> db['tbl'];if((preg_match("/^\d+(\,\d+)*$/", $expression)) and $expression !== true){if($cache){$cacheName = $table.'-get-'.$expression.'-'.$limit.'-'.(string)$whole.'-'.$sortby.'-'.$flags;$this -> _filter_file_name($cacheName);if($this -> _get_cache_mtime($cacheName) > $this -> get_table_mtime($table)){return $this -> _get_cache($cacheName);}}if(!$this -> tbls[$table]['open']) $this -> open($table,$whole);//faster?$rows = array_unique(explode(',', $expression));foreach($rows as $i => $v){if($v < 0 or $v >= $this -> tbls[$table]['rows']) unset($rows[$i]);}if(!is_array($rows)) return false;if($this -> tbls[$table]['writeable']){foreach($rows as $id){if(!is_array($this -> tbls[$table]['values'][$id])) $this -> _build_values($id, $table);$target[$id] = $this -> tbls[$table]['values'][$id];}}else{$end = @max($rows);for($id = 0;$id <= $end;$id++){if(empty($this -> tbls[$table]['records'][$id])) $this -> tbls[$table]['records'][$id] = fgets($this -> fp[$table], $this -> tbls[$table]['max_len']);if(!is_array($this -> tbls[$table]['values'][$id])){if(!in_array($id, $rows)) continue;$this -> _build_values($id, $table);}$target[$id] = $this -> tbls[$table]['values'][$id];}}}else{if($cache){$this -> _filter_nr($expression);$cacheName =$table.'-select-'.$expression.'-'.$limit.'-'.(string)$whole.'-'.$sortby.'-'.$flags;$this -> _filter_file_name($cacheName);if($this -> _get_cache_mtime($cacheName) > $this -> get_table_mtime($table)){return $this -> _get_cache($cacheName);}}if(!$this -> tbls[$table]['open']) $this -> open($table,$whole);//faster?$limit = $this -> _get_limit($limit, $table);$Fexp = $expression;$this -> _filter_nr($Fexp);for($id = 0;$id <= $limit['end'];$id++){if(!is_array($this -> tbls[$table]['values'][$id])){if(!$this -> tbls[$table]['writeable']){$this -> tbls[$table]['records'][$id] = @fgets($this -> fp[$table], $this -> tbls[$table]['max_len']);if($id < $limit['begin']) continue;}$this -> _build_values($id, $table);}if($expression !== true){$exp = $Fexp;foreach($this -> tbls[$table]['fields'] as $field){$exp = eregi_replace("{" . $field . "}", $this -> tbls[$table]['values'][$id][$field], $exp);}@eval("\$result=($exp);");}else{$result = true;}if($result!==false){if(!$whole){$target[id] = $id;$target[value] = $this -> tbls[$table]['values'][$id];break;}else{$target[$id] = $this -> tbls[$table]['values'][$id];}}}}if(!is_null($sortby) and in_array($sortby, $this -> tbls[$table]['fields'])){$target = $this -> _sort($target, $sortby, $flags);}$target = $this -> _unfilter_nr($target);if($cache) $this -> _set_cache($target, $cacheName);return $target;}/*** Replace value(s)(修改字段值)*/function change($values, $expression, $whole = false, $limit = null, $table = null){if(!is_array($values)) return false;if(is_null($table)) $table = $this -> db['tbl'];if(!$this -> tbls[$table]['open']) $this -> open($table, true);elseif(!$this -> tbls[$table]['writeable']) $this -> _make_writeable($table);unset($values[$this -> auto_name]);$num=0;if(is_int($expression)){$id = $expression;if($id < 0 or $id >= $this -> tbls[$table]['rows']) return false;if(!isset($this -> tbls[$table]['values'][$id])) $this -> _build_values($id, $table);foreach($values as $feild => $value){if(in_array($feild, $this -> tbls[$table]['fields'])){$this -> tbls[$table]['values'][$id][$feild] = $this -> _filter_nr($value);}}$num=1;$this -> tbls[$table]['records'][$id] = implode(DBSEPARATOR, $this -> tbls[$table]['values'][$id]) . "\n";$this -> tbls[$table]['max_len'] = max($this -> tbls[$table]['max_len'], strlen($this -> tbls[$table]['records'][$id]) + 10);}else{$this -> _filter_nr($expression);$limit = $this -> _get_limit($limit, $table);for($id = $limit['begin'];$id <= $limit['end'];$id++){$exp = $expression;if(!isset($this -> tbls[$table]['values'][$id])) $this -> _build_values($id, $table);foreach($this -> tbls[$table]['fields'] as $field){$exp = eregi_replace("{" . $field . "}", $this -> tbls[$table]['values'][$id][$field], $exp);}$result = null;@eval("\$result=($exp);");if($result!==false){foreach($values as $feild => $value){if(in_array($feild, $this -> tbls[$table]['fields'])){$this -> tbls[$table]['values'][$id][$feild] = $this -> _filter_nr($value);}}$this -> tbls[$table]['records'][$id] = implode(DBSEPARATOR, $this -> tbls[$table]['values'][$id]) . "\n";$this -> tbls[$table]['max_len'] = max($this -> tbls[$table]['max_len'], strlen($this -> tbls[$table]['records'][$id]) + 10);$num++;if(!$whole) break;}}}return $num;}/*** Delete record(s)(删除记录行)*/function del($expression, $whole = false, $limit = null, $table = null){if(is_null($table)) $table = $this -> db['tbl'];if(!$this -> tbls[$table]['open']) $this -> open($table, true);elseif(!$this -> tbls[$table]['writeable']) $this -> _make_writeable($table);$num=0;if(is_int($expression)){$id = $expression;if($id < 0 or is_null($this -> tbls[$table]['records'][$id])) return false;unset($this -> tbls[$table]['records'][$id]);unset($this -> tbls[$table]['values'][$id]);$this -> tbls[$table]['rows']--;$num=1;}else{$this -> _filter_nr($expression);$limit = $this -> _get_limit($limit, $table);for($id = $limit['begin'];$id <= $limit['end'];$id++){$exp = $expression;if(!isset($this -> tbls[$table]['values'][$id])) $this -> _build_values($id, $table);foreach($this -> tbls[$table]['fields'] as $field){$exp = eregi_replace("{" . $field . "}", $this -> tbls[$table]['values'][$id][$field], $exp);}$result = null;@eval("\$result=($exp);");if($result!==false){unset($this -> tbls[$table]['records'][$id]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -