文件和目录处理相关

image.png

文章来自:zhouxiaoshuai

文件和目录处理相关

题:

不断在文件hello.txt头部写入一行"hello world" 字符串,要求代码完整
考点:文件操作/写入操作;
延伸:目录操作函数,其他文件操作;

文件读写操作 文件系统函数

fopen():用来打开一个文件,打开是需要指定打开模式;

打开模式:
'r' 只读方式打开,将文件指针指向文件头。
'r+'    读写方式打开,将文件指针指向文件头。
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零(清空文件)。如果文件不存在则尝试创建之。
'w+'    读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a' 写入方式打开,将文件指针指向文件末尾(追加的形式)。如果文件不存在则尝试创建之。
'a+'    读写方式打开,将文件指针指向文件末尾(读写追加)。如果文件不存在则尝试创建之。
'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
'x+'    创建并以读写方式打开,其他的行为和 'x' 一样。
'b'     打开一个二进制文件。与此对应还可以使用 'b' 来强制使用二进制模式,这样就不会转换数据。要使用这些标记,要么用 'b' 或者用 't' 作为 mode 参数的最后一个字符。
't'     Windows 下提供了一个文本转换标记('t')可以透明地将 \n 转换为 \r\n
【b 和 t 是配合前面的四大类使用的】
写入操作:
  • fwrite():写入文件(可安全用于二进制文件);
  • fputs(): fwrite() 的别名;
读取函数:
  • fread():读取文件(可安全用于二进制文件);
  • fgets():从文件指针中读取一行;
  • fgetc(): 从文件指针中读取字符,从文件句柄中获取一个字符;
关闭文件:fclose():关闭一个已打开的文件指针;

如果不需要打开文件可以使用:

file_get_contents():将整个文件读入一个字符串;
file_put_contents():将一个字符串写入文件;

其他读取函数:
  • file():把整个文件读入一个数组中;
  • readfile():输出文件,读取文件并写入到输出缓冲。
访问一个远程文件[此文件不在本地服务器上]:
  • php.ini 中开启allow_url_fopen,(只用开启后,才能使用fopen或者file_get_contents进行远程读取),http协议连接只能使用只读模式,FTP协议可以使用只读或者只写模式;
目录相关操作:

名称相关:

  • basename():返回路径中的文件名部分,给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名。;
  • dirname():返回路径中的目录部分,给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名。;
  • pathinfo():返回文件路径的信息,pathinfo() 返回一个关联数组包含有 path 的信息。返回关联数组还是字符串取决于 options[第二个参数]。
目录读取:目录函数
  • opendir():打开目录句柄;
  • readdir():从目录句柄中读取条目,返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。;
  • closedir():关闭目录句柄;
  • rewinddir():倒回目录句柄,将 dir_handle[参数] 指定的目录流重置到目录的开头。
目录删除:
  • remdir(): 删除目录,尝试删除 dirname 所指定的目录。 该目录必须是空的,而且要有相应的权限。 失败时会产生一个 E_WARNING 级别的错误。[使用时先遍历删除清空文件,然后删除目录];
目录创建:
  • mkdir():新建目录,尝试新建一个由 pathname 指定的目录。
文件大小:
  • filesize():取得指定文件的大小;
目录大小:首先要遍历目录下的文件,然后将文件大小相加;
磁盘大小:
  • disk_free_space():给出一个包含有一个目录的字符串,本函数将根据相应的文件系统或磁盘分区返回可用的字节数。;
  • disk_total_space():给出一个包含有一个目录的字符串,本函数将根据相应的文件系统或磁盘分区返回所有的字节数;
文件拷贝:
  • copy():拷贝文件;
文件类型:
  • filetype():取得文件类型,返回文件的类型。;
删除文件:
  • unlink():删除文件,和 Unix C 的 unlink() 函数相似。 发生错误时会产生一个 E_WARNING 级别的错误。
重命名文件和目录:
  • rename(): 重命名一个文件或目录,也可以移动目录位置;
文件截取:
  • ftruncate():将文件截断到给定的长度;
文件属性:
  • file_exists():检查文件或目录是否存在;
  • is_readalbe():判断给定文件名是否存在并且可读;
  • is_writeable():判断给定的文件名是否可写,如果文件存在并且可写则返回 TRUE。filename 参数可以是一个允许进行是否可写检查的目录名。
  • filectime():取得文件的 inode 修改时间;
  • fileatime():取得文件的上次访问时间;
  • filemtime(): 取得文件修改时间,本函数返回文件中的数据块上次被写入的时间,也就是说,文件的内容上次被修改的时间。
  • is_executable():判断给定文件名是否可执行。
其他函数:
  • flock():轻便的咨询文件锁定,许执行一个简单的可以在任何平台中使用的读取/写入模型;
  • fseek(): 在文件指针中定位;
  • ftell():返回文件指针读/写的位置,返回由 handle 指定的文件指针的位置,也就是文件流中的偏移量;
  • rewind():倒回文件指针的位置;

牢记文件操作函数以及几种打开模式,理解目录的操作步骤,练习完成目录的赋值和删除函数的编写;

练习题:
1. 通过PHP函数的方式对目录进行遍历,写出程序;
[注意:]遍历时,注意目录中子目录/文件名为0或者为空的,判断时是用  false !== 目录名
2. 不断在文件hello.txt头部写入一行"hello world" 字符串,要求代码完整
//不断在文件hello.txt头部加入一行 "hello world"
/**
 * 不断的在hello.txt文件中写入 hello world
 */
$file = './hello.txt';
// 打开文件
$handle = fopen($file, 'r');
//读取文件内容
$content = fread($handle, filesize($file));
//拼接文件内容
$content = 'hello world ' . $content;
//关闭文件
fclose($handle);
//再次打开文件
$handle = fopen($file, 'w');
//将内容写入文件
fwrite($handle, $content);
//将文件关闭
fclose($handle);
//通过PHP函数的方式对目录进行遍历,写出程序
$dir = './imooc';

function loopDir($dir)
{
    $handle = opendir($dir);
    //读取目录下的文件,判断是否是一个目录或者是文件
    while (false !== ($file = readdir($handle))){
        //如果是目录,排除 .和.. 当前目录和上级目录
        if ($file != '.' && $file != '..'){
            //输出文件名称
            echo $file . "<br>";
            //如果是目录继续遍历目录
            if (filetype($dir . '/' . $file) == 'dir'){
                loopDir($dir . '/' . $file);
            }
        }
    }
}

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

推荐阅读更多精彩内容