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

如何限制用户创建子文件夹深度至3级,禁止4级及以上?

实现限制最多3级子文件夹的方案

嘿,这个需求完全可以搞定!核心思路就是先解析用户要操作的目录层级,判断是否已经达到3级上限,再决定是否允许创建新文件夹。结合你给出的CodeIgniter代码片段,我给你整理了具体的实现方案:

关键逻辑步骤

  • 解析传入的directory参数,分割成路径片段,计算当前目录的层级
  • 如果当前层级已经是3级,禁止创建子文件夹(否则新文件夹就是第4级)
  • 额外做一层验证:新文件夹创建后的总层级不能超过3
  • 加上安全过滤,防止非法字符和路径遍历攻击

修改后的完整代码示例

public function folder() {
    $json = array();
    $rawDirectory = $this->input->get('directory');
    $newFolder = $this->input->get('new_folder'); // 假设这是用户要创建的新文件夹名称参数

    // 安全过滤:移除非法字符,防止路径遍历攻击
    $directory = preg_replace('/[^a-zA-Z0-9\/\-_]/', '', $rawDirectory);
    $newFolder = preg_replace('/[^a-zA-Z0-9\-_]/', '', $newFolder);

    if (!empty($directory)) {
        // 分割路径并过滤空元素(处理末尾斜杠导致的空值)
        $pathSegments = array_filter(explode('/', $directory));
        $currentLevel = count($pathSegments);

        // 检查当前层级:如果已经是3级,再创建就是第4级,直接拒绝
        if ($currentLevel >= 3) {
            $json['error'] = '最多只能创建3级子文件夹,无法继续创建更深层级的目录!';
            echo json_encode($json);
            return;
        }

        // 验证新文件夹创建后的总层级
        if ($currentLevel + 1 > 3) {
            $json['error'] = '最多只能创建3级子文件夹,无法继续创建更深层级的目录!';
            echo json_encode($json);
            return;
        }

        $targetDir = FCPATH . 'images/' . $directory . '/';
        $fullNewDir = $targetDir . $newFolder;

        if (!is_dir($fullNewDir)) {
            // 创建文件夹,0755是常规目录权限
            @mkdir($fullNewDir, 0755);
            $json['success'] = '文件夹创建成功!';
        } else {
            $json['error'] = '该文件夹已存在!';
        }
    } else {
        // 根目录(第1级),允许创建第2级子文件夹
        $fullNewDir = FCPATH . 'images/' . $newFolder . '/';
        if (!is_dir($fullNewDir)) {
            @mkdir($fullNewDir, 0755);
            $json['success'] = '文件夹创建成功!';
        } else {
            $json['error'] = '该文件夹已存在!';
        }
    }

    echo json_encode($json);
}

细节说明

  1. 层级计算:用explode('/', $directory)把路径拆成片段,array_filter过滤掉空字符串(比如路径末尾的/会生成空元素),确保层级计算准确
  2. 安全防护:用正则过滤掉非法字符,避免用户输入../这类路径遍历的恶意内容
  3. 双重验证:既检查当前目录的层级,又验证新文件夹创建后的总层级,确保不会出现漏判的情况
  4. 权限设置:创建文件夹时用0755权限,保证目录能被正常访问但又不会有过高的权限风险

这样修改后,当用户尝试在3级目录下创建子文件夹时,就会收到错误提示,无法完成创建操作,完美满足你的需求!

内容的提问来源于stack exchange,提问作者user4419336

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:57:37