在PHP中是否有任何漂亮的解决方案,允许我使用自动增量编号扩展文件名,如果文件名已存在?我不想在一些不可读的东西中重命名上传的文件。所以我认为这会是这样漂亮:PHP文件上传:保留两个文件,如果名称相同
Cover.png
Cover (1).png
Cover (2).png
…
在PHP中是否有任何漂亮的解决方案,允许我使用自动增量编号扩展文件名,如果文件名已存在?我不想在一些不可读的东西中重命名上传的文件。所以我认为这会是这样漂亮:PHP文件上传:保留两个文件,如果名称相同
Cover.png
Cover (1).png
Cover (2).png
…
首先,让我们单独的扩展和文件名:
$file=pathinfo(<your file>);
为了方便文件检查和追加,保存的文件名到新的变量:
$filename=$file['filename'];
然后,让我们来检查文件是否已经存在,并保存新的文件名,直到它不存在:
$i=1;
while(file_exists($filename.".".$file['extension'])){
$filename=$file['filename']." ($i)";
$i++;
}
在这里,你有一个原始文件,你的<append something>
还不存在。
编辑: 增加了自动增量编号。
很容易!!! :)但自动增量解决方案更好,我认为。但是,谢谢! –
已编辑并添加自动增量;) –
您的代码需要稍微修复。 –
使用file_exists()
功能和rename()
函数来实现你想要做什么(所有图像文件是允许的。)!
我是否需要任何正则表达式?当然,我可以检查原始文件名是否已经存在,但是如果我想上传另一个Cover.png,我该如何识别已经有多少个? –
明白了:
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;
您可以使用['' pathinfo'](http://php.net/manual/en/function.pathinfo.php),而不是正则表达式;这种方法更简单, –
使用file_exists()函数可以非常简单地实现这个 –
但是file_exists只能给我提供true或false的代码... –
你需要照顾更多的东西,先编写简单的算法然后在编码中实现它,你 –