2012-12-29 35 views
3

在PHP中是否有任何漂亮的解决方案,允许我使用自动增量编号扩展文件名,如果文件名已存在?我不想在一些不可读的东西中重命名上传的文件。所以我认为这会是这样漂亮:PHP文件上传:保留两个文件,如果名称相同

Cover.png 
Cover (1).png 
Cover (2).png 
… 
+0

使用file_exists()函数可以非常简单地实现这个 –

+0

但是file_exists只能给我提供true或false的代码... –

+1

你需要照顾更多的东西,先编写简单的算法然后在编码中实现它,你 –

回答

6

首先,让我们单独的扩展和文件名:

$file=pathinfo(<your file>); 

为了方便文件检查和追加,保存的文件名到新的变量:

$filename=$file['filename']; 

然后,让我们来检查文件是否已经存在,并保存新的文件名,直到它不存在:

$i=1; 
while(file_exists($filename.".".$file['extension'])){ 
$filename=$file['filename']." ($i)"; 
$i++; 
} 

在这里,你有一个原始文件,你的<append something>还不存在。

编辑: 增加了自动增量编号。

+0

很容易!!! :)但自动增量解决方案更好,我认为。但是,谢谢! –

+0

已编辑并添加自动增量;) –

+0

您的代码需要稍微修复。 –

-2

使用file_exists()功能和rename()函数来实现你想要做什么(所有图像文件是允许的。)!

+0

我是否需要任何正则表达式?当然,我可以检查原始文件名是否已经存在,但是如果我想上传另一个Cover.png,我该如何识别已经有多少个? –

2

明白了:

if (preg_match('/(^.*?)+(?:\((\d+)\))?(\.(?:\w){0,3}$)/si', $FILE_NAME, $regs)) { 
     $filename = $regs[1]; 
     $copies = (int)$regs[2]; 
     $fileext = $regs[3]; 

     $fullfile = $FILE_DIRECTORY.$FILE_NAME; 
     while(file_exists($fullfile) && !is_dir($fullfile)) 
     { 
       $copies = $copies+1; 
       $FILE_NAME = $filename."(".$copies.")".$fileext; 
       $fullfile = $FILE_DIRECTORY.$FILE_NAME; 
     } 
} 
return $FILE_NAME; 
+0

您可以使用['' pathinfo'](http://php.net/manual/en/function.pathinfo.php),而不是正则表达式;这种方法更简单, –

相关问题