多张图片上传,如果图片已经存在,请更改名称


Multiple image upload, change name if image already exists

我有一个代码,可以像在windows系统中一样更改图像名称。如果有像cup.jpg这样的图像,代码会将名称更改为cup0.jpg。

然而,问题是,当我从阵列上传许多图像时,只有一些图像已经存在,需要更改名称。

需要进行哪些更改才能使用多个文件?

for($i=0; $i<count($_FILES['upload']['name']); $i++) {
  $target_file = $target_dir . basename($_FILES["upload"]["name"][$i]);
  $images[] = basename($_FILES['upload']['name'][$i]);
}
if (file_exists($target_file)) {
  $i = 0;
  echo " Image exists, changing name.";
  while (file_exists($target_file)) {
    $extension = pathinfo($target_file, PATHINFO_EXTENSION);
    $filename = pathinfo($target_file, PATHINFO_FILENAME);
    $new_filename = $filename . $i . $iterator . '.' . $extension;
    $target_file = $target_dir . $new_filename;
    $i++;
    $images[] = $new_filename;
  }
}

我尝试添加一个循环,但如果数组由新图像和现有图像组成,则代码不起作用,因此只有一些图像需要更改名称。

给你:

 $images = array();
 for($i=0; $i<count($_FILES['upload']['name']); $i++) {
    getUniqueName(basename($_FILES["upload"]["name"][$i]),$images);
 }
 function getUniqueName ($name, &$images) {
     $i = 0;
     $extension = pathinfo($name, PATHINFO_EXTENSION);
     $filename = pathinfo($name, PATHINFO_FILENAME);
     while (in_array($name, $images)) {
      $name =  $filename . $i . '.' . $extension;  
      $i++;
     }
    /* Need to define $target_dir here */
    $i=0;
    while (file_exists($target_dir.$name)) {
       $name =  $filename . $i . '.' . $extension;  
       $i++;
     }
     $images[]= $target_dir.$name;
   }