欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

文本文件操作的php类

程序员文章站 2024-01-30 12:37:10
...
  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;$iindex;$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;$iindex;$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 $line=explode("\\x0E",$tlines[$i]);
  192. $get_value[]=$line[$column];
  193. }
  194. $get_max_value = max($get_value);
  195. return $get_max_value;
  196. }
  197. // 根据数据文件的某个字段是否包含$query_string进行查询,以二维数组返回所有符合条件的数据
  198. function select($column, $query_string) {
  199. $tline = $this->openfile();
  200. $lines = array();
  201. foreach ($tline as $line) {
  202. if ($line[$column] == $query_string) {
  203. array_push($lines, $line);
  204. }
  205. }
  206. return $lines;
  207. }
  208. // 功能与function select()一样,速度可能略有提升
  209. function select2($column, $query_string) {
  210. if (file_exists($this->file)) {
  211. $tline = $this->read_file();
  212. foreach ($tline as $tmpLine) {
  213. $line = $this->make_array($tmpLine);
  214. if ($line[$column] == $query_string) {
  215. $lines[]=$tmpLine;
  216. }
  217. }
  218. }
  219. return $lines;
  220. }
  221. // 根据数据文件的某个字段是否包含$query_string进行查询,以一维数组返回第一个符合条件的数据
  222. function select_line($column, $query_string) {
  223. $tline = $this->read_file();
  224. foreach ($tline as $tmpLine) {
  225. $line = $this->make_array($tmpLine);
  226. if ($line[$column] == $query_string) {
  227. return $line;
  228. break;
  229. }
  230. }
  231. }
  232. // select next/prev line(next_prev ==> 1/next, 2/prev) by cx
  233. function select_next_prev_line($column, $query_string, $next_prev) {
  234. $tline = $this->read_file();
  235. $line_key_end = count($tline) - 1;
  236. $line_key = -1;
  237. foreach ($tline as $tmpLine) {
  238. $line_key++;
  239. $line = $this->make_array($tmpLine);
  240. if ($next_prev == 1) {
  241. // next?
  242. if ($line[$column] == $query_string) {
  243. if ($line_key == 0) {
  244. return 0;
  245. } else {
  246. $line_key_up = $line_key - 1;
  247. return $up_line;
  248. }
  249. } else {
  250. $up_line = $line;
  251. }
  252. } elseif ($next_prev == 2) {
  253. // prev?
  254. if ($line[$column] == $query_string) {
  255. if ($line_key == $line_key_end) {
  256. return 0;
  257. } else {
  258. $line_key_down = $line_key + 1;
  259. break;
  260. }
  261. }
  262. } else {
  263. return 0;
  264. }
  265. }
  266. $down_line = $this->make_array($tline[$line_key_down]);
  267. return $down_line;
  268. }
  269. ?>
复制代码

文本文件, php