PHP文件操作

和数据库操作一样,操作文件同样也分为打开文件,读取文件,写入文件和关闭文件四步。

一、打开关闭文件

1、fopen()函数打开文件,它有两个参数第一个是文件名,第二个是打开方式。

    // 获取文件路径
    $filePath = "psg.txt";

    // 打开文件,将资源绑定到一个流或者句柄,绑定之后,脚本就可以通过句柄与此资源交互。
    $fileHandle = fopen($filePath, "a+");

fopen()函数第二个参数可能的值

mode 说明
r 只读方式打开,文件从头开始读。
r+ 读写方式打开,文件从头开始读写。
w 只写方式打开文件,从文件开头开始写。如果文件已经存在,将文件指针指向文件头并将文件大小截为零,即删除所有文件已有的内容,如果文件不存在,函数将创建这个文件。
w+ 读写方式打开文件,如果文件已经存在,将文件指针指向文件头并将文件大小截为零。即删除所有文件已有的内容,如果文件不存在,函数将创建这个文件。
a 写入方式打开,将文件指针指向文件末尾。如果该文件已有内容,将从文件末尾开始追加,如果该文件不存在,函数将创建这个文件。
a+ 读写方式打开,将文件指针指向文件末尾。如果该文件已有内容,将从文件末尾开始追加或者读,如果该文件不存在,函数将创建这个文件。

2、fclose() 关闭文件。文件指针必须有效,并且是通过fopen()或fsockopen()成功打开的文件。虽然每个请求最后都会自动关闭文件,但明确的关闭打开的所有文件是一个好的习惯。

    // 打开文件
    fopen("psg.txt");
    // 关闭文件
    fclose("psg.txt");

二、读取文件

php提供了很多从文件中读取数据的方法,不仅可以一次只读取一个字符,还可以一次读取整个文件。
1、fread()函数从指定的资源中读取length个字符当到达EOF(文件结束符)或者读取到length个字符时读取将停止。

    // 获取文件路径
    $filePath = "psg.txt";
    // 打开文件
    $fileHandle = fopen($filePath, "a+");
    // fread()读取文件   要读取文件的最大字节数,3个字节表示一个汉字
    // filesize()读取整个文件
    $str = fread($fileHandle, filesize($filePath));
    echo $str;

filesize()函数读取整个文件。

读取的文件内容

2、fgets()函数从handle(句柄)指定的资源中读取一行字符。碰到换行符(包括在返回值中)、EOF或者已经读取了length-1字节后停止(看先碰到哪一种情况)。

    // 获取文件路径
    $filePath = "psg.txt";
    // 打开文件
    $fileHandle = fopen($filePath, "a+");

    //fgets()从句柄中指定的资源中按某一标准读取一行字符。
    while ($str = fgets($fileHandle)) { //遍历读取全部内容
        echo nl2br($str); //按换行符读取
    }

注意如果没有指定length,则默认为1K,或者说1024字节。

3、file()函数将文件读取到数组中,各元素由换行符分隔。

    // file()将文件读取到数组中,按换行符分隔
    $arr = file("psg.txt");
    print_r($arr);
打印数组内容

4、file_get_contents()函数将文件内容读取到字符串中。

    // file_get_contents()将文件内容读到字符串中
    echo file_get_contents("psg.txt");
打印字符串

三、写入文件

1、fwrite()将内容写入到打开的文件中,如果指定length参数,将在写入length个字符时停止,成功返回字节数,失败返回false。

    // fwrite()将内容写入到打开的文件中,成功返回字节数,失败返回false
    echo fwrite($fileHandle, "\n上兵伐谋,其次伐交,\n其次伐兵,其下攻城。");
代码执行效果

2、file_put_contents(file,data,mode,context)函数把一个字符串写入文件中。 后两个参数可选,如果文件不存在,将会创建一个文件,成功返回字节数量。

