删除包含文件的目录?

2022-08-30 06:06:42

我想知道,删除包含所有文件的目录的最简单方法是什么?

我用于删除文件夹,但是,如果其中包含文件,我根本无法删除它。rmdir(PATH . '/' . $value);


答案 1

现在至少有两种选择。

  1. 在删除文件夹之前,请删除其所有文件和文件夹(这意味着递归!下面是一个示例:

    public static function deleteDir($dirPath) {
        if (! is_dir($dirPath)) {
            throw new InvalidArgumentException("$dirPath must be a directory");
        }
        if (substr($dirPath, strlen($dirPath) - 1, 1) != '/') {
            $dirPath .= '/';
        }
        $files = glob($dirPath . '*', GLOB_MARK);
        foreach ($files as $file) {
            if (is_dir($file)) {
                self::deleteDir($file);
            } else {
                unlink($file);
            }
        }
        rmdir($dirPath);
    }
    
  2. 如果您使用的是 5.2+,则可以使用递归迭代器来完成此操作,而无需自己实现递归:

    $dir = 'samples' . DIRECTORY_SEPARATOR . 'sampledirtree';
    $it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
    $files = new RecursiveIteratorIterator($it,
                 RecursiveIteratorIterator::CHILD_FIRST);
    foreach($files as $file) {
        if ($file->isDir()){
            rmdir($file->getRealPath());
        } else {
            unlink($file->getRealPath());
        }
    }
    rmdir($dir);
    

答案 2

我通常使用它来删除文件夹中的所有文件:

array_map('unlink', glob("$dirname/*.*"));

然后你可以做

rmdir($dirname);

推荐