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),然后创建目录(不起作用)
因此,基本上如何检查现有文件名,并动态创建一个唯一的名称目录。所有的帮助都表示赞赏:)
修复了它 - 我混淆了循环中的变量。
发布以供将来参考:
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;
}
}
}