- 论坛徽章:
- 0
|
我晕了。请各位帮忙看看这几行代码。
- <?php
- class txt_data{
- var $data = "data.txt"; //数据文件。
- var $data_dir = "/data"; //数据文件目录。
- var $_err = 0;
- var $_err_msg = "";
- var $_result = ""; //数据游标.
- var $_separator = " "; //数据界定符。
- var $_array_separator = " "; //数据界定符。
- var $_data_line = 0; //数据总行数。
- var $_selected = ""; //临时数据。
- var $_tmp = ""; //测试用变量。
- /** 清除错误标志 */
- function clear_err(){
- $this->;_err = 0;
- $this->;_err_msg = "";
- }
- /** 选择关键字列的数据
- * $id 是行的关键字。
- * $file 是数据文件的绝对目录。
- * $value_name 是列的关键字。
- * 最后返回寻找到列的内容。
- * 如果失败则置错误标志为 1。同时返回 FALSE
- */
- function select_value($id,$value_name){
- $this->;clear_err();
- $this->;read_data($id);
- if($this->;_err == 0){
- if(is_array($this->;_result)){
- foreach($this->;_result as $key =>; $val){
- $tmp_arr = explode("=",$val);
- if($tmp_arr[0] == $value_name){
- $this->;_selected = $tmp_arr[1];
- return $this->;_selected;
- }
- }
- }else{
- $this->;_err = 1;
- $this->;_err_msg = $value_name."列不存在!";
- return false;
- }
- }else{
- return false;
- }
- }
- /** 返回错误信息 */
- function get_err_msg(){
- return $this->;_err_msg;
- }
- /** 检查数据文件是否 存在,并确定可读写。
- * $file 是数据文件的绝对目录。
- * 如果成功则返回 清除错误标志;
- * 失败则置错误标志和信息。
- */
- function check_data_stat($file){
- $this->;clear_err();
- clearstatcache();
- if(file_exists($file)){
- if(is_readable($file)){
- if(is_writeable($file)){
- $this->;clear_err();
- }
- }
- }else{
- $this->;_err = 1;
- $this->;_err_msg = "文件权限不够,请确定数据文件可读写!";
- //return false;
- }
- }
- /** 计算数据列的总数据。
- * 没有返回值。
- * $file 是数据文件的绝对目录。
- * 成功则设置 _data_line 为数据列数量。
- * 失败无任何操作。
- */
- function count_data_line(){
- $this->;clear_err();
- $file=$_SERVER['DOCUMENT_ROOT'].$this->;data_dir."/".$this->;data;
- $this->;check_data_stat($file);
- if($this->;_err == 0){
- $fp = fopen($file,"rb");
- rewind($fp);
- $tmp_int = 0;
- while($line = fgets($fp)){
- $tmp_int++;
- }
- $this->;_data_line = $tmp_int;
- return true;
- fclose($fp);
- }else{
- return false;
- }
- }
- /** 读取数据内容。
- * $id 是数据行的键值。
- * $file 是数据文件的绝对目录。
- * 成功则返回true。
- * 失败返回 false;
- * 如果返回值为空,则说明没有对应数据。
- */
- function read_data($id){
- $this->;clear_err();
- $file=$_SERVER['DOCUMENT_ROOT'].$this->;data_dir."/".$this->;data;
- $this->;check_data_stat($file);
- if($this->;_err == 0){
- $fp = fopen($file,"rb");
- rewind($fp);
- while($line = fgets($fp)){
- $data = explode($this->;_separator,trim($line));
- if(intval(trim($data[0])) == intval($id)){
- $this->;_result = $data;
- break;
- }else{
- $this->;_result = "";
- }
- }
- return true;
- fclose($fp);
- }else{
- $this->;_err =1;
- $this->;_err_msg = "数据文件读取错误。"; // ?这里逻辑比较混乱。
- return false;
- }
- }
- /** 插入新数据
- * $file 是数据文件的绝对目录。
- * $array_data 为欲插入的数据内容。形式必须为数组或字符串。
- * 成功返回保存的数据的列ID。
- * 失败置错误标志和信息。同时返回FALSE;
- */
- function insert_data($array_data){
- $this->;clear_err(); //清除错误标示.
- $file=$_SERVER['DOCUMENT_ROOT'].$this->;data_dir."/".$this->;data; //数据文件绝对地址。
- $this->;check_data_stat($file); //数据文件是否可读写。
- if($this->;_err == 0){ //如果没有错误。
- $this->;count_data_line(); //得到当前行标。
- $data_id=$this->;_data_line + 1; //当前行标加1作为下一行行标
- $fp=fopen($file,'ab'); //以写方式打开数据文件,忽略结束符。
- if(is_array($array_data)){ //如果参数为数组。
- $data_line = implode($this->;_separator,$array_data); //分解数组为字符串。
- $data_line .= "\r\n"; //加上数据行结束符
- $data_line = $data_id.$this->;_separator.$data_line; //得到写入数据。
- if(!fwrite($fp,$data_line,strlen($data_line))){ //如果写入数据失败。
- $this->;_err = 1; //置错误标示。
- $this->;_err_msg ="数据保存错误!"; //置错误信息。
- return false; //返回错误。
- }else{ //如果写入成功。
- return $data_id; //返回行标。
- }
- }elseif(is_string($array_data)){ //如果参数为字符串形式。
- $data_line = eregi_replace(",",$this->;_separator,$array_data); //替换字符串分割符为数据文件分割符。
- $data_line = $data_id.$this->;_separator.$data_line."\r\n"; //得到写入数据。
- if(!fwrite($fp,$data_line,strlen($data_line))){ //如果写入数据失败
- $this->;_err = 1; //置错误标志
- $this->;_err_msg ="数据保存错误!"; //置错误信息。
- return false; //返回错误。
- }else{ //如果写入成功
- return $data_id; //返回写入成功行标
- }
- }
- fclose($fp); //关部文件。
- }else{ //如果文件不可以读写。
- return false; //返回错误。
- }
- }
- }
- ?>;
复制代码 |
|