php 刪除指定文件夾的實例講解
1、前言
目標:php刪除一個指定目錄
所使用的的php函數(shù):is_dir,opendir,readdir,scandir,rmdir,closedir,等等(注:其他文件操作函數(shù)也可以完成,這里只列舉了本次使用的函數(shù))
2、相關(guān)函數(shù)介紹
php文件操作的方法大致相同,已經(jīng)在上一篇介紹過了,這里就不在重復(fù)介紹,這里就介紹一個新函數(shù)
rmdir
詳情參考:http://www.w3school.com.cn/php/func_filesystem_rmdir.asp
3、代碼構(gòu)成
** * [delAllFile description] 刪除指定目錄 * @param [type] $dirName [description] 目錄 * @param [type] $file [description] 記錄的過程文件 * @param integer $type [description] 第一次默認打開新文件,第二次調(diào)用不打開 * @return [type] [description] */ public function delAllFile($dirName, $file, $type = 1) { $re = $this->checkDir($dirName); //默認第一次打開文件 if($type){ $file = fopen($file, 'w');//打開日志文件 } if($re){ $this->delFile($dirName, $file); }else{ fwrite($file,"{$dirName}清理完成\r\n"); } }
/** * [checkDir description] 檢測文件夾是否為空,為空直接刪除 * @param [type] $dirName [description] 文件夾名 * @return [type] [description] */ private function checkDir($dirName) { $a = scandir($dirName);//列出 images 目錄中的文件和目錄: //只包含.和..目錄的文件夾為空文件夾 if(sizeof($a) == 2){ rmdir($dirName); return false; } return true; } /** * [delFile description] 上傳文件的方法 * @param [type] $dirName [description] 目錄 * @param [type] $file [description] 記錄的文件 * @return [type] [description] */ private function delFile($dirName, $file) { $dh = openDir($dirName); while($handle = readdir($dh)){ if($handle == '.' || $handle == '..') { continue; } $resource = $dirName.'/'.$handle; //判斷是否是文件夾 if(is_dir($resource)) { //判斷文件夾是否為空 $re = $this->checkDir($dirName); if($re){ $this->delAllFile($resource, $file, 0); }else{ fwrite($file,"{$resource}清理完成\r\n"); continue; } }else{ unlink($resource); } } //關(guān)掉資源,刪除目錄 closedir($dh);//關(guān)閉目錄資源 fwrite($file,"{$dirName}清理完成\r\n"); rmdir($dirName);//刪除空目錄 }
然而,上面的代碼遇到子目錄層級高的時候,就容易出現(xiàn)一個警告,導(dǎo)致目錄無法刪除
故對于層級高的子集,需要在最后加上一個循環(huán)判斷,來判斷是否可以刪除,來避免這個錯誤
// //關(guān)掉資源,刪除目錄 // closedir($dh);//關(guān)閉目錄資源 // fwrite($file,"{$dirName}清理完成\r\n"); //rmdir($dirName);//刪除空目錄 //每次目錄層級高了就報錯,故加個循環(huán)處理 $i = 1; while($i){ $re = $this->checkDir($dirName); echo "$dirName $i 次<br/><hr/>"; $i++; if(!$re){ $i = 0; closedir($dh);//關(guān)閉目錄資源 fwrite($file,"{$dirName}清理完成\r\n"); } }
加上這層可以避免無法刪除的情況(有時候刪不掉是權(quán)限的問題)
4、結(jié)語
刪除一個目錄相對比較簡單,基本步驟為:
1、判斷是否是目錄,是目錄則遞歸調(diào)用自己,否則直接刪除文件;
2、判斷目錄是否為空,不為空 rmdir會拋出錯誤;
3、文件權(quán)限的問題(window,這個不是什么問題)
以上這篇php 刪除指定文件夾的實例講解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
dedecms 批量提取第一張圖片最為縮略圖的代碼(文章+軟件)
用了dedecms自帶的縮略圖批量獲取,因為代碼好像是只適用于文字,對于軟件就不能了,或兩者都不能。從網(wǎng)站看到了這段代碼,對于dedecms 5.1是沒問題的。2009-10-10thinkPHP5(TP5)實現(xiàn)改寫跳轉(zhuǎn)提示頁面的方法
這篇文章主要介紹了thinkPHP5(TP5)實現(xiàn)改寫跳轉(zhuǎn)提示頁面的方法,結(jié)合實例形式分析了thinkPHP5跳轉(zhuǎn)提示頁面的修改步驟與相關(guān)操作注意事項,需要的朋友可以參考下2017-10-10Mac版PhpStorm之XAMPP整合apache服務(wù)器配置的圖文教程詳解
選擇在PhpStorm集成apache服務(wù)器,但是很多朋友不知道是如何操作的,下面小編分步驟通過圖文的形式給大家介紹Mac版PhpStorm之XAMPP整合apache服務(wù)器配置的教程,感興趣的朋友一起看看吧2016-10-10Yii框架實現(xiàn)對數(shù)據(jù)庫的CURD操作示例
這篇文章主要介紹了Yii框架實現(xiàn)對數(shù)據(jù)庫的CURD操作,結(jié)合實例形式分析了Yii框架連接數(shù)據(jù)庫與CURD增刪改查等常見操作技巧,需要的朋友可以參考下2019-09-09Zend Framework教程之Zend_Db_Table表關(guān)聯(lián)實例詳解
這篇文章主要介紹了Zend Framework教程之Zend_Db_Table表關(guān)聯(lián)用法,結(jié)合實例形式較為詳細的分析了Zend_Db_Table表關(guān)聯(lián)的定義,實現(xiàn)方法與相關(guān)注意事項,需要的朋友可以參考下2016-03-03