根据条件在上载后重命名文件

时间:2015-06-21 05:20:18

标签: php rename revision

如果我在PHP中上传两个具有相同名称的文件,则最新版本会覆盖旧版本。为了防止这种情况,我编写了以下代码。但是,每当我从HTML选择框中选择Minor时,它似乎都会超时。我认为它与我的变量$i的分配方式有关。有什么想法吗?

if ( isset( $_POST['addfile'] ) ) {

// variables
define('UPLOAD_DIR', 'repository/'); 
$fileName = $_FILES['fileToUpload'];

if($_POST['rev_type'] == 'Minor') {

    function update_file_name_minor($file) 
    {
      $pos = strrpos($file,'.');
      $ext = substr($file,$pos); 
      $dir = strrpos($file,'/');
      $dr  = substr($file,0,($dir+1)); 

      $arr = explode('/',$file);
      $fName = substr($arr[(count($arr) - 1)], 0, -strlen($ext));

      $exist = FALSE;
      $i = 0.01;

      while(!$exist)
      {
        $file = $dr.$fName.'_'.'Ver '.$i.$ext;

        if(!file_exists($file))
          $exist = TRUE;

        $i + 0.01;
      }

      return $file;
    }

    // check for which action should be taken if file already exist
    if(file_exists(UPLOAD_DIR . $fileName['name'])) 
    {
      $updatedFileName = update_file_name_minor(UPLOAD_DIR.$fileName['name']);
      move_uploaded_file($fileName['tmp_name'], $updatedFileName);

      echo "You have successfully uploaded and renamed the file as a minor revision.";
    }
    else
    {
      move_uploaded_file($fileName['tmp_name'], UPLOAD_DIR.$fileName['name']);

     echo "You have successfully uploaded the file.";
    }

}

elseif($_POST['rev_type'] == 'Major') {

    function update_file_name_major($file) 
    {
      $pos = strrpos($file,'.');
      $ext = substr($file,$pos); 
      $dir = strrpos($file,'/');
      $dr  = substr($file,0,($dir+1)); 

      $arr = explode('/',$file);
      $fName = substr($arr[(count($arr) - 1)], 0, -strlen($ext));

      $exist = FALSE;
      $i = 2;

      while(!$exist)
      {
        $file = $dr.$fName.'_'.'Ver '.$i.$ext;

        if(!file_exists($file))
          $exist = TRUE;

        $i++;
      }

      return $file;
    }

    // check for which action should be taken if file already exist
    if(file_exists(UPLOAD_DIR . $fileName['name'])) 
    {
      $updatedFileName = update_file_name_major(UPLOAD_DIR.$fileName['name']);
      move_uploaded_file($fileName['tmp_name'], $updatedFileName);

      echo "You have successfully uploaded and renamed the file as a major revision.";
    }
    else
    {
      move_uploaded_file($fileName['tmp_name'], UPLOAD_DIR.$fileName['name']);

     echo "You have successfully uploaded the file.";
    }           
  }         
} //main if

2 个答案:

答案 0 :(得分:0)

您可以在上传后重命名文件。像这样。

    function random_string($length) {
           $key = '';
           $keys = array_merge(range(0, 9), range('a', 'z'));

        for ($i = 0; $i < $length; $i++) {
             $key .= $keys[array_rand($keys)];
               }

         return $key;
            }

         $filename_tmp=random_string(8);
         $filename=$filename_tmp.".jpg";
  // $filename is autogenerated unique name with 8 Digit.

 // Then change this line:
        move_uploaded_file($_FILES["image"]["tmp_name"],"UPLOAD_DIR/".$filename);    

答案 1 :(得分:0)

$fName = current(explode(".",end(explode("/",$file))));并更改$('[id*=_textarea]') 以确保文件名正确设置为文件位置。