上一篇《php的文件系统信息获取》讲了各种关于文件属性、大小的获取,类型的判断等一系列信息获取的内容,这篇kano技术博客继续讲一下关于php文件系统的各种文件处理实战入门操作。
一、基本操作
1. 打开/创建文件fopen
文件的读取、写入等操作都需要一个文件句柄,fopen函数就可以打开文件并返回一个句柄。
语法:fopen(string $filename, string $mode)
其中filename为文件的路径,mode为打开模式,模式有多种选项:{
r 只读方式
r+ 读写方式
w 写入方式,文件如存在可能会覆盖
w+ 读写方式,可能会产生覆盖
a 写入方式(追加),文件如存在新写入的内容将会在后面追加
a+ 读写方式(追加)
}
如果你对一个文件的需求只是读取的话,可以用只读模式打开文件,文件就可以避免被更改。
大家可能会发现上面写的是“打开/创建文件”,尽管有些奇怪,php中创建文件用的也是fopen函数,以写入方式打开一个不存在的文件,文件则会被创建出来(如果文件存在则有可能会被覆盖)。
2. 读取文件 fread
fread函数用于读取文件,读取的是由fopen文件打开的资源
语法:fread(resource $handle, int $length)
handle为fopen打开的资源,length为读取的字节数,读取操作将在到达文件末尾(EOF,即end of file)或读取了length和字节后停止。
读取操作将移动文件指针,所以可以循环读取文件直至读取整个文件,例:
// a.txt内容: abcdefgh $file = fopen('a.txt', 'r'); while(!feof($file)) { $file_content = fread($file, 3); print_r('**' . $file_content . '**<br>'); }
注:feof函数检测文件指针是否已经到了文件的结尾
3. 写入文件 fwrite
fwrite函数用于写入由fopen打开的文件
语法:fwrite(resource $handle, string $string[, int $length])
handle为文件句柄,string为写入的字符串,length可选,如果指定的话则会在写入length字节后停止操作(或者写完了string,遇到其中一种情况则停止操作)。
根据打开模式的不同,可能会在文件后追加内容,或者可能会覆盖文件:
// a和b均为空文件 $file = fopen('a.txt', 'w'); fwrite($file, 'haha'); $file = fopen('b.txt', 'a'); fwrite($file, 'haha');
将上面的代码执行五次,a.txt:
haha
b.txt:
hahahahahahahahahaha
4. 关闭文件 fclose
使用完文件关闭它们是一个良好的习惯,你肯定不想打开的文件占用系统资源。
语法:fclose(resource $handle)
$file = fopen('a.txt', 'w'); fwrite($file, 'haha'); fclose($file);
5. 复制文件 copy
语法:copy(string $source, string $dest)
source为要复制的文件,dest为目标文件
copy('a.txt', 'c.txt');
a.txt被复制为c.txt
注意如果目标文件存在则会被覆盖
6. 重命名/移动文件 rename
语法:rename(string $oldname, string $newname)
rename('a.txt', 'b.txt');
a.txt变成了b.txt
注意移动文件也是rename函数:
rename('a.txt', 'dir1/a.txt');
文件移动到了dir1文件夹下
7. 删除文件unlink
语法:unlink(string $filename)
unlink('c.txt');
8. 截取文件
将文件截取到指定的长度,并不是很常用
ftruncate(resource $handle, int $size)
size为要截取到的字符数
$file = fopen('a.txt', 'a'); ftruncate($file, 15); fclose($file);
二、文件读取
文件的读取是很常用的操作,fread是一个基本的读取方法,但在某些特定的情况下,有一些函数能够更加方便的读取文件。
1. file_get_contents
将整个文件读入一个字符串,如果只是单纯想读取整个文件,这个函数的性能会比较高(且不用open close,很方便)。
$file_str = file_get_contents('a.txt'); print_r($file_str);
2. file
将整个文件读入一个数组中,每行一条。
$file_arr = file('a.txt'); print_r($file_arr);
※ 可以注意到php有时候对函数的命名有些奇怪:fopen用于打开和创建、rename用于重命名和移动、file更是一个如果不解释你想不到它的用途的函数。
本篇内容kano个人博客介绍了文件的打开、读取、写入、关闭、复制、移动等操作。文件的操作如果善用还是很有裨益的。比如某些小型的静态文件无需存入数据库,调试程序的时候简单的读写等等。