file文件名。
data要写入的字符串。
mode有多个可选值其中FILE_APPEND表示在文件末尾插入内容。

    // 在文件末尾插入内容
    echo file_put_contents($filePath,"\n上兵伐谋,其次伐交,\n其次伐兵,其下攻城。", FILE_APPEND);

    // 创建文件并插入内容
    echo file_put_contents("liangxi.txt","胜败兵家事不期,\n包羞忍辱是男儿;\n江东子弟多才俊,\n卷土重来未可知。");

四、复制、重命名、删除文件

1、copy() 复制文件 成功返回true,失败返回false

    // copy() 复制文件 成功返回true,失败返回false
    echo copy($filePath, "liangxi.txt");

2、rename(oldname,newname) 函数重命名文件或目录,成功返回true,失败返回false

    // rename(oldname,newname) 函数重命名文件或目录,成功返回true,失败返回false
    rename($filePath, "sunzibingfa.txt");

3、unlink() 函数删除文件,成功返回true,失败返回false

    // unlink() 函数删除文件,成功返回true,失败返回false
    unlink("sunzibingfa.txt");

五、读取目录

1、opendir()打开目录句柄。

2、 closedir()关闭目录句柄。

3、readdir()返回指定目录中的各个元素。可以使用此函数列出给定目录中的所有文件和子目录。

    // opendir()打开目录句柄
    $dirHandle = opendir(".");

    // 读取文件 返回目录中的文件
    while ($file = readdir($dirHandle)) {
        echo $file . "<hr/>";
    };

    // 关闭目录
    closedir($dirHandle);

. 表示当前目录

当前文件目录

4、scandir()获取目录中的所有文件和子目录放到数组中。

    // 获取所有文件放到数组中
    $arr = scandir(".");
    var_dump($arr);
打印数组

5、mkdir() 创建文件夹

6、rmdir() 删除文件夹

    // 创建文件夹,注意文件夹只能逐级创建,然后逐级删除
    mkdir("newfile");
    mkdir("newfile/file");

    rmdir("newfile/file");
    rmdir("newfile");

六、其他文件操作函数

1、filesize() 取得文件的大小,以字节为单位。

    echo filesize("test.txt");

2、filectime() 获取指定文件最后修改时间,单位为s。

3、fileatime() 获取文件最后访问的时间。

4、filemtime() 获取文件内容最后修改时间。

    // 获取指定文件的上次修改时间,单位为s
    echo filectime("test.txt");
    echo "Last change: ".date("F d Y H:i:s.",filectime("test.txt"));

    echo "<hr/>";

    // 获取文件上次访问的时间
    echo fileatime("test.txt");
    echo "Last change: ".date("F d Y H:i:s.",fileatime("test.txt"));
    echo "<hr/>";

    // 获取文件内容最后修改时间,修改情况是指:权限的修改、所有者的修改、用户组的修改或其他元数据的修改。
    echo filemtime("test.txt");
    echo "Last change: ".date("F d Y H:i:s.",filemtime("test.txt"));

代码执行效果
代码执行效果

5、file_exists() 检查文件是否存在,存在返回true否则返回false。

// 检查文件是否存在,存在返回true否则返回false。
file_exists("test.txt");

6、is_readable() 判断文件是否可读,如果文件存在并且可读,存在返回true否则返回false。

7、is_writable() 判断文件是否可写,如果文件存在并且可写,存在返回true否则返回false。

七、解析目录路径函数

1、basename(string path, suffix) 获取文件名,可指定可选参数suffix会将这部分内容去掉。

2、dirname() 获取目录名

3、pathinfo() 返回关联数组,包含目录,文件名,扩展名。

    $path = "PHP/four/test.txt";
    // 获取文件名
    echo basename($path, ".txt");

    echo "<hr/>";
    // 获取目录名
    echo dirname($path);

    echo "<hr/>";
    // 返回关联数组,包含目录,文件名,扩展名
    print_r(pathinfo($path));
代码执行效果

4、chmod() 函数改变指定文件的权限,如果成功则返回 TRUE,如果失败则返回 FALSE。


以上内容纯属个人理解,由于本人水平有限,若有错漏之处,敬请指出改正,谢谢!

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

推荐阅读更多精彩内容