PHP文件操作

和數(shù)據(jù)庫(kù)操作一樣,操作文件同樣也分為打開(kāi)文件配椭,讀取文件虫溜,寫(xiě)入文件和關(guān)閉文件四步。

一股缸、打開(kāi)關(guān)閉文件

1衡楞、fopen()函數(shù)打開(kāi)文件,它有兩個(gè)參數(shù)第一個(gè)是文件名敦姻,第二個(gè)是打開(kāi)方式瘾境。

    // 獲取文件路徑
    $filePath = "psg.txt";

    // 打開(kāi)文件,將資源綁定到一個(gè)流或者句柄,綁定之后镰惦,腳本就可以通過(guò)句柄與此資源交互迷守。
    $fileHandle = fopen($filePath, "a+");

fopen()函數(shù)第二個(gè)參數(shù)可能的值

mode 說(shuō)明
r 只讀方式打開(kāi),文件從頭開(kāi)始讀旺入。
r+ 讀寫(xiě)方式打開(kāi)兑凿,文件從頭開(kāi)始讀寫(xiě)。
w 只寫(xiě)方式打開(kāi)文件茵瘾,從文件開(kāi)頭開(kāi)始寫(xiě)礼华。如果文件已經(jīng)存在,將文件指針指向文件頭并將文件大小截為零拗秘,即刪除所有文件已有的內(nèi)容卓嫂,如果文件不存在,函數(shù)將創(chuàng)建這個(gè)文件聘殖。
w+ 讀寫(xiě)方式打開(kāi)文件,如果文件已經(jīng)存在行瑞,將文件指針指向文件頭并將文件大小截為零奸腺。即刪除所有文件已有的內(nèi)容,如果文件不存在血久,函數(shù)將創(chuàng)建這個(gè)文件突照。
a 寫(xiě)入方式打開(kāi),將文件指針指向文件末尾氧吐。如果該文件已有內(nèi)容讹蘑,將從文件末尾開(kāi)始追加末盔,如果該文件不存在,函數(shù)將創(chuàng)建這個(gè)文件座慰。
a+ 讀寫(xiě)方式打開(kāi)陨舱,將文件指針指向文件末尾。如果該文件已有內(nèi)容版仔,將從文件末尾開(kāi)始追加或者讀游盲,如果該文件不存在,函數(shù)將創(chuàng)建這個(gè)文件蛮粮。

2益缎、fclose() 關(guān)閉文件。文件指針必須有效然想,并且是通過(guò)fopen()或fsockopen()成功打開(kāi)的文件莺奔。雖然每個(gè)請(qǐng)求最后都會(huì)自動(dòng)關(guān)閉文件,但明確的關(guān)閉打開(kāi)的所有文件是一個(gè)好的習(xí)慣变泄。

    // 打開(kāi)文件
    fopen("psg.txt");
    // 關(guān)閉文件
    fclose("psg.txt");

二令哟、讀取文件

php提供了很多從文件中讀取數(shù)據(jù)的方法,不僅可以一次只讀取一個(gè)字符杖刷,還可以一次讀取整個(gè)文件励饵。
1、fread()函數(shù)從指定的資源中讀取length個(gè)字符當(dāng)?shù)竭_(dá)EOF(文件結(jié)束符)或者讀取到length個(gè)字符時(shí)讀取將停止滑燃。

    // 獲取文件路徑
    $filePath = "psg.txt";
    // 打開(kāi)文件
    $fileHandle = fopen($filePath, "a+");
    // fread()讀取文件   要讀取文件的最大字節(jié)數(shù)役听,3個(gè)字節(jié)表示一個(gè)漢字
    // filesize()讀取整個(gè)文件
    $str = fread($fileHandle, filesize($filePath));
    echo $str;

filesize()函數(shù)讀取整個(gè)文件。

讀取的文件內(nèi)容

2表窘、fgets()函數(shù)從handle(句柄)指定的資源中讀取一行字符典予。碰到換行符(包括在返回值中)、EOF或者已經(jīng)讀取了length-1字節(jié)后停止(看先碰到哪一種情況)乐严。

    // 獲取文件路徑
    $filePath = "psg.txt";
    // 打開(kāi)文件
    $fileHandle = fopen($filePath, "a+");

    //fgets()從句柄中指定的資源中按某一標(biāo)準(zhǔn)讀取一行字符瘤袖。
    while ($str = fgets($fileHandle)) { //遍歷讀取全部?jī)?nèi)容
        echo nl2br($str); //按換行符讀取
    }

注意如果沒(méi)有指定length,則默認(rèn)為1K昂验,或者說(shuō)1024字節(jié)捂敌。

