文字檔案操作的php類

WBOY
發布: 2016-07-25 08:43:41
原創
860 人瀏覽過
複製程式碼
  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_pren_line(next. $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
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!