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.'';
            $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)
  • 競合がない場合は、ディレクトリを作成します(動作します)
  • 競合がある場合は、番号を追加して (例: My Directory 2)、ディレクトリを作成します (機能しません)。

したがって、基本的に既存のファイル名と照合し、一意の名前のディレクトリを動的に作成する方法。すべての助けに感謝します:)

4

1 に答える 1

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;
        }
    }
}
于 2012-07-07T14:30:20.493 に答える