如何限制用户创建子文件夹深度至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); }
细节说明
- 层级计算:用
explode('/', $directory)把路径拆成片段,array_filter过滤掉空字符串(比如路径末尾的/会生成空元素),确保层级计算准确 - 安全防护:用正则过滤掉非法字符,避免用户输入
../这类路径遍历的恶意内容 - 双重验证:既检查当前目录的层级,又验证新文件夹创建后的总层级,确保不会出现漏判的情况
- 权限设置:创建文件夹时用
0755权限,保证目录能被正常访问但又不会有过高的权限风险
这样修改后,当用户尝试在3级目录下创建子文件夹时,就会收到错误提示,无法完成创建操作,完美满足你的需求!
内容的提问来源于stack exchange,提问作者user4419336
相关产品推荐
相关产品推荐