3、file()函數(shù)將文件讀取到數(shù)組中既琴,各元素由換行符分隔占婉。

    // file()將文件讀取到數(shù)組中,按換行符分隔
    $arr = file("psg.txt");
    print_r($arr);
打印數(shù)組內(nèi)容

4甫恩、file_get_contents()函數(shù)將文件內(nèi)容讀取到字符串中逆济。

    // file_get_contents()將文件內(nèi)容讀到字符串中
    echo file_get_contents("psg.txt");
打印字符串

三、寫(xiě)入文件

1、fwrite()將內(nèi)容寫(xiě)入到打開(kāi)的文件中奖慌,如果指定length參數(shù)抛虫,將在寫(xiě)入length個(gè)字符時(shí)停止,成功返回字節(jié)數(shù)简僧,失敗返回false建椰。

    // fwrite()將內(nèi)容寫(xiě)入到打開(kāi)的文件中,成功返回字節(jié)數(shù)涎劈,失敗返回false
    echo fwrite($fileHandle, "\n上兵伐謀广凸,其次伐交,\n其次伐兵蛛枚,其下攻城谅海。");
代碼執(zhí)行效果

2、file_put_contents(file,data,mode,context)函數(shù)把一個(gè)字符串寫(xiě)入文件中蹦浦。 后兩個(gè)參數(shù)可選扭吁,如果文件不存在,將會(huì)創(chuàng)建一個(gè)文件盲镶,成功返回字節(jié)數(shù)量侥袜。

file文件名。
data要寫(xiě)入的字符串溉贿。
mode有多個(gè)可選值其中FILE_APPEND表示在文件末尾插入內(nèi)容枫吧。

    // 在文件末尾插入內(nèi)容
    echo file_put_contents($filePath,"\n上兵伐謀,其次伐交宇色,\n其次伐兵九杂,其下攻城。", FILE_APPEND);

    // 創(chuàng)建文件并插入內(nèi)容
    echo file_put_contents("liangxi.txt","勝敗兵家事不期宣蠕,\n包羞忍辱是男兒例隆;\n江東子弟多才俊,\n卷土重來(lái)未可知抢蚀。");

四镀层、復(fù)制、重命名皿曲、刪除文件

1唱逢、copy() 復(fù)制文件 成功返回true,失敗返回false

    // copy() 復(fù)制文件 成功返回true屋休,失敗返回false
    echo copy($filePath, "liangxi.txt");

2坞古、rename(oldname,newname) 函數(shù)重命名文件或目錄,成功返回true博投,失敗返回false

    // rename(oldname,newname) 函數(shù)重命名文件或目錄,成功返回true盯蝴,失敗返回false
    rename($filePath, "sunzibingfa.txt");

3毅哗、unlink() 函數(shù)刪除文件听怕,成功返回true,失敗返回false

    // unlink() 函數(shù)刪除文件虑绵,成功返回true尿瞭,失敗返回false
    unlink("sunzibingfa.txt");

五、讀取目錄

1翅睛、opendir()打開(kāi)目錄句柄声搁。

2、 closedir()關(guān)閉目錄句柄捕发。

3疏旨、readdir()返回指定目錄中的各個(gè)元素≡幔可以使用此函數(shù)列出給定目錄中的所有文件和子目錄檐涝。

    // opendir()打開(kāi)目錄句柄
    $dirHandle = opendir(".");

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

    // 關(guān)閉目錄
    closedir($dirHandle);

. 表示當(dāng)前目錄

當(dāng)前文件目錄

4、scandir()獲取目錄中的所有文件和子目錄放到數(shù)組中法挨。

    // 獲取所有文件放到數(shù)組中
    $arr = scandir(".");
    var_dump($arr);
打印數(shù)組

5谁榜、mkdir() 創(chuàng)建文件夾

6、rmdir() 刪除文件夾

    // 創(chuàng)建文件夾凡纳,注意文件夾只能逐級(jí)創(chuàng)建窃植,然后逐級(jí)刪除
    mkdir("newfile");
    mkdir("newfile/file");

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

六、其他文件操作函數(shù)

1荐糜、filesize() 取得文件的大小巷怜,以字節(jié)為單位。

    echo filesize("test.txt");

2狞尔、filectime() 獲取指定文件最后修改時(shí)間,單位為s丛版。

3、fileatime() 獲取文件最后訪問(wèn)的時(shí)間偏序。

