2012-07-06 93 views
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循環,我認爲......PHP:創建獨特的目錄名稱

我試圖做的是:

  • 提交新的目錄名稱到腳本
  • 清潔,逃離這個名字
  • 檢查其對現有目錄中的那個位置($pattern
  • 如果沒有衝突,創建目錄(作品)
  • 如果有衝突,追加一個數字(例如,我的目錄2)然後創建目錄(不起作用)

因此,基本上如何檢查現有的文件名,並動態地創建一個唯一的名稱目錄。所有幫助表示讚賞:)

+0

您還可以找到在此非常類似的問題的一些替代方法:http://stackoverflow.com/q/1707801/176974 – jap1968 2015-03-06 09:23:43

回答

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; 
     } 
    } 
}