2012-06-17 119 views
-1

誰能幫我解決以下問題?這是問題:在一個表單POST我讓人們可以上傳文件。下面的代碼檢查在「上傳」文件夾中是否有另一個具有相同名稱的文件。如果是這樣,文件被重命名爲這個例子:用php重命名文件夾中的重複文件

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 

...等等。

如何修改代碼以達到該結果? 非常感謝您提供的新手式問題。我真的很新鮮! :)

+0

只需切換字符串連接?除非我錯過了一些東西。 –

+0

@EvanMulawski是的,擴展 –

+0

@DanLee啊,就是這樣。我有一種感覺太簡單了。 –

回答

7

只要改變$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; 
+2

我只是喜歡一件襯衫! :) –

+0

非常感謝。我已經測試了這兩個建議,但是在這兩種情況下,新文件在擴展中都有缺失。如果我使用第一行,則擴展完全缺失。在第二個代碼中,重複文件在文件名和擴展名之間沒有點存儲。 :) – mattew

+0

@mattew啊是的,我忘了把'.'放在它們兩個中。他們應該現在工作:) – Paulpro