和數(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è)文件。
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);
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其次伐兵蛛枚,其下攻城谅海。");
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)前目錄
4、scandir()獲取目錄中的所有文件和子目錄放到數(shù)組中法挨。
// 獲取所有文件放到數(shù)組中
$arr = scandir(".");
var_dump($arr);
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"));
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));
4途乃、chmod() 函數(shù)改變指定文件的權(quán)限,如果成功則返回 TRUE扔傅,如果失敗則返回 FALSE耍共。
以上內(nèi)容純屬個(gè)人理解,由于本人水平有限猎塞,若有錯(cuò)漏之處试读,敬請(qǐng)指出改正,謝謝荠耽!