在之前的文章《php文件操作之提取文件/目錄的名稱(chēng)》中,我們了解了獲取文件/目錄的名稱(chēng)部分的方法。這次我們繼續(xù)php文件操作系列的學(xué)習(xí),來(lái)聊聊怎么刪除指定文件或者目錄,感興趣的朋友可以學(xué)習(xí)了解一下~
在對(duì)文件/目錄進(jìn)行操作時(shí),不僅可以對(duì)文件中的數(shù)據(jù)進(jìn)行操作,還可以對(duì)文件/目錄本身進(jìn)行操作(例如刪除文件/目錄)。今天我們就來(lái)給大家介紹一下刪除指定文件或者目錄的方法。
一:刪除指定文件操作
刪除文件可以使用unlink($filename,$context)
函數(shù),它可以刪除指定的文件$filename
,可選參數(shù)$context
用于規(guī)定文件句柄的環(huán)境。如果執(zhí)行成功時(shí)返回 TRUE,失敗時(shí)返回 FALSE。
下面通過(guò)具體代碼示例來(lái)看看:
例1:刪除同目錄下的“test.txt”文件
<?php header("content-type:text/html;charset=utf-8"); $file = 'test.txt'; if(file_exists($file)){ if(unlink($file)){ echo $file.' 刪除成功!'; }else{ echo $file.' 刪除失敗!'; } }else{ echo $file.' 不存在!'; } ?>
輸出結(jié)果為:
在重新打開(kāi)目錄,看看文件,會(huì)發(fā)現(xiàn)“test.txt”文件已經(jīng)不存在了。
例2:刪除D:demo目錄下的“text.txt”文件
<?php header("content-type:text/html;charset=utf-8"); $file = 'D:/demo/text.txt'; if(file_exists($file)){ if(unlink($file)){ echo $file.' 刪除成功!'; }else{ echo $file.' 刪除失敗!'; } }else{ echo $file.' 不存在!'; } ?>
輸出結(jié)果為:
在重新打開(kāi)目錄,看看文件,會(huì)發(fā)現(xiàn)“text.txt”文件已經(jīng)不存在了。
如何想要?jiǎng)h除一個(gè)目錄中的全部文件,可以利用循環(huán)和readdir()獲取D:demo目錄下的全部文件和目錄(不包括子目錄),然后將其中的文件全部刪除:
<?php header("content-type:text/html;charset=utf-8"); $dir = 'D:/demo'; if (is_dir($dir)) { $info = opendir($dir); while (($file = readdir($info)) !== false) {//用不全等于是區(qū)分如果文件夾名字為0的時(shí)候,那么0!==false,仍然可以遍歷 if ($file != "." && $file != ".." ) { $path = $dir . '/' . $file; if(is_dir($path)){ continue; } unlink($path); } } echo '文件刪除成功!'; closedir($info); } ?>
輸出結(jié)果為:
在重新打開(kāi)目錄,看看文件,會(huì)發(fā)現(xiàn)只剩下一個(gè)“img”文件夾還存在了。
二:刪除指定目錄操作
刪除目錄可以使用rmdir($dir,$context)
函數(shù),$context是一個(gè)可省略的參數(shù),用于規(guī)定文件句柄的環(huán)境。如果執(zhí)行成功時(shí)返回 TRUE,失敗時(shí)返回 FALSE。
需要注意的是:使用 rmdir() 函數(shù)刪除指定目錄時(shí),這個(gè)目錄必須是空的,而且要有相應(yīng)的權(quán)限。如果刪除一個(gè)不為空的目錄還會(huì)產(chǎn)生一個(gè) E_WERNING 級(jí)別的錯(cuò)誤。
下面通過(guò)具體代碼示例來(lái)看看:刪除D:demo目錄下的空目錄“img”
<?php header("content-type:text/html;charset=utf-8"); $dir = 'D:/demo/img'; if(is_dir($dir)){ if(rmdir($dir)) echo '目錄刪除成功!'; }else{ echo "目錄不存在!"; } ?>
輸出結(jié)果為:
在重新打開(kāi)目錄,看看文件,會(huì)發(fā)現(xiàn)空目錄“img”不存在了。
但大部分情況下,我們需要?jiǎng)h除的目錄并不為空,里面又會(huì)包含很多子文件和子目錄,這要怎么操作才能刪除指定目錄及其子文件和目錄呢?
具體實(shí)現(xiàn)方法:可以遍歷這個(gè)目錄下的所有文件和文件夾,并用遞歸的方式來(lái)逐個(gè)刪除這個(gè)目錄下的所有文件和文件夾
下面給出具體的實(shí)現(xiàn)代碼:
<?php function deldir($path){ //如果是目錄則繼續(xù) if(is_dir($path)){ //掃描一個(gè)文件夾內(nèi)的所有文件夾和文件并返回?cái)?shù)組 $p = scandir($path); //如果 $p 中有兩個(gè)以上的元素則說(shuō)明當(dāng)前 $path 不為空 if(count($p)>2){ foreach($p as $val){ //排除目錄中的.和.. if($val !="." && $val !=".."){ //如果是目錄則遞歸子目錄,繼續(xù)操作 if(is_dir($path.$val)){ //子目錄中操作刪除文件夾和文件 deldir($path.$val.'/'); }else{ //如果是文件直接刪除 unlink($path.$val); } } } } } //刪除目錄 return rmdir($path); } //設(shè)置需要?jiǎng)h除的文件夾 $path = "D:/demo/"; //調(diào)用函數(shù),傳入路徑 deldir($path); ?>
好了就說(shuō)到這里了,有其他想知道的,可以點(diǎn)擊這個(gè)哦?!?→PHP文件基礎(chǔ)操作
推薦:《PHP面試題大匯總(收藏)》《php視頻教程》