PHP遞迴刪除檔案與目錄函式_PHP教程

來源:互聯網
上載者:User
在php中刪除檔案與目錄rmdir()函數就可以搞定,但是要刪除一個非空目錄,將不能進行快速的刪除,必須先將目錄中檔案刪除,但是目錄裡可能還會有子目錄所以要進行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)把它刪除

$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"檔案$file刪除成功。
";
}else{
echo"檔案$file刪除失敗!
";
}
}
}
if(@rmdir($dir)){
echo"目錄$dir刪除成功了。
n";
}else{
echo"目錄$dir刪除失敗!
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

http://www.bkjia.com/PHPjc/632793.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632793.htmlTechArticle在php中刪除檔案與目錄rmdir()函數就可以搞定,但是要刪除一個非空目錄,將不能進行快速的刪除,必須先將目錄中檔案刪除,但是目錄裡可...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.