复习PHP基础(文件系统)

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容