复习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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,049评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,478评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,109评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,097评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,115评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,280评论 1 279
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,748评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,398评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,553评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,440评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,487评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,176评论 3 317
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,750评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,821评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,049评论 1 257
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,559评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,150评论 2 341

推荐阅读更多精彩内容