php 刪除指定文件夾的實(shí)例講解
1、前言
目標(biāo):php刪除一個(gè)指定目錄
所使用的的php函數(shù):is_dir,opendir,readdir,scandir,rmdir,closedir,等等(注:其他文件操作函數(shù)也可以完成,這里只列舉了本次使用的函數(shù))
2、相關(guān)函數(shù)介紹
php文件操作的方法大致相同,已經(jīng)在上一篇介紹過(guò)了,這里就不在重復(fù)介紹,這里就介紹一個(gè)新函數(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] 記錄的過(guò)程文件
* @param integer $type [description] 第一次默認(rèn)打開(kāi)新文件,第二次調(diào)用不打開(kāi)
* @return [type] [description]
*/
public function delAllFile($dirName, $file, $type = 1) {
$re = $this->checkDir($dirName);
//默認(rèn)第一次打開(kāi)文件
if($type){
$file = fopen($file, 'w');//打開(kāi)日志文件
}
if($re){
$this->delFile($dirName, $file);
}else{
fwrite($file,"{$dirName}清理完成\r\n");
}
}
/**
* [checkDir description] 檢測(cè)文件夾是否為空,為空直接刪除
* @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);//刪除空目錄
}
然而,上面的代碼遇到子目錄層級(jí)高的時(shí)候,就容易出現(xiàn)一個(gè)警告,導(dǎo)致目錄無(wú)法刪除

故對(duì)于層級(jí)高的子集,需要在最后加上一個(gè)循環(huán)判斷,來(lái)判斷是否可以刪除,來(lái)避免這個(gè)錯(cuò)誤
// //關(guān)掉資源,刪除目錄
// closedir($dh);//關(guān)閉目錄資源
// fwrite($file,"{$dirName}清理完成\r\n");
//rmdir($dirName);//刪除空目錄
//每次目錄層級(jí)高了就報(bào)錯(cuò),故加個(gè)循環(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");
}
}
加上這層可以避免無(wú)法刪除的情況(有時(shí)候刪不掉是權(quán)限的問(wèn)題)
4、結(jié)語(yǔ)
刪除一個(gè)目錄相對(duì)比較簡(jiǎn)單,基本步驟為:
1、判斷是否是目錄,是目錄則遞歸調(diào)用自己,否則直接刪除文件;
2、判斷目錄是否為空,不為空 rmdir會(huì)拋出錯(cuò)誤;
3、文件權(quán)限的問(wèn)題(window,這個(gè)不是什么問(wèn)題)
以上這篇php 刪除指定文件夾的實(shí)例講解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
dedecms 批量提取第一張圖片最為縮略圖的代碼(文章+軟件)
用了dedecms自帶的縮略圖批量獲取,因?yàn)榇a好像是只適用于文字,對(duì)于軟件就不能了,或兩者都不能。從網(wǎng)站看到了這段代碼,對(duì)于dedecms 5.1是沒(méi)問(wèn)題的。2009-10-10
thinkPHP5(TP5)實(shí)現(xiàn)改寫(xiě)跳轉(zhuǎn)提示頁(yè)面的方法
這篇文章主要介紹了thinkPHP5(TP5)實(shí)現(xiàn)改寫(xiě)跳轉(zhuǎn)提示頁(yè)面的方法,結(jié)合實(shí)例形式分析了thinkPHP5跳轉(zhuǎn)提示頁(yè)面的修改步驟與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2017-10-10
Mac版PhpStorm之XAMPP整合apache服務(wù)器配置的圖文教程詳解
選擇在PhpStorm集成apache服務(wù)器,但是很多朋友不知道是如何操作的,下面小編分步驟通過(guò)圖文的形式給大家介紹Mac版PhpStorm之XAMPP整合apache服務(wù)器配置的教程,感興趣的朋友一起看看吧2016-10-10
PHP如何通過(guò)帶尾指針的鏈表實(shí)現(xiàn)''隊(duì)列''
這篇文章主要介紹了PHP如何通過(guò)帶尾指針的鏈表實(shí)現(xiàn)'隊(duì)列',幫助大家更好的理解和使用php,感興趣的朋友可以了解下2020-10-10
Yii框架實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的CURD操作示例
這篇文章主要介紹了Yii框架實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的CURD操作,結(jié)合實(shí)例形式分析了Yii框架連接數(shù)據(jù)庫(kù)與CURD增刪改查等常見(jiàn)操作技巧,需要的朋友可以參考下2019-09-09
Zend Framework教程之Zend_Db_Table表關(guān)聯(lián)實(shí)例詳解
這篇文章主要介紹了Zend Framework教程之Zend_Db_Table表關(guān)聯(lián)用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Zend_Db_Table表關(guān)聯(lián)的定義,實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-03-03
UTF8編碼內(nèi)的繁簡(jiǎn)轉(zhuǎn)換的PHP類
在網(wǎng)上找了很久都沒(méi)有找到UTF8字符集內(nèi)的繁簡(jiǎn)轉(zhuǎn)換,或許網(wǎng)上已經(jīng)有人寫(xiě)過(guò)這樣的代碼。2009-07-07

