1.读取文件
(1).使用readfile函数读取文件,会显示文件的内容,例:
readfile("/home/raul/test.txt"); //linux类的读取方式
readfile("c:\\abc.txt"); //windows类的读取方式
(2).用file_get_contents打开文件,可以把打开的文件内容以字符串的形式赋值给变量,例:
$filestring = file_get_contents("c:\\abc.txt");
echo $filestring;
还可以用该函数爬取网页内容,例:
$web = file_get_contents('http://www.baidu.com');
echo $web;
(3).读取有分行(\n)的文件可用explode进行分行,因为explode函数可将字符串按照规定的字符将其打散为一个数组,例:
$filestring = file_get_contents('D:\\abc.txt');
$filearray = explode("\n", $filestring);
foreach($filearray as $key => $value){
echo $value.'<br />';
}
(4).用fopen($文件打开路径,'模式')函数来打开文件,fopen的返回类型是一个资源类型,参数里的模式有以下:
模式 | 说明 |
---|---|
r | 只读方式打开,将文件指针指向文件头。 |
r+ | 读写方式打开,将文件指针指向文件头。 |
w | 写入方式打开,将文件指针指向文件头并将文件大小截为零,如果文件不存在则尝试创建。 |
w+ | 读写方式打开,将文件指针指向文件头并将文件大小截为零,如果文件不存在则尝试创建。 |
a | 写入方式打开,将文件指针指向文件末尾,如果文件不存在则尝试创建。 |
a+ | 读写方式打开,将文件指针指向文件末尾,如果文件不存在则尝试创建之。 |
x | 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建。 |
x+ | 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建。 |
注意,可在fopen的模式参数加上最后一个字符t或者b,t的作用是在windows下将\n转为\r\n(\n为换行,\r\n视为回车键,二者有区别的),而b的作用是强调二进制打开模式。
(5).用fread($文件资源,读取长度)函数来按照指定长度读取打开的文件资源,读取一部分向后移动一部分,直至文件结尾。
(6).用fclose($文件资源)函数来关闭用fopen打开的文件资源,凡是资源类型有打开就有关闭。
(7).fopen、fread和fclose操作读取文件示例:
$filename = 'D:\\abc.txt';
$fp = fopen($filename, 'r');
$contents = fread($fp, 1024);
fclose($fp);
echo $contents;
2.创建和修改文件内容
(1).用file_put_contents($文件路径, $写入数据)函数可把数据写入对应文件中,如果文件不存在则创建文件,函数返回的是写入字节长度。
(2).用fwrite($文件资源变量, $写入数据)函数配合fopen函数可把数据写入对应文件中,该函数返回的是写入字节长度。注意:
①.该函数又可用fputs代替;
②.若用w模式打开文件,则不论有没有新建都会打开文件重新写入,而且原有文件内容会被覆盖掉;
③.若用a模式打开文件,就在文件末尾添加新字段;
④.若用x模式打开文件,那么文件如果已经存在就会报错并且不能写入。
3.创建临时文件
用tmpfile()函数,该函数的特点是创建出一个临时文件,返回资源类型,关闭文件即被删除,可用创建出的临时文件作为转移中介,例:
$handle = tmpfile();
fwrite($handle, 'abcd');
fclose($handle);
4.重命名、复制和删除文件
(1).用rename('旧名', '新名')函数重命名文件,返回类型为bool;
(2).用copy('源文件名', '目标文件名')函数复制文件,返回类型为bool;
(2).用unlink('指定文件路径')函数删除文件,该删除是直接删除,回收站里看不到,返回类型为bool。
5.检测文件属性函数
类型 | 函数 | 功能 |
---|---|---|
bool | file_exists($指定文件路径文件名) | 文件是否存在 |
bool | is_readable($指定文件路径文件名) | 文件是否可读 |
bool | is_writeable($指定文件路径文件名) | 文件是否可写 |
bool | is_excutable($指定文件路径文件名) | 文件是否可执行 |
bool | is_file($指定文件路径文件名) | 是否是文件 |
bool | is_dir($指定文件路径文件名) | 是否是目录 |
void | clearstatcache(void) | 清楚文件的状态缓存 |
6.文件常用函数
(1).查看当前文件的绝对路径,例:
$current_file = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, __FILE__);
define('__CUR_FILE__', $current_file);
echo __CUR_FILE__;
echo $current_file;
echo __FILE__;
上面的例子中,str_replace($查找要替换的字符, $替换成的字符, $规定查找替换的字符串)为字符串替换函数,DIRECTORY_SEPARATOR为PHP内部常量,代表反斜杠/,__FILE__则为当前文件的绝对路径。
使用字符串替换函数将/和\全部替换为/的原因是windows的目录分隔符为\,也支持/,但Linux的分隔符必须为/,所以一般碰到获取路径的时候都做一下反斜杠的统一,这样就可以在windows和linux自由切换了。
(2).文件指针操作函数
rewind($操作资源)——指针回到开始处;
fseek($操作资源, 整数)——文件指针向后移动指定长度字符。
(3).filesize($文件路径)函数检测文件大小。
(4).其它操作文件的函数:
函数 | 功能 |
---|---|
file($文件路径) | 把整个文件读入到一个数组中 |
fgets($文件资源) | 从文件指针中读取一行,读到最后返回false |
fgetc($文件资源) | 从文件指针中读取一个字符,读到最后返回false |
ftruncate($文件资源,整数) | 将文件截断到给定的长度 |
(5).文件的时间函数:
filectime($文件路径)——文件的创建时间函数
filemtime($文件路径)——文件的最近一次修改时间函数
fileatime($文件路径)——文件上次访问时间函数
7.文件锁处机制
(1).为什么要加文件锁:防止操作冲突,即一个文件同时有两个人在操作。
(2).文件锁机制:若用户a在读取或者写入文件时,将文件加上共享锁,即可以与他人共享对该文件的同时读取;若加上独占锁,即自己独享对该文件的操作,除非对该文件锁进行释放。(注意:不论加上什么文件锁到最后都要释放)。
(3).主要函数为:bool型的flock($文件资源, 锁类型),其中锁类型有:
LOCK_SH——取得共享锁定(读取时)
LOCK_EX——取得独占锁定(写入时)
LOCK_UN——释放锁定
例如,在写入某文件时加个独占锁:
$fp = fopen('a.txt', 'r+');
if(flock($fp, LOCK_EX)){
fwrite($fp, 'lock success');
flock($fp, LOCK_UN);
}else{
echo '创建文件独占锁失败,可能有人正在操作该文件,这时不能将文件上锁。';
}
fclose($fp);
8.目录处理函数
函数 | 功能 |
---|---|
opendir($文件路径) | 打开文件夹,返回操作资源 |
readdir($操作资源) | 读取一次文件资源,指针向后移一位 |
is_dir($文件路径) | 判断是否为文件夹 |
closedir($操作资源) | 关闭文件目录操作资源 |
filetype($文件路径) | 显示是文件夹还是文件 |
举个例子,读取整个d盘的文件目录:
$dir = 'd:/';
if(is_dir($dir)){ //首先判断是否为目录
if($dr = opendir($dir)){ //打开该目录并把资源赋给dr
while($file = readdir($dr)){ //逐个读取文件
$filetype = filetype($dir.$file); //读取文件属性
$file = iconv("gb2312", "UTF-8", $file); //防止文件中文乱码
echo $file.' '.$filetype.'<br />';
}
}
}
9.文件路径处理函数
函数 | 功能 |
---|---|
pathinfo($文件路径) | 以数组形式返回文件的各个组成部分,数组中有四个键分别为:dirname(目录名),basename(文件全名),extension(文件扩展名),filename(不包含扩展名的文件名)。 |
basename($文件路径[, $指定字符]) | 返回文件名,第二个参数可有可无,若定义了,则文件名搜寻到指定字符停止。 |
dirname($文件路径) | 返回文件目录部分。 |
parse_url($路径) | 以数组形式返回一个网址的各个组成部分。 |
http_build_query($需要处理的数据) | 生成url中的query字符串 |
http_build_url($需要处理的数据) | 生成一个url |