PHP文件目录处理技术,需要掌握熟知以下几点:
一、基本的文件处理技术
1、打开一个文件
2、读取文件内容
3、向文件中写入数据
4、关闭打开的文件资源
二、目录操作技术
三、文件上传技术
文件操作是通过PHP内置函数完成的,作为初学者可能觉得文件操作比较难掌握,搞不清一些参数配置,总觉得文件操作带有一层神秘感。之所以会出现这样的情况,是因为你没有真正去操作,总结操作的思路。
1、打开文件
fopen() 函数打开文件或者 URL。如果打开失败,本函数返回 FALSE。
语法:
fopen(filename,mode,include_path,context)
参数说明:
参数
描述
filename
必需。规定要打开的文件或 URL。
mode
必需。规定要求到该文件/流的访问类型。可能的值见下表。
include_path
可选。如果也需要在 include_path 中检索文件的话,可以将该参数设为 1 或 TRUE。
context
可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。
mode为打开文件的方式,这个参数比较重要,相对应的可选值也比较多,需要熟悉掌握:
参数
说明
"r"
只读方式打开,将文件指针指向文件头。
"r+"
读写方式打开,将文件指针指向文件头。
"w"
写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"w+"
读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"a"
写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"a+"
读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"x"
创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。
这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
"x+"
创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。
这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
2、读取文件内容
文件打开后就可以进行读取和写入操作了,PHP读取文件数据函数有4个,分别用来读取一个字符、读取一行字符、读取任意长度字符串、读取整个文件数据。
a、fgetc()函数,读取一个字符。
fgetc() 函数从文件指针中读取一个字符。
语法:
fgetc(file)
file 必需。规定要检查的文件,即fopen打开的一个文件资源。
返回一个包含有一个字符的字符串,该字符从 file 指向的文件中得到。碰到 EOF 则返回 false。文件指针必须有效,并且必须指向一个由 fopen() 或 fsockopen() 成功打开(但还没有被 fclose() 关闭)的文件。
如果该文件包含多个字符串,多次使用该函数能够按顺序取出剩下的字符,也就是说,fgetc函数取出一个字符后,文件资源指针会自动移到下一个。
b、fgets()/fgetss()函数读取一行字符
语法:
fgets(file[,length])
参数
描述
file
必需。规定要读取的文件。
length
可选。规定要读取的字节数。默认是 1024 字节。
从 file 指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(要看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。若失败,则返回 false。
fgetss()函数语法和上面一样,两者的区别就是:fgets()函数读取的数据是原样输出的,而fgetss()函数读取的数据则会去掉数据中存在的html标签,以纯文本的形式输出。
c、fread()函数 读取任意长度的字符串
语法:
fread(file,length)
此时是不是觉得这个和fgets()功能一样?二者是有差别的:首先fread函数要求length这个参数是必须的,fgets函数在遇到换行符时,及时指定的length长度未读取完也会结束,但是fread()则会一直读取到length-1个字符串为止。
d、readfile()/file()/file_get_contents()函数,读取整个文件
三个函数虽然都是读取整个文件,但是差别还是比较大的
readfile()读取一个文件并写入到输出缓冲,成功则返回读取的字节数,失败返回false,该函数不需要打开或关闭文件操作,不需要输出语句,直接应用即可。
语法:
readfile(filename,include_path,context)
参数
描述
filename
必需。规定要读取的文件。
include_path
可选。如果也想在 include_path 中搜索文件,可以使用该参数并将其设为 true。
context
可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。
file()函数是将整个文件读取到一个数组中,成功返回数组,数组中的每个元素都是文件中对应的一行,包括换行符在内,失败则返回false。
语法:
file(path,include_path,context)
参数
描述
path
必需。规定要读取的文件。
include_path
可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"。
context
可选。规定文件句柄的环境。
context 是一套可以修改流的行为的选项。若使用 null,则忽略。
file_get_contents() 函数把整个文件读入一个字符串中。
和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。file_get_contents()函数是用于将文件的内容读入到一个字符串中的首选方法。如果操作系统支持,还会使用内存映射技术来增强性能。
语法:
file_get_contents(path,include_path,context,start,max_length)
参数
描述
path
必需。规定要读取的文件。
include_path
可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"。
context
可选。规定文件句柄的环境。
context 是一套可以修改流的行为的选项。若使用 null,则忽略。
start
可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 新加的。
max_length
可选。规定读取的字节数。该参数是 PHP 5.1 新加的。
以上三个函数均不需要fopen函数打开文件。
3、向文件中写入内容
打开文件之后,就有了向文件写入内容的权限,PHP中通过fwrite()和file_put_contents()函数执行文件的写入操作。
a、fwrite()函数 向文件中写入数据
fwrite()函数执行文件的写入操作(可安全用于二进制文件),他还有一别名:fputs(),语法如下:
fwrite(resource file,string,length)
参数
描述
file
必需。规定要写入的打开文件。
string
必需。规定要写入文件的字符串。
length
可选。规定要写入的最大字节数。
fwrite()把string的内容写入文件指针file处。 如果指定了length,当写入了length个字节或者写完了string以后,写入就会停止,两种情况先满足哪种,哪种先发生。如果你指定length为100个字符,但string内容只有50个,那么这个length相当于是无效的。
fwrite()返回写入的字符数,出现错误时则返回false。
$file = fopen("alpha.txt","w");
echo fwrite($file,"Hello World. Happy Coding!");
fclose($file);
写入的字符串内容,中间如果想插入分行,请使用“\n”换行符。
b、file_put_contents()
file_put_contents()函数把一个字符串写入文件中。与依次调用fopen(),fwrite()以及 fclose()功能一样,即file_put_contents()函数是这三个函数的综合体,包含了打开文件资源、写入内容、关闭文件资源这三个操作。
file_put_contents()将字符串写入文件中,成功则返回写入的字节数,失败返回FALSE,语法如下:
file_put_contents(string file,string data,mode,context)
参数
描述
file
必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。
data
可选。规定要写入文件的数据。可以是字符串、数组或数据流。
mode
可选。规定如何打开/写入文件,实现对文件的锁定。可能的值:
FILE_USE_INCLUDE_PATH
FILE_APPEND
LOCK_EX
context
可选。规定文件句柄的环境。
context 是一套可以修改流的行为的选项。若使用 null,则忽略。
上面两个函数不近能写入文字内容,也可以将读取到的图片资源写入到另一个图片中。
4、关闭文件指针
文件有打开就有关闭,对文件操作结束后,应该关闭这个文件,否则可能引起错误,使用fclose()函数关闭即可。具体示例在上面已经出效过,不再举例。
以上就是文件操作的大概内容,文件操作研究过后,接下来就是目录操作。目录也是文件,一种特殊的文件。具体操作说明参考这里:PHP目录操作技术文档。