和數(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ù)讀取整個文件。
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);
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其次伐兵,其下攻城。");
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)前目錄
4、scandir()獲取目錄中的所有文件和子目錄放到數(shù)組中。
// 獲取所有文件放到數(shù)組中
$arr = scandir(".");
var_dump($arr);
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"));
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));
4、chmod() 函數(shù)改變指定文件的權(quán)限,如果成功則返回 TRUE,如果失敗則返回 FALSE。
以上內(nèi)容純屬個人理解,由于本人水平有限,若有錯漏之處,敬請指出改正,謝謝!