2013-03-26 40 views
6

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

回答

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

所有这些问题的答案似乎矫枉过正:

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