多个图像上传,如果图像已存在则更改名称

时间:2015-03-31 18:45:48

标签: php arrays image upload

我有一个代码可以更改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;
  }
}

我尝试添加循环,但如果数组由新图像和已存在的图像组成,则代码不起作用,因此只有部分图像需要更改名称。

1 个答案:

答案 0 :(得分:0)

你去吧:

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