How to increment filename in php to prevent duplicates

前端 未结 4 1606
忘了有多久
忘了有多久 2020-12-10 17:02

In many situations, we need to make the filename different on the server when creating them to prevent duplication. And the most common answer to that seems to be, append th

相关标签:
4条回答
  • 2020-12-10 17:23

    All these answers seem overkill:

    $k = 0;
    while(!$result){
        if(!file_exists("file[$k].ext"))
            $result = "file[$k].ext";
        $k++;
    }
    makefile($result);
    
    0 讨论(0)
  • 2020-12-10 17:26
    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;
    }
    
    0 讨论(0)
  • 2020-12-10 17:29

    Here's a simple function I wrote for this purpose:

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

    USAGE:

    $newName = incrementFileName( "uploads/", $_FILES["my_file"]["name"] );
    move_uploaded_file($_FILES["my_file"]["tmp_name"],"uploads/".$newName);
    
    0 讨论(0)
  • 2020-12-10 17:41

    Here is a short code snippet that demonstrates how you might start solving this problem.

    // 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
    
    0 讨论(0)
提交回复
热议问题