用php重命名文件夹中的重复文件

Posted

技术标签:

【中文标题】用php重命名文件夹中的重复文件【英文标题】:Renaming duplicate files in a folder with php 【发布时间】:2012-06-17 00:40:55 【问题描述】:

谁能帮我解决以下问题?这是问题所在:我以 POST 的形式让人们可以上传文件。下面的代码检查“上传”文件夹中是否有另一个同名文件。如果是这样,文件被重命名为这个例子:

hallo.txt
1_hallo.txt
2_hallo.txt

...等等。

这是使用的代码:

$OriginalFilename = $FinalFilename = $_FILES['uploaded']['name'];
// rename file if it already exists by prefixing an incrementing number
$FileCounter = 1;
while (file_exists( 'uploads/'.$FinalFilename ))
$FinalFilename = $FileCounter++.'_'.$OriginalFilename;

我想以不同的方式重命名文件。渐进式数字应该在文件之后,当然,在扩展之前。这是以前的相同示例,但以我想要的方式:

hallo.txt
hallo_1.txt
hallo_2.txt

...等等。

如何修改代码以达到该结果? 提前感谢您,并对我的新手式问题感到抱歉。我真的是新手! :)

垫子

【问题讨论】:

只是切换字符串连接?除非我错过了什么。 @EvanMulawski 是的,扩展 @DanLee 啊,就是这样。我觉得这太简单了。 【参考方案1】:

只需更改$FinalFilename

$FinalFilename = pathinfo($OriginalFilename, PATHINFO_FILENAME) . '_' . $FileCounter++ . '.' . pathinfo($OriginalFilename, PATHINFO_EXTENSION);

或者(如果你有很多同名的文件并且经常迭代不止一次,那就更好了):

$filename = pathinfo($OriginalFilename, PATHINFO_FILENAME);
$extension =  pathinfo($OriginalFilename, PATHINFO_EXTENSION);
while (file_exists( 'uploads/'.$FinalFilename ))
    $FinalFilename = $filename . '_' . $FileCounter++ . '.' . $extension;

【讨论】:

非常感谢。我已经测试了这两个建议,但在这两种情况下,新文件的扩展都缺少一些东西。如果我使用第一行,则扩展完全丢失。在第二个代码中,重复文件存储在文件名和扩展名之间没有点。 :) @mattew 啊,是的,我忘了把. 放在他们两个里面。他们现在应该可以工作了:) 是的,是的,非常感谢,我确实找到了丢失的“。”在代码中,现在完美运行!我决定使用您建议的第二个代码。你真的很棒。谢谢!!!

以上是关于用php重命名文件夹中的重复文件的主要内容,如果未能解决你的问题,请参考以下文章

重命名目录中的所有文件[重复]

重命名功能不适用于 php 中的文件夹

在上传[重复]之前用文章名称重命名文件名

用PHP重命名$ _FILES(文件)

在Python中重命名目录中的多个文件[重复]

注销时重命名文件