📌  相关文章
📜  如何在PHP递归删除目录及其全部内容(文件 + 子目录)?(1)

📅  最后修改于: 2023-12-03 15:08:56.325000             🧑  作者: Mango

如何在PHP递归删除目录及其全部内容(文件 + 子目录)?

有时候需要在PHP代码中删除目录及其全部内容,包括子目录和文件。本文将介绍如何使用递归方法来删除目录和文件。

使用rmdir函数删除空目录

在PHP中,可以使用rmdir函数来删除空目录。这个函数非常简单,它只接受一个参数,即要删除的目录的路径。例如:

if (rmdir('/path/to/dir')) {
    echo '目录删除成功';
} else {
    echo '目录删除失败';
}

这个函数的问题是,它只能删除空目录。如果要删除非空目录,就需要使用递归方法。

使用递归方法删除目录及其全部内容

要删除非空目录,可以使用递归方法。具体来说,可以先递归删除子目录和文件,最后再删除目录本身。以下是一个示例代码:

function deleteDir($dirPath) {
    if (!is_dir($dirPath)) {
        throw new InvalidArgumentException("$dirPath 不是一个目录");
    }
    if (substr($dirPath, strlen($dirPath) - 1, 1) != '/') {
        $dirPath .= '/';
    }
    $files = glob($dirPath . '*', GLOB_MARK);
    foreach ($files as $file) {
        if (is_dir($file)) {
            deleteDir($file);
        } else {
            unlink($file);
        }
    }
    rmdir($dirPath);
}

这个函数接受一个路径作为参数,然后使用glob函数获取该路径下的全部文件和子目录。接着,它遍历这些文件和子目录,如果是目录就递归删除,如果是文件就直接删除。最后,它删除目录本身。

使用方法很简单,只需调用这个函数并传入要删除的目录的路径即可。例如:

deleteDir('/path/to/dir');

这个函数非常实用,可以帮助你快速清理目录和文件。但要注意,一定要小心使用,以免误删重要数据。