程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP遞歸刪除文件與目錄函數

PHP遞歸刪除文件與目錄函數

編輯:關於PHP編程

在php中刪除文件與目錄rmdir()函數就可以搞定,但是要刪除一個非空目錄,將不能進行快速的刪除,必須先將目錄中文件刪除,但是目錄裡可能還會有子目錄所以要進行PHP遞歸刪除目錄


遞歸函數為自調用函數,在函數體內直接或間接自己調用自己,但需要設置自調用的條件,若滿足條件,則調用函數本身,若不滿足則終止本函數的自調用,然後把目前流程的主控權交回給上一層函數來執行。

我們來看一個經典的遞歸刪除函數

函數的作用:刪除目錄下面的所有文件,並刪除目錄

函數代碼:

 代碼如下 復制代碼

<?php 
function deldir($dirname){ 
    if(file_exists($dirname)){//首先判斷目錄是否有效 
        $dir = opendir($dirname);//用opendir打開目錄 
        while($filename = readdir($dir)){//使用readdir循環讀取目錄裡的內容 
         if($filename != "." && $filename != ".."){//排除"."和".."這兩個特殊的目錄 
            $file = $dirname."/".$filename; 
            if(is_dir($file)){//判斷是否是目錄,如果是則調用自身 
                deldir($file); //使用遞歸刪除子目錄   
            }else{ 
              @unlink($file);//刪除文件 
            } 
          } 
        } 
            closedir($dir);//關閉文件操作句柄 
            rmdir($dirname);//刪除目錄 
    } 

?>

使用實例:Public是一個文件夾,裡面有許多文件夾和文件,調用deldir($dirname)把它刪除

<?php 
$dir='Public';//傳入一個文件夾路徑 
deldir($dir);//調用函數 
?>

說明:首先判斷Public是否存在,如果在則打開Public,然後使用readdir循環讀取Public目錄裡的內容,如果存在"."和".."這兩個特殊目錄則排除掉。如果遇到文件夾則調用自身處理,直到條件不滿足。遇到文件則直接刪除掉。最後層層跳出刪除Public。


實例二,刪除非空目錄

 代碼如下 復制代碼

/*
 自定義的刪除函數,可以刪除文件和遞歸刪除文件夾
*/
 function my_del($path)
{
 if(is_dir($path))
 {
   $file_list= scandir($path);
   foreach ($file_list as $file)
   {
    if( $file!='.' && $file!='..')
    {
     my_del($path.'/'.$file);
    }
   }
   @rmdir($path);  //這種方法不用判斷文件夾是否為空, 因為不管開始時文件夾是否為空,到達這裡的時候,都是空的  
 }
 else
 {
  @unlink($path);    //這兩個地方最好還是要用@屏蔽一下warning錯誤,看著鬧心
 }

}


$path='d:/技術文檔 - 副本';    //要刪除的文件夾

//如果php文件不是ANSI,而是UTF-8模式,而且要刪除的文件夾中包含漢字字符的話,調用函數前需要轉碼
//$path=iconv( 'utf-8', 'gb2312',$path );

my_del($path); 

例3,可查看成功之失敗原因

 代碼如下 復制代碼 <?php   
functiondeletedir($dir){   
if(!handle=@opendir($dir)){//檢測要打開目錄是否存在   
die("沒有該目錄");   
}   
while(false!==($file=readdir($handle))){   
if($file!=="."&&$file!==".."){//排除當前目錄與父級目錄   
$file=$dir.DIRECTORY_SEPARATOR.$file;   
if(is_dir($file)){   
deletedir($file);   
}else{   
if(@unlink($file)){   
echo"文件<b>$file</b>刪除成功。<br>";   
}else{   
echo"文件<b>$file</b>刪除失敗!<br>";   
}   
}   
}   
if(@rmdir($dir)){   
echo"目錄<b>$dir</b>刪除成功了。<br>n";   
}else{   
echo"目錄<b>$dir</b>刪除失敗!<br>n";   
}   
}   
 
//測試程序   
$dir="/var/www/test";   
deletedir($dir);   
?>  

 
在/var/www/test文件夾下建一寫文件夾和文件測試   
shell>touchaaa   
shell>touchbbb   
shell>touchccc   
shell>toucheee   
shell>touchffff   
shell>mkdir111   
shell>mkdir222   
shell>mkdir333   
分別再在111,222,333文件夾下建寫文件這裡就不多說了,然後給他們權限   
shell>chown[url]www.www[/url]test-R

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved