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

时间:2013-03-26 09:17:08

标签: php

在许多情况下,我们需要在创建服务器时使文件名不同,以防止重复。最常见的答案似乎是,在最后添加时间戳或将文件名存储在数据库中,并使用这些存储的值来计算新名称。这些都是好的,但是,附加一个长时间戳并不总是非常用户友好,并且存储在数据库中并不总是一个选项。那么,如何在通过php创建标准文件名时自动增加标准文件名呢?

4 个答案:

答案 0 :(得分:8)

这是我为此目的编写的一个简单函数:

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

答案 1 :(得分:6)

所有这些答案似乎都有点过分了:

$k = 0;
while(!$result){
    if(!file_exists("file[$k].ext"))
        $result = "file[$k].ext";
    $k++;
}
makefile($result);

答案 2 :(得分:1)

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

答案 3 :(得分:0)

这是一个简短的代码段,演示了如何开始解决此问题。

 WITH CALCULATED MEMBER [Stats].[Stats-Time].[Prior Year] AS
 ([Stats].[Stats-Time].defaultmember, prevYear() ), SOLVE_ORDER = 1000

SELECT [Time].[Year].[Year] on 0
, {[Stats].[Stats-Time].[L-Stats-Time].&[Value], [Stats].[Stats-Time].[Prior Year]} on 1
FROM sales
WHERE [Measures].[Amount] * {[Customers].[Geography].[Region].[Europe].[Netherlands]}