当前位置:Gxlcms > PHP教程 > 文本文件操作的php类

文本文件操作的php类

时间:2021-07-01 10:21:17 帮助过:24人阅读

  1. var $file;
  2. var $index;
  3. //建立一个文件并写入输入
  4. function null_write($new) {
  5. $f=fopen($this->file,"w");
  6. flock($f,LOCK_EX);
  7. fputs($f,$new);
  8. fclose($f);
  9. }
  10. // 添加数据记录到文件末端
  11. function add_write($new) {
  12. $f=fopen($this->file,"a");
  13. flock($f,LOCK_EX);
  14. fputs($f,$new);
  15. fclose($f);
  16. }
  17. // 配合readfile()的返回一起使用,把一行数据转换为一维数组
  18. function make_array($line) {
  19. $array = explode("\\x0E",$line);
  20. return $array;
  21. }
  22. //把为一维数组转换一行数据
  23. function join_array($line) {
  24. $array = join("\\x0E",$line); return $array;
  25. }
  26. // 返回数据文件的总行数
  27. function getlines() {
  28. $f=file($this->file);
  29. return count($f);
  30. }
  31. // 返回下一行的数据记录(备用)
  32. function next_line() {
  33. $this->index=$this->index++;
  34. return $this->get();
  35. }
  36. // 返回上一行的数据记录(备用)
  37. function prev_line() {
  38. $this->index=$this->index--;
  39. return $this->get();
  40. }
  41. // 返回当前行的数据记录数据较小
  42. function get() {
  43. $f=fopen($this->file,"r");
  44. flock($f,LOCK_SH);
  45. for($i=0;$i<=$this->index;$i++) {
  46. $rec=fgets($f,1024);
  47. }
  48. $line=explode("\\x0E",$rec);
  49. fclose($f);
  50. return $line;
  51. }
  52. // 返回当前行的数据记录数据较大
  53. function get_big_file() {
  54. $f=fopen($this->file,"r");
  55. flock($f,LOCK_SH);
  56. for($i=0;$i<=$this->index;$i++) {
  57. $rec=fgets($f,1024*5);
  58. }
  59. $line=explode("\\x0E",$rec);
  60. fclose($f);
  61. return $line;
  62. }
  63. // 打开数据文件---以一维数组返回文件内容
  64. function read_file() {
  65. if (file_exists($this->file)) {
  66. $line =file($this->file);
  67. }
  68. return $line;
  69. }
  70. // 打开数据文件---以二维数组返回文件内容
  71. function openFile() {
  72. if (file_exists($this->file)) {
  73. $f =file($this->file);
  74. $lines = array();
  75. foreach ($f as $rawline) {
  76. $tmpline = explode("\\x0E",$rawline);
  77. array_push($lines, $tmpline);
  78. }
  79. }
  80. return $lines;
  81. }
  82. // 传入一个数组,合并成一行数据,重写整个文件
  83. function overwrite($array){
  84. $newline = implode("\\x0E",$array);
  85. $f = fopen($this->file,"w");
  86. flock($f,LOCK_EX);
  87. fputs($f,$newline);
  88. fclose($f);
  89. }
  90. // 添加一行数据记录到文件末端
  91. function add_line($array,$check_n=1) {
  92. $s=implode("\\x0E",$array);
  93. $f=fopen($this->file,"a");
  94. flock($f,LOCK_EX);
  95. fputs($f,$s);
  96. if ($check_n==1)
  97. fputs($f,"\\n");
  98. fclose($f);
  99. }
  100. // 插入一行数据记录到文件最前面
  101. function insert_line($array) {
  102. $newfile = implode("\\x0E",$array);
  103. $f = fopen($this->file,"r");
  104. flock($f,LOCK_SH);
  105. while ($line = fgets($f,1024)) {
  106. $newfile .= $line;
  107. }
  108. fclose($f);
  109. $f = fopen($this->file,"w");
  110. flock($f,LOCK_EX);
  111. fputs($f,$newfile);
  112. fclose($f);
  113. }
  114. // 更新所有符合条件的数据记录,适用于每行字节数据较大的情况
  115. function update($column,$query_string,$update_array) {
  116. $update_string = implode("\\x0E",$update_array);
  117. $newfile = "";
  118. $fc=file($this->file);
  119. $f=fopen($this->file,"r");
  120. flock($f,LOCK_SH);
  121. for ($i=0;$i $list = explode("\\x0E",$fc[$i]);
  122. if ($list[$column] != $query_string) {
  123. $newfile = $newfile.chop($fc[$i])."\\n";
  124. } else {
  125. $newfile = $newfile.$update_string;
  126. }
  127. }
  128. fclose($f);
  129. $f=fopen($this->file,"w");
  130. flock($f,LOCK_EX);
  131. fputs($f,$newfile);
  132. fclose($f);
  133. }
  134. // 更新所有符合条件的数据记录,适用于每行字节数据较小的情况
  135. function update2($column,$query_string,$update_array) {
  136. $newline = implode("\\x0E",$update_array);
  137. $newfile = "";
  138. $f = fopen($this->file,"r");
  139. flock($f,LOCK_SH);
  140. while ($line = fgets($f,1024)) {
  141. $tmpLine = explode("\\x0E",$line);
  142. if ($tmpLine[$column] == $query_string) {
  143. $newfile .= $newline;
  144. } else {
  145. $newfile .= $line;
  146. }
  147. }
  148. fclose($f);
  149. $f = fopen($this->file,"w");
  150. flock($f,LOCK_EX);
  151. fputs($f,$newfile);
  152. fclose($f);
  153. }
  154. // 删除所有符合条件的数据记录,适用于每行字节数据较大的情况
  155. function delete($column,$query_string) {
  156. $newfile = "";
  157. $fc=file($this->file);
  158. $f=fopen($this->file,"r");
  159. flock($f,LOCK_SH);
  160. for ($i=0;$i $list = explode("\\x0E",$fc[$i]);
  161. if ($list[$column] != $query_string) {
  162. $newfile = $newfile.chop($fc[$i])."\\n";
  163. }
  164. }
  165. fclose($f);
  166. $f=fopen($this->file,"w");
  167. flock($f,LOCK_EX);
  168. fputs($f,$newfile);
  169. fclose($f);
  170. }
  171. // 删除所有符合条件的数据记录,适用于每行字节数据较小的情况
  172. function delete2($column,$query_string){
  173. $newfile = "";
  174. $f = fopen($this->file,"r");
  175. flock($f,LOCK_SH);
  176. while ($line = fgets($f,1024)) {
  177. $tmpLine = explode("\\x0E",$line);
  178. if ($tmpLine[$column] != $query_string) {
  179. $newfile .= $line;
  180. }
  181. }
  182. fclose($f);
  183. $f = fopen($this->file,"w");
  184. flock($f,LOCK_EX);
  185. fputs($f,$newfile);
  186. fclose($f);
  187. }
  188. //取得一个文件里某个字段的最大值
  189. function get_max_value($column) {
  190. $tlines = file($this->file);
  191. for ($i=0;$i<=count($tlines);$i++) {
  192. $line=explode("\\x0E",$tlines[$i]);
  193. $get_value[]=$line[$column];
  194. }
  195. $get_max_value = max($get_value);
  196. return $get_max_value;
  197. }
  198. // 根据数据文件的某个字段是否包含$query_string进行查询,以二维数组返回所有符合条件的数据
  199. function select($column, $query_string) {
  200. $tline = $this->openfile();
  201. $lines = array();
  202. foreach ($tline as $line) {
  203. if ($line[$column] == $query_string) {
  204. array_push($lines, $line);
  205. }
  206. }
  207. return $lines;
  208. }
  209. // 功能与function select()一样,速度可能略有提升
  210. function select2($column, $query_string) {
  211. if (file_exists($this->file)) {
  212. $tline = $this->read_file();
  213. foreach ($tline as $tmpLine) {
  214. $line = $this->make_array($tmpLine);
  215. if ($line[$column] == $query_string) {
  216. $lines[]=$tmpLine;
  217. }
  218. }
  219. }
  220. return $lines;
  221. }
  222. // 根据数据文件的某个字段是否包含$query_string进行查询,以一维数组返回第一个符合条件的数据
  223. function select_line($column, $query_string) {
  224. $tline = $this->read_file();
  225. foreach ($tline as $tmpLine) {
  226. $line = $this->make_array($tmpLine);
  227. if ($line[$column] == $query_string) {
  228. return $line;
  229. break;
  230. }
  231. }
  232. }
  233. // select next/prev line(next_prev ==> 1/next, 2/prev) by cx
  234. function select_next_prev_line($column, $query_string, $next_prev) {
  235. $tline = $this->read_file();
  236. $line_key_end = count($tline) - 1;
  237. $line_key = -1;
  238. foreach ($tline as $tmpLine) {
  239. $line_key++;
  240. $line = $this->make_array($tmpLine);
  241. if ($next_prev == 1) {
  242. // next?
  243. if ($line[$column] == $query_string) {
  244. if ($line_key == 0) {
  245. return 0;
  246. } else {
  247. $line_key_up = $line_key - 1;
  248. return $up_line;
  249. }
  250. } else {
  251. $up_line = $line;
  252. }
  253. } elseif ($next_prev == 2) {
  254. // prev?
  255. if ($line[$column] == $query_string) {
  256. if ($line_key == $line_key_end) {
  257. return 0;
  258. } else {
  259. $line_key_down = $line_key + 1;
  260. break;
  261. }
  262. }
  263. } else {
  264. return 0;
  265. }
  266. }
  267. $down_line = $this->make_array($tline[$line_key_down]);
  268. return $down_line;
  269. }
  270. ?>

文本文件, php

人气教程排行