Php - 删除除某些元素之外的目录内容

时间:2014-09-22 17:53:13

标签: php

我想删除所有目录内容,除了一些文件有一个描述: the directories that i don't want to delete them is marked

之所以我需要删除除了那些文件之外的所有内容导致其他文件(我想要删除它们)生成所以我不知道他们的名字,有一些想法这样做吗? 这是我尝试创建它的脚本:

<?php
$filesToKeep = array(
    'index.php',
    'i.php',
    'c.php'
);

$dirList = glob('*');
foreach ($dirList as $file) {
    if (! in_array($file, $filesToKeep)) {

            unlink($file);
        }//END IF
    }//END IF
}//END FOREACH LOOP

?>

2 个答案:

答案 0 :(得分:1)

正如Mark在评论中提到的那样,除了目录中的特定文件之外,删除所有文件的方式是使用glob

<?php
$filesToKeep = array(
    'index.php',
    'i.php',
    'c.php'
);

$dirList = glob('*');
foreach ($dirList as $file) {
    if (! in_array($file, $filesToKeep)) {
        if (is_dir($file)) {
            rmdir($file);
        } else {
            unlink($file);
        }//END IF
    }//END IF
}//END FOREACH LOOP

?>

将所有文件名放在要保留的$filesToKeep数组中。运行foreach循环时,它将保留$filesToKeep数组中找到的所有文件。也许在使用unlink函数实际运行之前,您可能只想回显将首先删除的文件,以便您不会意外删除要保留的文件。

答案 1 :(得分:1)

感谢@ Mic1780我们可以做到这一点,但它不断返回错误:

'directoryName' is not empty 所以我们需要一个递归函数来做到这一点,这就是整个代码:

<?php
 function rrmdir($dir) {
   if (is_dir($dir)) {
     $objects = scandir($dir);
     foreach ($objects as $object) {
       if ($object != "." && $object != "..") {
         if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
       }
     }
     reset($objects);
     rmdir($dir);
   }
 }
$filesToKeep = array(
    'iall.php',
    'a0a058baaeef16e88f6bd2ee36c03f6f',
    'index.php',
    'a0a058baaeef16e88f6bd2ee36c03f6f.php',
    'c.txt',
    'i.php',
    'c.php'
);

$dirList = glob('*');
foreach ($dirList as $file) {
    if (! in_array($file, $filesToKeep)) {
        if (is_dir($file)) {
            rrmdir($file);
        } else {
            unlink($file);
        }//END IF
    }//END IF
}//END FOREACH LOOP

?>