You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CodeIgniter4中删除主文件夹及其所有子文件夹与文件?

解决PHP删除包含子文件夹的目录问题

原代码的核心问题是:rmdir() 仅能删除空文件夹,当子文件夹内还有文件或嵌套子目录时,直接调用 rmdir() 会执行失败,这就是你无法删除子文件夹的原因。

方案一:递归函数实现(跨平台通用)

通过递归遍历目录结构,先清空子文件夹内的所有内容,再删除空的子文件夹,最后删除主目录:

function deleteDir(string $dir): bool
{
    if (!is_dir($dir)) {
        return false;
    }

    // 遍历目录下所有项,GLOB_BRACE确保匹配所有文件类型,处理空目录返回false的情况
    $items = glob($dir . '/*', GLOB_BRACE) ?: [];
    foreach ($items as $item) {
        // 递归删除子目录,直接删除文件
        is_dir($item) ? deleteDir($item) : unlink($item);
    }

    // 删除最终空的主目录
    return rmdir($dir);
}

// 调用示例,替换为你的目标目录路径
deleteDir('/path/to/your/target/dir');

方案二:系统命令实现(高效但需注意环境)

如果服务器允许执行系统命令,可使用更高效的方式,注意区分操作系统:

// Linux/Unix 环境
$dirPath = escapeshellarg('/path/to/your/target/dir'); // 必须转义路径防止命令注入
exec("rm -rf $dirPath");

// Windows 环境
$dirPath = escapeshellarg('C:\path\to\your\target\dir');
exec("rmdir /s /q $dirPath");

注意:使用系统命令时,务必用 escapeshellarg() 转义路径,避免命令注入风险;同时要确保PHP进程对目标目录有足够的权限。

额外注意事项

  • 操作前务必确认目录路径正确,避免误删重要文件;
  • 确保PHP对目标目录及所有子目录、文件拥有写入/删除权限;
  • 若处理极深层嵌套目录,递归函数可能触发栈溢出,可改用迭代方式(栈/队列实现非递归遍历)。

内容的提问来源于stack exchange,提问作者XRT-NoOne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:48:13