【问题标题】:Php - delete directory content except some elementsphp - 删除除某些元素外的目录内容
【发布时间】:2014-09-23 03:08:46
【问题描述】:

我想删除除某些文件之外的所有目录内容有一个描述:

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

<?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

?>

【问题讨论】:

  • 所以获取目录中的文件列表(例如$files = glob('*'),从阵列中删除您想要保留的文件,然后foreach($files as $file) { unlink($file); }

标签: php


【解决方案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 函数实际运行它之前,您可能只想将要删除的文件回显到屏幕上,这样您就不会意外删除要保留的文件。

【讨论】:

  • 感谢我需要的东西,但不仅仅是我想要保留的文件,还有目录,所以我像这样添加它们? $filesToKeep = array( 'index.php', 'i.php', 'directoryName, 'c.php' ); 我还有另一个问题,我要删除的元素是一个目录,我也有这个错误unlink(images): Is a directory in delete.php line 25
  • 是的。添加它们的方式与添加文件的方式相同。只需确保在使用 unlink 运行它之前查看 glob 的输出。编辑:没有。生病添加 rmdir 用于目录删除。
  • 啊啊好吧我试试看^^
  • @user3925763 查看我更新的代码。如果它是一个目录,我添加了 rmdir。它会解决这个问题
【解决方案2】:

感谢@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

?>

【讨论】:

    猜你喜欢
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多