4页畦、filemtime() 獲取文件內(nèi)容最后修改時(shí)間。

    // 獲取指定文件的上次修改時(shí)間,單位為s
    echo filectime("test.txt");
    echo "Last change: ".date("F d Y H:i:s.",filectime("test.txt"));

    echo "<hr/>";

    // 獲取文件上次訪問(wèn)的時(shí)間
    echo fileatime("test.txt");
    echo "Last change: ".date("F d Y H:i:s.",fileatime("test.txt"));
    echo "<hr/>";

    // 獲取文件內(nèi)容最后修改時(shí)間,修改情況是指:權(quán)限的修改研儒、所有者的修改豫缨、用戶組的修改或其他元數(shù)據(jù)的修改。
    echo filemtime("test.txt");
    echo "Last change: ".date("F d Y H:i:s.",filemtime("test.txt"));

代碼執(zhí)行效果
代碼執(zhí)行效果

5端朵、file_exists() 檢查文件是否存在好芭,存在返回true否則返回false。

// 檢查文件是否存在冲呢,存在返回true否則返回false舍败。
file_exists("test.txt");

6、is_readable() 判斷文件是否可讀,如果文件存在并且可讀邻薯,存在返回true否則返回false裙戏。

7、is_writable() 判斷文件是否可寫(xiě)厕诡,如果文件存在并且可寫(xiě)累榜,存在返回true否則返回false。

七灵嫌、解析目錄路徑函數(shù)

1壹罚、basename(string path, suffix) 獲取文件名,可指定可選參數(shù)suffix會(huì)將這部分內(nèi)容去掉寿羞。

2猖凛、dirname() 獲取目錄名

3、pathinfo() 返回關(guān)聯(lián)數(shù)組稠曼,包含目錄形病,文件名,擴(kuò)展名霞幅。

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

    echo "<hr/>";
    // 獲取目錄名
    echo dirname($path);

    echo "<hr/>";
    // 返回關(guān)聯(lián)數(shù)組漠吻,包含目錄,文件名司恳,擴(kuò)展名
    print_r(pathinfo($path));
代碼執(zhí)行效果

4途乃、chmod() 函數(shù)改變指定文件的權(quán)限,如果成功則返回 TRUE扔傅,如果失敗則返回 FALSE耍共。


以上內(nèi)容純屬個(gè)人理解,由于本人水平有限猎塞,若有錯(cuò)漏之處试读,敬請(qǐng)指出改正,謝謝荠耽!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末钩骇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子铝量,更是在濱河造成了極大的恐慌倘屹,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慢叨,死亡現(xiàn)場(chǎng)離奇詭異纽匙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)拍谐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)烛缔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)馏段,“玉大人,你說(shuō)我怎么就攤上這事践瓷∫慊。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵当窗,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我寸宵,道長(zhǎng)崖面,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任梯影,我火速辦了婚禮巫员,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘甲棍。我一直安慰自己简识,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布感猛。 她就那樣靜靜地躺著七扰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪陪白。 梳的紋絲不亂的頭發(fā)上颈走,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音咱士,去河邊找鬼立由。 笑死,一個(gè)胖子當(dāng)著我的面吹牛序厉,可吹牛的內(nèi)容都是我干的锐膜。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼弛房,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼道盏!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起庭再,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤捞奕,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后拄轻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體颅围,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年恨搓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了院促。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筏养。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖常拓,靈堂內(nèi)的尸體忽然破棺而出渐溶,到底是詐尸還是另有隱情,我是刑警寧澤弄抬,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布茎辐,位于F島的核電站,受9級(jí)特大地震影響掂恕,放射性物質(zhì)發(fā)生泄漏拖陆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一懊亡、第九天 我趴在偏房一處隱蔽的房頂上張望依啰。 院中可真熱鬧,春花似錦店枣、人聲如沸速警。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)闷旧。三九已至,卻和暖如春钧唐,著一層夾襖步出監(jiān)牢的瞬間鸠匀,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工逾柿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缀棍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓机错,卻偏偏與公主長(zhǎng)得像爬范,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子弱匪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 1.文件操作 打開(kāi)關(guān)閉文件 打開(kāi)文件 $file = "test.txt";$fh = fopen( $file,...
    寒梁沐月閱讀 667評(píng)論 0 0
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理青瀑,服務(wù)發(fā)現(xiàn),斷路器萧诫,智...
    卡卡羅2017閱讀 134,637評(píng)論 18 139
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程斥难,因...
    小菜c閱讀 6,373評(píng)論 0 17
  • PHP常用函數(shù)大全 usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進(jìn)制字符串對(duì)數(shù)據(jù)進(jìn)行解...
    上街買(mǎi)菜丶迷倒老太閱讀 1,360評(píng)論 0 20
  • 為什么FDT有效帘饶,我試從史蒂芬?柯維的最后一本力作《第3選擇》中選擇一個(gè)角度來(lái)解讀FDT的有效性哑诊。 FDT特別強(qiáng)調(diào)...
    敬恒教練閱讀 662評(píng)論 0 0