如果用PHP函數刪除目錄若目錄中有檔案,則會刪除失敗,使用rmdir()也只能刪空目錄,有資料的目錄是無法刪除,所以必須要先用程式吧目錄內的檔案全部刪除,最後再刪除目錄,這裡分享一個好用的遞迴刪除目錄及目錄內容的function,另外還加上了若刪除失敗則更改目錄檔名的function,兩個一起使用就沒問題了,CODE如下:
//變更資料夾檔名
function changedirectory($changedate) {
$date=date("Ymd");
if(!empty(rename($changedate, $changedate."_bak_{$date}"))) return true;
}
//刪除目錄包含內容物件
function fileunlink_r($from) {
if (!file_exists($from)) {return false;}
$dir = opendir($from);
while (false !== ($file = readdir($dir))) {
if ($file == '.' OR $file == '..') {continue;}
if (is_dir($from . DIRECTORY_SEPARATOR . $file)) {
fileunlink_r($from . DIRECTORY_SEPARATOR . $file);
}
else {
unlink($from . DIRECTORY_SEPARATOR . $file);
}
}
if(!empty(rmdir($from))) $returnvar=true;
closedir($dir);
return $returnvar;
}
1、吧以下兩個function貼到Xoops模組的function.php裡面
function changedirectory($changedate) {
$date=date("Ymd");
if(!empty(rename($changedate, $changedate."_bak_{$date}"))) return true;
}
//刪除目錄包含內容物件
function fileunlink_r($from) {
if (!file_exists($from)) {return false;}
$dir = opendir($from);
while (false !== ($file = readdir($dir))) {
if ($file == '.' OR $file == '..') {continue;}
if (is_dir($from . DIRECTORY_SEPARATOR . $file)) {
fileunlink_r($from . DIRECTORY_SEPARATOR . $file);
}
else {
unlink($from . DIRECTORY_SEPARATOR . $file);
}
}
if(!empty(rmdir($from))) $returnvar=true;
closedir($dir);
return $returnvar;
}
2、在執行刪除的php上引入這兩支php函式
//刪除資料夾及底下資料($from為刪除檔案目錄的實體路徑)
$Filevar=fileunlink_r($from=XOOPS_ROOT_PATH.'/uploads/'.$xoopsModule->getVar("dirname").'/file');
//無法刪除時變更檔名
if(empty($Filevar)) changedirectory($changedate=$from);
這樣就ok了,看是要單獨刪除還是迴圈刪除都沒問題,若主機沒有刪除權限也能更改檔名為bak,有需要的朋友參考看看
工作心得撰寫:徐嘉裕 Neil hsu
留言
張貼留言