在先前的文章《php檔案操作之提取檔案/目錄的名稱》中,我們了解了取得檔案/目錄的名稱部分的方法。這次我們繼續php檔案操作系列的學習,來聊聊怎麼刪除指定檔案或目錄,有興趣的朋友可以學習了解一下~
在對檔案/目錄進行操作時,不僅可以對檔案中的資料進行操作,也可以對檔案/目錄本身進行操作(例如刪除檔案/目錄)。今天我們就來跟大家介紹一下刪除指定檔案或目錄的方法。
一:刪除指定檔案操作
刪除檔案可以使用unlink($filename,$context)
函數,它可以刪除指定的檔案$filename
,可選參數$context
用於規定檔案句柄的環境。如果執行成功時傳回 TRUE,則失敗時傳回 FALSE。
下面透過具體程式碼範例來看看:
範例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.' 不存在!'; } ?>
輸出結果為:
在重新開啟目錄,看看文件,會發現「test.txt」檔案已經不存在了。
範例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.' 不存在!'; } ?>
輸出結果為:
在重新開啟目錄,看看文件,會發現「text.txt」文件已經不存在了。
如何想要刪除一個目錄中的全部文件,可以利用循環和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) {//用不全等于是区分如果文件夹名字为0的时候,那么0!==false,仍然可以遍历 if ($file != "." && $file != ".." ) { $path = $dir . '/' . $file; if(is_dir($path)){ continue; } unlink($path); } } echo '文件删除成功!'; closedir($info); } ?>
輸出結果為:
#在重新開啟目錄,看看文件,會發現只剩下一個「img」資料夾還存在了。
二:刪除指定目錄操作
#刪除目錄可以使用rmdir($dir ,$context)
函數,$context是一個可省略的參數,用來規定檔案句柄的環境。如果執行成功時傳回 TRUE,則失敗時傳回 FALSE。
要注意的是:使用 rmdir() 函數刪除指定目錄時,這個目錄必須是空的,而且要有對應的權限。如果刪除一個不為空的目錄也會產生一個 E_WERNING 等級的錯誤。
下面透過具體程式碼範例來看看:刪除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 "目录不存在!"; } ?>
輸出結果為:
在重新開啟目錄,看看文件,會發現空目錄「img」不存在了。
但大部分情況下,我們需要刪除的目錄並不為空,裡面又會包含很多子檔案和子目錄,這要怎麼操作才能刪除指定目錄及其子檔案和目錄呢?
具體實作方法:可以遍歷這個目錄下的所有檔案和資料夾,並用遞歸的方式來逐一刪除這個目錄下的所有檔案和資料夾
下面給出具體的實作程式碼:
<?php function deldir($path){ //如果是目录则继续 if(is_dir($path)){ //扫描一个文件夹内的所有文件夹和文件并返回数组 $p = scandir($path); //如果 $p 中有两个以上的元素则说明当前 $path 不为空 if(count($p)>2){ foreach($p as $val){ //排除目录中的.和.. if($val !="." && $val !=".."){ //如果是目录则递归子目录,继续操作 if(is_dir($path.$val)){ //子目录中操作删除文件夹和文件 deldir($path.$val.'/'); }else{ //如果是文件直接删除 unlink($path.$val); } } } } } //删除目录 return rmdir($path); } //设置需要删除的文件夹 $path = "D:/demo/"; //调用函数,传入路径 deldir($path); ?>
好了就說到這裡了,有其他想知道的,可以點選這個喔。 → →PHP檔案基礎操作
#推薦:《PHP面試題大匯總(收藏)》《php影片教學》
以上是php檔案操作之去除給定路徑的檔案或目錄的詳細內容。更多資訊請關注PHP中文網其他相關文章!