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

时间:2023年10月04日

/

来源:网络

/

编辑:佚名

我真的哭了啊!
折腾半天,结果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);
猜你需要

豫ICP备2021026617号-1  豫公网安备:41172602000185   Copyright © 2021-2028 www.78moban.com/ All Rights Reserved

本站作品均来自互联网,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如有侵犯您的版权,请联系 1565229909#qq.com(把#改成@),我们将立即处理。