PHP删除指定目录下面的所有文件和目录,可排除文件

我真的哭了啊!

折腾半天,结果glob这个函数有点坑,无法获取到.开头的系统隐藏文件,于是折腾半天,原来发现还有其他函数可以查询所有文件!

PHP 删除指定目录下面的所有文件以及目录,函数两个参数,一个是删除的目录,一个是不需要删除的文件数组

function deleteDirectory($directory, $excludes = []) {
    // 判断目录是否存在
    if (!is_dir($directory)) {
        throw new Exception("目录 $directory 不存在");
    }

    // 获取目录中的所有文件和目录
    $files = array_diff(scandir($directory), ['.', '..']);

    // 遍历所有文件和目录
    foreach ($files as $file) {
        $path = $directory . DIRECTORY_SEPARATOR . $file;
        // 如果是目录,递归处理子目录
        if (is_dir($path)) {
            deleteDirectory($path, $excludes);
            rmdir($path);
        }
        // 如果是文件,并且不在不需要删除的文件列表中,就删除文件
        elseif (is_file($path) && !in_array($file, $excludes)) {
            unlink($path);
        }
    }
}

该函数有两个参数:$directory 表示要删除的目录,$excludes 表示不需要删除的文件列表,是一个数组。如果要删除的目录不存在,函数会抛出异常。

函数首先使用 scandir 函数获取目录中的所有文件和目录,并使用 array_diff 函数去掉 ...,得到一个仅包含文件和目录名的数组。然后遍历所有文件和目录,如果是目录,就递归调用自身,处理子目录,并使用 rmdir 函数删除空目录;如果是文件,并且不在不需要删除的文件列表中,就使用 unlink 函数删除文件。

调用方法

// 删除 /path/to/directory 目录下的所有文件和目录,但不删除 1.php 和 2.php
$directory = '/path/to/directory';
$excludes = ['1.php', '2.php'];
deleteDirectory($directory, $excludes);
© 版权声明
THE END
喜欢就支持一下吧
点赞12
评论 抢沙发

请登录后发表评论

    暂无评论内容