PHP:创建唯一的目录名称

时间:2012-07-06 17:15:58

标签: php dynamic directory

if(!empty($_POST['newdir'])) {
    $dir_base= preg_replace("/[^a-zA-ZÀ-ÿ0-9\s]/",'',$_POST['newdir']);
    $dir_path=$pattern.$dir_base;
    $dir_path_lwr = strtolower($dir_path);

    $old_dirs = glob($pattern.'*', GLOB_ONLYDIR);
    $old_dirs_lwr = array_map('strtolower', $old_dirs);

    $i = 1;
    $cond = true;
    while($cond) {

        if(in_array($dir_path_lwr, $old_dirs_lwr)) {
            $i++;
            $new_base=$dir_base.' '.$i.'';
            $new_path= $pattern.$new_base;
            $dir_path_lwr = strtolower($new_path);
        }
        elseif(!in_array($dir_path_lwr, $old_dirs_lwr)) {
            mkdir($dir_path, 0755);
            $cond = false;
        }
    }
}

编辑已将上述内容更改为最新版本。对于测试,我现在只是回显$cond var,而不是在整个地方创建目录。 “Not In”参数工作正常 - 当找到重复的名称时,在白色筛选之前,页面需要大约10到12秒才能加载。我觉得我的while循环有问题......

我要做的是:

  • 向脚本提交新目录名
  • 清理并转义该名称
  • 根据该位置($pattern
  • 中的现有目录进行检查
  • 如果没有冲突,请创建目录(工作)
  • 如果存在冲突,请附加一个号码(例如,我的目录2),然后创建目录(不起作用)

因此,基本上如何检查现有文件名,并动态创建唯一的名称目录。所有帮助表示赞赏:)

1 个答案:

答案 0 :(得分:1)

修正了它 - 我在循环中混淆了变量。

发布以供将来参考:

if(!empty($_POST['newdir'])) {
    $dir_base= preg_replace("/[^a-zA-ZÀ-ÿ0-9\s]/",'',$_POST['newdir']);
    $dir_path=$pattern.$dir_base;
    $dir_path_lwr = strtolower($dir_path);

    $old_dirs = glob($pattern.'*', GLOB_ONLYDIR);
    $old_dirs_lwr = array_map('strtolower', $old_dirs);

    $i = 1;
    $cond = true;
    while($cond) {

        if(in_array($dir_path_lwr, $old_dirs_lwr)) {
            $i++;
            $new_base=$dir_base.' '.$i.'';
            $dir_path= $pattern.$new_base;
            $dir_path_lwr = strtolower($dir_path);
        }
        elseif(!in_array($dir_path_lwr, $old_dirs_lwr)) {
            mkdir($dir_path, 0755);
            $cond = false;
        }
    }
}