簡體   English   中英

如何在php中增加文件名以防止重復

[英]How to increment filename in php to prevent duplicates

在許多情況下,創建文件時,我們需要在服務器上使文件名不同,以防止重復。 最常見的答案似乎是,將時間戳記附加在末尾或將文件名存儲在db中,然后使用這些存儲的值來計算新名稱。 這些都是好事,但是,附加較長的時間戳並不總是非常用戶友好的,並且在數據庫中存儲並非總是一種選擇。 那么,如何在通過php創建標准文件名時自動增加標准文件名呢?

這是我為此目的編寫的一個簡單函數:

function incrementFileName($file_path,$filename){
 if(count(glob($file_path.$filename))>0)
 {
     $file_ext = end(explode(".", $filename));
     $file_name = str_replace(('.'.$file_ext),"",$filename);
     $newfilename = $file_name.'_'.count(glob($file_path."$file_name*.$file_ext")).'.'.$file_ext;
     return $newfilename;
  }
  else
  {
     return $filename;
  }
}

用法:

$newName = incrementFileName( "uploads/", $_FILES["my_file"]["name"] );
move_uploaded_file($_FILES["my_file"]["tmp_name"],"uploads/".$newName);

所有這些答案似乎過分了:

$k = 0;
while(!$result){
    if(!file_exists("file[$k].ext"))
        $result = "file[$k].ext";
    $k++;
}
makefile($result);
function incrementFileName($file_path,$filename){
  $array = explode(".", $filename);
  $file_ext = end($array);
  $root_name = str_replace(('.'.$file_ext),"",$filename);
  $file = $file_path.$filename;
  $i = 1;
  while(file_exists($file)){
    $file = $file_path.$root_name.$i.'.'.$file_ext;
    $i++;
  }
  return $file;
}

這是一個簡短的代碼段,演示了如何開始解決此問題。

// handle filename collision:
if(file_exists($newFile)) {
    // store extension and file name
    $extension = pathinfo($newFile,PATHINFO_EXTENSION);
    $filename = pathinfo($newFile, PATHINFO_FILENAME);

    // Start at dup 1, and keep iterating until we find open dup number
    $duplicateCounter = 1;
    // build a possible file name and see if it is available
    while(file_exists($iterativeFileName =
                        $newPath ."/". $filename ."_". $duplicateCounter .".". $extension)) {
        $duplicateCounter++;
    }

    $newFile = $iterativeFileName;
}

// If we get here, either we've avoided the if statement altogether, and no new name is necessary..
// Or we have landed on a new file name that is available for our use.
// In either case, it is now safe to create a file with the name $newFile

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM