PHP文件操作

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

一、打開關(guān)閉文件

1、fopen()函數(shù)打開文件,它有兩個參數(shù)第一個是文件名,第二個是打開方式。

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

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

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

mode 說明
r 只讀方式打開,文件從頭開始讀。
r+ 讀寫方式打開,文件從頭開始讀寫。
w 只寫方式打開文件,從文件開頭開始寫。如果文件已經(jīng)存在,將文件指針指向文件頭并將文件大小截為零,即刪除所有文件已有的內(nèi)容,如果文件不存在,函數(shù)將創(chuàng)建這個文件。
w+ 讀寫方式打開文件,如果文件已經(jīng)存在,將文件指針指向文件頭并將文件大小截為零。即刪除所有文件已有的內(nèi)容,如果文件不存在,函數(shù)將創(chuàng)建這個文件。
a 寫入方式打開,將文件指針指向文件末尾。如果該文件已有內(nèi)容,將從文件末尾開始追加,如果該文件不存在,函數(shù)將創(chuàng)建這個文件。
a+ 讀寫方式打開,將文件指針指向文件末尾。如果該文件已有內(nèi)容,將從文件末尾開始追加或者讀,如果該文件不存在,函數(shù)將創(chuàng)建這個文件。

2、fclose() 關(guān)閉文件。文件指針必須有效,并且是通過fopen()或fsockopen()成功打開的文件。雖然每個請求最后都會自動關(guān)閉文件,但明確的關(guān)閉打開的所有文件是一個好的習(xí)慣。

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

二、讀取文件

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

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

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

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

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

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

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

注意如果沒有指定length,則默認(rèn)為1K,或者說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");
打印字符串

三、寫入文件

1、fwrite()將內(nèi)容寫入到打開的文件中,如果指定length參數(shù),將在寫入length個字符時停止,成功返回字節(jié)數(shù),失敗返回false。

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

2、file_put_contents(file,data,mode,context)函數(shù)把一個字符串寫入文件中。 后兩個參數(shù)可選,如果文件不存在,將會創(chuàng)建一個文件,成功返回字節(jié)數(shù)量。

file文件名。
data要寫入的字符串。
mode有多個可選值其中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卷土重來未可知。");

四、復(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()打開目錄句柄。

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

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

    // opendir()打開目錄句柄
    $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)建文件夾,注意文件夾只能逐級創(chuàng)建,然后逐級刪除
    mkdir("newfile");
    mkdir("newfile/file");

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

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

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

    echo filesize("test.txt");

2、filectime() 獲取指定文件最后修改時間,單位為s。

3、fileatime() 獲取文件最后訪問的時間。

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

    // 獲取指定文件的上次修改時間,單位為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/>";

    // 獲取文件內(nèi)容最后修改時間,修改情況是指:權(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() 判斷文件是否可寫,如果文件存在并且可寫,存在返回true否則返回false。

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

1、basename(string path, suffix) 獲取文件名,可指定可選參數(shù)suffix會將這部分內(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)容純屬個人理解,由于本人水平有限,若有錯漏之處,敬請指出改正,謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,860評論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,128評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,291評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,025評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,421評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,642評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,177評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,970評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,157評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,410評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,821評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,053評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,896評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,157評論 2 375

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

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