1、前言
工作中涉及到数据处理,后台需要用到PHP处理数据,之前没有接触过PHP,借此机会了解了一下PHP,PHP很方便,很灵活,编码很舒服,很喜欢用PHP处理后台数据。今天总结一下php文件操作,主要涉及到文件打开、读、写和关闭。
2、PHP文件操作API
文件创建/打开
- fopen:(创建并)打开一个文件或 URL 地址。
文件写入
- fwrite:向文件写入内容,可安全用于二进制文件 。
- file_put_contents:向文件写入内容,等同依次调用 fopen,fwrite 以及 fclose 函数。
文件读取
- fread:读取文件,可安全用于二进制文件。
- fgets:从文件中读取 一行 数据,并将文件指针指向下一行。
- fgetc:从文件中 逐字 读取文件数据,直到文件结束。
- file_get_contents:把 整个文件 读入一个字符串。
- file:把 整个文件 读入一个数组中,数组中的每个单元都是文件中相应的一行。
检查文件是否存在
- file_exists:检查文件或目录是否存在。
检查文件是否可读写执行
- is_readable:检查文件是否可读。
- is_writable:检查文件是否是否可写入。
- is_executable:检查文件是否可执行。
文件拷贝
- copy:拷贝文件。
文件删除
- unlink:删除文件。
取得文件大小、类型、修改时间信息
文件指针函数
3、测试程序
1 <?php
2
3 const FILE_NAME = "file_info.dat";
4
5 class file_info
6 {
7 public $file_name;
8 public $self_count;
9 public $total_count;
10 }
11
12 //判断文件是否存在
13 if (file_exists(FILE_NAME))
14 {
15 echo "file existed.\n";
16 unlink(FILE_NAME);
17 }
18
19 $fd = NULL;
20
21 $fd = fopen(FILE_NAME, "wb");
22
23 if ($fd == NULL || $fd == false)
24 {
25 echo "Failed to open file.\n";
26 return;
27 }
28
29 $obj = new file_info();
30
31 if ($obj == NULL)
32 {
33 echo "Failed to create object.\n";
34 return;
35 }
36
37 for($i=0; $i<3; $i++)
38 {
39 $temp_1 = $i * 10;
40 $temp_2 = $i * 100;
41 /*
42 $obj->file_name = "file_".$i."\n";
43 $obj->self_count = $temp_1."\n";
44 $obj->total_count = $temp_2."\n";
45 */
46 //构造字符串。filename-0-0\n
47 $row = "file_".$i."-".$temp_1."-".$temp_2."\n";
48 echo "row: ".$row;
49 fwrite($fd, $row);
50 }
51
52 if ($fd)
53 fclose($fd);
54
55 $fd = fopen(FILE_NAME, "rb");
56 if ($fd == false)
57 {
58 echo "Failed to open read file.\n";
59 return;
60 }
61
62 $obj_params = array();
63
64 $i = 0;
65
66 while (!feof($fd))
67 {
68 $tmp_obj = new file_info();
69 $tmp_row = fgets($fd);
70 if ($tmp_row == NULL)
71 break;
72 $pos_1 = strpos($tmp_row, '-',0);
73 $pos_2 = strpos($tmp_row,'-',$pos_1 + 1);
74 $tmp_obj->file_name = substr($tmp_row, 0, $pos_1);
75 $tmp_obj->self_count = substr($tmp_row, $pos_1 + 1, $pos_2- $pos_1 - 1);
76 $tmp_obj->total_count = substr($tmp_row, $pos_2 + 1, strlen($tmp_row) - $pos_2 - 2);
77 $obj_params[$i] = $tmp_obj;
78 $i++;
79 }
80
81 for ($k = 0; $k < count($obj_params); $k++)
82 {
83 echo $obj_params[$k]->file_name."\n";
84 echo $obj_params[$k]->self_count."\n";
85 echo $obj_params[$k]->total_count."\n";
86 }
87
88 if ($fd)
89 fclose($fd);
程序执行结果如下所示: